123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- import dayjs from 'dayjs'
- import NotificationWorker from 'worker-loader!../workers/notification.js'
- import { createRandom } from '@/helpers/uuidv4'
- const clickEvents = {}
- const showEvents = {}
- const errorEvents = {}
- const closeEvents = {}
- const noop = () => {}
- export const notificationWorker = new NotificationWorker()
- const notificationClicked = data => {
- const activeFn = clickEvents[data.callback_key]
- if (typeof activeFn === 'function') {
- activeFn(data)
- }
- delete clickEvents[data.callback_key]
- }
- const notificationShowed = data => {
- const activeFn = showEvents[data.callback_key]
- if (typeof activeFn === 'function') {
- activeFn(data)
- }
- delete showEvents[data.callback_key]
- }
- const notificationErrored = data => {
- const activeFn = errorEvents[data.callback_key]
- if (typeof activeFn === 'function') {
- activeFn(data)
- }
- delete errorEvents[data.callback_key]
- }
- const notificationClosed = data => {
- const activeFn = closeEvents[data.callback_key]
- if (typeof activeFn === 'function') {
- activeFn(data)
- }
- delete closeEvents[data.callback_key]
- }
- notificationWorker.addEventListener('message', evt => {
- if (evt.data.type === 'NotificationClicked') {
- notificationClicked(evt.data.data || {})
- } else if (evt.data.type === 'NotificationShowed') {
- notificationShowed(evt.data.data || {})
- } else if (evt.data.type === 'NotificationErrored') {
- notificationErrored(evt.data.data || {})
- } else if (evt.data.type === 'NotificationClosed') {
- notificationClosed(evt.data.data || {})
- }
- })
- export const createNotification = data => {
- /**
- *
- * @param { Object } 会原样在onClick返回
- *
- */
- const { onClick = noop, onShow = noop, onError = noop, onClose = noop, ...rest } = data
- const timemap = dayjs().valueOf()
- const callback_key = `${timemap}_${createRandom()}`
- clickEvents[callback_key] = onClick
- clickEvents[callback_key] = onShow
- clickEvents[callback_key] = onError
- clickEvents[callback_key] = onClose
- notificationWorker.postMessage({
- ...rest,
- timemap,
- callback_key,
- type: 'create'
- })
- }
|