Files
Virtnet.bond/themes/default/js/app.js
2025-11-30 11:57:22 +01:00

51 lines
1.5 KiB
JavaScript

document.addEventListener('livewire:init', () => {
Livewire.hook('request', ({ fail }) => {
fail(({ status, preventDefault }) => {
if (status === 419) {
window.location.reload()
preventDefault()
}
})
});
})
Alpine.store('notifications', {
init() {
Livewire.on('notify', (e) => {
Alpine.store('notifications').addNotification(e);
});
},
notifications: [],
addNotification(notification) {
notification = notification[0]
notification.show = false;
notification.id = Date.now() + Math.floor(Math.random() * 1000);
this.notifications.push(notification);
// Update the notification to show it
Alpine.nextTick(() => {
this.notifications = this.notifications.map(notification => {
if (notification.id === notification.id) {
notification.show = true;
}
return notification;
});
});
setTimeout(() => {
this.removeNotification(notification.id);
}, notification.timeout || 5000);
},
removeNotification(id) {
this.notifications = this.notifications.map(notification => {
if (notification.id === id) {
notification.show = false;
}
return notification;
}).filter(notification => notification.show); // This line filters out notifications that are not shown
}
});