Moisés de Jesús Cortés Castellanos 28c5ba153b
UPDATE: Actualización de dependencias mayor (#6)
- TailwindCSS 3 => 4
- Diseño cuadrado
- Otras dependencias.
2025-03-04 23:20:48 -06:00

134 lines
4.1 KiB
JavaScript

import { defineStore } from 'pinia'
import { api } from '@Services/Api'
import { page } from '@Services/Page'
import { hasPermission, reloadPermissions, getAllRolesIds } from '@Plugins/RolePermission'
import { boot as bootAuthUsers, addUser, removeUser } from '@Plugins/AuthUsers'
// Almacenar estado de la barra lateral derecha
const useNotifier = defineStore('notifier', {
state: () => ({
counter: 0,
unreadClosedCounter: 0,
notifications: [],
isStarted: false,
isEnabled: import.meta.env.VITE_REVERB_ACTIVE === 'true',
user_id: 0,
}),
actions: {
// Iniciar instancia
boot() {
if(!this.isStarted && this.isEnabled) {
this.user_id = page.user.id;
this.subscribeGLobalNotifications();
this.subscribeUserNotifications();
this.suscribeAuthUsers();
this.suscribeRoles();
this.isStarted = true;
this.getUpdates();
}
},
// Detener instancia
stop() {
if(this.isStarted) {
this.unsubscribeUserNotification();
this.unsubscribeGlobalNotification();
this.started.value = false;
}
},
// Notificaciones Globales
subscribeGLobalNotifications() {
Echo.private('Global')
.listen('Notification', e => {
Notify[e.type](e.message, e.title, e.timeout)
this.getUpdates()
});
},
unsubscribeGlobalNotifications() {
Echo.leave('Global');
},
// Usuarios logueados
suscribeAuthUsers() {
if(hasPermission('users.index')) {
Echo.join('online')
.here((users) => {
bootAuthUsers(users);
})
.joining((user) => {
addUser(user);
})
.leaving((user) => {
removeUser(user);
});
} else {
Echo.join('online');
}
},
suscribeRoles() {
const roles = getAllRolesIds();
roles.forEach(role => {
Echo.private(`App.Models.Role.${role}`)
.listen('UpdateRoleUser', e => {
reloadPermissions();
Notify.success(`Actualizando permisos de ${e.role.description}`)
});
});
},
// Notificaciones del usuario
subscribeUserNotifications() {
Echo.private(`App.Models.User.${this.user_id}`)
.notification(x => {
Notify[x.typeNotification](x.description, x.title, x.timeout)
this.getUpdates()
})
},
unsubscribeUserNotification() {
Echo.leave(`App.Models.User.${this.user_id}`);
},
readNotification(id) {
api.post(route('system.notifications.read'), {
data: {
id
},
onSuccess: res => {
this.getUpdates();
},
onFailed: res => {
this.getUpdates();
}
})
},
closeNotification(id) {
api.post(route('system.notifications.close'), {
data: {
id
},
onSuccess: res => {
this.getUpdates();
},
onFailed: res => {
this.getUpdates();
}
})
},
getUpdates() {
api.get(route('system.notifications.all-unread'), {
onSuccess: res => {
this.counter = res.total;
this.unreadClosedCounter = res.unread_closed;
this.notifications = res.notifications;
},
onFailed: res => {
console.log('error', res)
}
})
}
}
})
export default useNotifier