Files
memberApp/src/vueLib/tables/roles/RoleTable.ts
2025-11-04 15:31:36 +01:00

87 lines
2.1 KiB
TypeScript

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<Roles>([]);
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,
};
}