79 lines
1.8 KiB
JavaScript
Executable File
79 lines
1.8 KiB
JavaScript
Executable File
import { constant } from 'fp-ts/lib/function';
|
|
import { defineAsyncComponent, computed } from 'vue';
|
|
import { getUseTogglePropsDefinition, useToggle } from '../toggle';
|
|
const DEFAULT_MESSAGE_ICONS = {
|
|
'is-info': defineAsyncComponent(() => import('../../components/icons/infoCircle')),
|
|
'is-success': defineAsyncComponent(() => import('../../components/icons/checkCircle')),
|
|
'is-warning': defineAsyncComponent(() => import('../../components/icons/exclamationTriangle')),
|
|
'is-danger': defineAsyncComponent(() => import('../../components/icons/exclamationCircle'))
|
|
};
|
|
export function getMessageIcons(icons) {
|
|
return { ...DEFAULT_MESSAGE_ICONS,
|
|
...icons
|
|
};
|
|
}
|
|
export const UseMessagePropsDefinition = { ...getUseTogglePropsDefinition('isActive', true),
|
|
title: {
|
|
type: String
|
|
},
|
|
isClosable: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
message: {
|
|
type: String
|
|
},
|
|
variant: {
|
|
type: String,
|
|
default: ''
|
|
},
|
|
size: {
|
|
type: String,
|
|
default: ''
|
|
},
|
|
iconSize: {
|
|
type: String,
|
|
default: ''
|
|
},
|
|
useAutoClose: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
duration: {
|
|
type: Number,
|
|
default: 2000
|
|
},
|
|
useIcon: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
icons: {
|
|
type: Object,
|
|
default: constant(DEFAULT_MESSAGE_ICONS)
|
|
},
|
|
icon: {
|
|
type: [Object, Function]
|
|
}
|
|
};
|
|
export function useMessage(props) {
|
|
const toggle = useToggle(props, 'isActive');
|
|
const icon = computed(() => props.icon ?? props.icons[props.variant]);
|
|
const iconSize = computed(() => props.iconSize || props.size || 'is-large');
|
|
|
|
function setAutoClose() {
|
|
if (props.useAutoClose) {
|
|
setTimeout(() => {
|
|
if (toggle.isOn.value) {
|
|
toggle.setOff();
|
|
}
|
|
}, props.duration);
|
|
}
|
|
}
|
|
|
|
return { ...toggle,
|
|
icon,
|
|
iconSize,
|
|
setAutoClose
|
|
};
|
|
}
|
|
//# sourceMappingURL=useMessage.js.map
|