2025-05-11 14:14:50 -06:00

68 lines
2.0 KiB
JavaScript

// notify-channel-service.js
import { VuexyNotifyService } from './vuexy/vuexy-notify';
import { ToastifyDriver } from './drivers/toastify-driver';
import { NotyfDriver } from './drivers/notyf-driver';
import { ToastrDriver } from './drivers/toastr-driver';
import { VuexyDriver } from './drivers/vuexy-driver';
const NotifyChannelService = {
async notify({ channel = 'toastr', ...payload }) {
switch (channel) {
case 'toastr':
ToastrDriver.notify(payload);
break;
case 'notyf':
NotyfDriver.notify(payload);
break;
case 'toastify':
ToastifyDriver.notify(payload);
break;
case 'sweetalert': {
const { SweetAlertDriver } = await import('./drivers/sweetalert-driver');
SweetAlertDriver.notify(payload);
break;
}
case 'vuexy':
VuexyDriver.notify(payload);
break;
case 'custom':
if (typeof window.VuexyNotify === 'function') {
window.VuexyNotify(payload);
}
break;
default:
console.warn(`[Notify] Canal desconocido: ${channel}`);
break;
}
},
fromLocalStorage() {
const data = localStorage.getItem('vuexy_notification');
if (data) {
try {
const payload = JSON.parse(data);
NotifyChannelService.notify(payload);
localStorage.removeItem('vuexy_notification');
} catch (e) {
console.error('❌ Error parseando notificación de storage', e);
}
}
},
fromSession() {
if (window.vuexySessionNotification) {
NotifyChannelService.notify(window.vuexySessionNotification);
window.vuexySessionNotification = null;
}
}
};
export { NotifyChannelService };
window.vuexyNotify = VuexyNotifyService;