36 lines
745 B
TypeScript
36 lines
745 B
TypeScript
import type { VNodeChild } from 'vue';
|
|
|
|
interface INotificationArguments {
|
|
message: string | VNodeChild;
|
|
type: string;
|
|
title?: string;
|
|
}
|
|
|
|
export function useNotification(args: INotificationArguments) {
|
|
const duration = 5000;
|
|
|
|
const progressBar = h('div', {
|
|
class: 'el-notification__progress',
|
|
style: {
|
|
animationDuration: `${duration}ms`,
|
|
},
|
|
});
|
|
|
|
const bodyContent: VNodeChild = typeof args.message === 'string' ? h('p', args.message) : args.message;
|
|
|
|
const messageVNode = h('div', [
|
|
bodyContent,
|
|
progressBar,
|
|
]);
|
|
|
|
const notification = ElNotification({
|
|
title: args.title,
|
|
duration: 0,
|
|
message: messageVNode,
|
|
type: args.type,
|
|
} as NotificationOptions);
|
|
|
|
setTimeout(() => {
|
|
notification.close();
|
|
}, duration);
|
|
}
|