Moisés de Jesús Cortés Castellanos 70b6fe99a0
UPDATE: Logo y versión (#2)
2024-12-16 15:55:10 -06:00

128 lines
2.2 KiB
JavaScript

import { reactive } from "vue";
import { api, closeSession } from '@Services/Api';
import { resetPermissions } from '@Plugins/RolePermission';
/**
* Cache
*
* Permite cargar los datos una vez para la sesión actual. Se mantienen mientras
* no se recargue la página.
*/
const page = reactive({
lang: 'es',
app: {},
user: {
id: 0,
name: 'public'
}
})
/**
* Recarga datos en cache
*/
const reloadApp = () => {
const user = localStorage.user
const app = localStorage.app
if(user) {
page.user = JSON.parse(user);
}
if(app) {
page.app = JSON.parse(app);
}
}
/**
* Limpiar sesión de usuario
*/
const resetPage = () => {
localStorage.removeItem('user');
}
/**
* Permite buscar una opcionalmente
*/
const view = ({
name = '',
params = {},
query = {},
}) => ({
name: name,
params,
query,
})
/**
* Almacenar datos usuario
*/
const defineUser = (user) => {
localStorage.user = JSON.stringify({
id: user.id,
name: user.name,
lastname: `${user.paternal} ${user?.maternal ?? ''}`,
email: user.email,
phone: user.phone,
profile_photo_url: user.profile_photo_url,
profile_photo_path: user.profile_photo_path,
});
}
/**
* Definir datos de la aplicación
*/
const defineApp = (app) => {
localStorage.app = JSON.stringify(app);
}
/**
* Instalar el componente de forma nativa
*/
const pagePlugin = {
install: (app, options) => {
app.config.globalProperties.$page = page;
app.config.globalProperties.$view = view;
}
}
/**
* Reload user
*/
const reloadUser = () => {
return api.get(route('user.show'), {
onSuccess: (r) => {
defineUser(r.user)
reloadApp()
return r.user;
}
});
}
/**
* Cerrar sesión
*/
const logout = () => {
resetPermissions()
resetPage()
api.post(route('auth.logout'), {
onSuccess: (r) => {
if(r.is_revoked === true) {
closeSession()
}
}
});
};
export {
pagePlugin,
page,
defineApp,
defineUser,
reloadApp,
reloadUser,
resetPage,
logout,
view
}