// Copyright (C) 2012-2021 Zammad Foundation, https://zammad-foundation.org/ import { v4 as uuid } from 'uuid' import { ref } from 'vue' import type { NewNotificationInterface, NotificationInterface, } from '@common/types/notification' const notifications = ref<NotificationInterface[]>([]) const defaultNotificationDuration = 5000 function removeNotification(id: string) { notifications.value = notifications.value.filter( (notification: NotificationInterface) => notification.id !== id, ) } function clearAllNotifications() { notifications.value = [] } export default function useNotifications() { function notify(notification: NewNotificationInterface): string { // TODO: Check different solution for the optional id in the interface, but required field in the removeNotification function. let { id } = notification if (!id) { id = uuid() } const newNotification: NotificationInterface = { id, ...notification } notifications.value.push(newNotification) setTimeout(() => { removeNotification(newNotification.id) }, newNotification.duration || defaultNotificationDuration) return newNotification.id } return { notify, notifications, clearAllNotifications, } }