import { appApi } from 'src/boot/axios'; import { ref, computed } from 'vue'; import { useNotify } from 'src/vueLib/general/useNotify'; import { i18n } from 'boot/lang'; import type { Roles } from 'src/vueLib/models/roles'; import { useUserStore } from 'src/vueLib/login/userStore'; import { useLogin } from 'src/vueLib/login/useLogin'; export const roles = ref([]); export function useRoleTable() { const pagination = ref({ sortBy: 'role', descending: false, page: 1, rowsPerPage: 10, }); const columns = computed(() => [ { name: 'role', align: 'left' as const, label: i18n.global.t('role'), field: 'role', sortable: true, }, { name: 'permissions', align: 'left' as const, label: i18n.global.t('permissions'), field: '', style: 'width: 120px; max-width: 120px;', }, { name: 'option', align: 'center' as const, label: '', field: 'option', icon: 'option' }, ]); const { NotifyResponse } = useNotify(); const loading = ref(false); const userStore = useUserStore(); const login = useLogin(); //updates user list from database async function updateRoles() { loading.value = true; await appApi .get('roles?id=0') .then((resp) => { if (resp.data === null) { roles.value = []; return; } roles.value = resp.data as Roles; if (roles.value === null) { roles.value = []; return; } }) .catch((err) => { NotifyResponse(err, 'error'); }) .finally(() => { loading.value = false; }); await appApi .get('/login/me') .then((resp) => { userStore .setUser({ id: resp.data.id, username: resp.data.username, role: resp.data.role }) .catch((err) => NotifyResponse(err, 'error')); login.refresh().catch((err) => NotifyResponse(err, 'error')); }) .catch(() => { login.logout().catch((err) => NotifyResponse(err, 'error')); }); } return { roles, pagination, columns, loading, updateRoles, }; }