mirror of
https://github.com/beak-insights/felicity-lims.git
synced 2025-02-23 08:23:00 +08:00
95 lines
2.9 KiB
TypeScript
95 lines
2.9 KiB
TypeScript
import { defineStore } from 'pinia'
|
|
import { IGroup, IPermission, IUser } from '../models/auth'
|
|
import { IPagination, IPageInfo } from '../models/pagination'
|
|
import { useApiUtil } from '../composables'
|
|
|
|
const { withClientQuery } = useApiUtil()
|
|
|
|
import {
|
|
GET_GROUPS_AND_PERMISSIONS, GET_ALL_USERS
|
|
} from '../graphql/_queries';
|
|
|
|
|
|
interface IUserPage extends IPagination<IUser> {}
|
|
|
|
export const useUserStore = defineStore('user', {
|
|
state: () => {
|
|
return {
|
|
users: [],
|
|
usersPageInfo: undefined,
|
|
usersTotalCount: 0,
|
|
fetchingUsers: false,
|
|
groups: [],
|
|
fetchingGroups: false,
|
|
permissions: [],
|
|
} as {
|
|
users: IUser[];
|
|
usersPageInfo?: IPageInfo;
|
|
usersTotalCount?: number;
|
|
fetchingUsers: boolean;
|
|
groups: IGroup[];
|
|
fetchingGroups: boolean;
|
|
permissions: IPermission[];
|
|
}
|
|
},
|
|
getters: {
|
|
getUsers: (state) => state.users,
|
|
getSamplePageInfo: (state) => state.usersPageInfo,
|
|
getGroups: (state) => state.groups,
|
|
getPermissions: (state) => state.permissions,
|
|
},
|
|
actions: {
|
|
async fetchUsers(params){
|
|
this.fetchingUsers = true;
|
|
await withClientQuery(GET_ALL_USERS, params, "userAll")
|
|
.then((users: IUserPage) => {
|
|
this.fetchingUsers = false;
|
|
this.users = users.items?.filter(user => user.email != "system_daemon@system.daemon") ?? []
|
|
this.usersTotalCount = users.totalCount
|
|
this.usersPageInfo = users.pageInfo
|
|
}).catch((err) => this.fetchingUsers = false)
|
|
},
|
|
addUser(payload: IUser): void {
|
|
this.users?.unshift(payload);
|
|
},
|
|
updateUser(payload: IUser): void {
|
|
const index = this.users?.findIndex(user => user.uid === payload?.uid)
|
|
if(index && index > -1) this.users[index] = payload
|
|
},
|
|
|
|
async fetchGroupsAndPermissions() {
|
|
this.fetchingGroups = true;
|
|
await withClientQuery(GET_GROUPS_AND_PERMISSIONS, {}, undefined)
|
|
.then((resp: any) => {
|
|
this.fetchingGroups = false;
|
|
this.groups = resp.groupAll
|
|
this.permissions = resp.permissionAll
|
|
}).catch(err => this.fetchingGroups = false)
|
|
},
|
|
addGroup(payload: IGroup): void {
|
|
this.groups?.unshift(payload);
|
|
},
|
|
updateGroup(payload: IGroup): void {
|
|
const index = this.groups?.findIndex(group => group.uid === payload?.uid)
|
|
if(index > -1) this.groups[index] = payload
|
|
},
|
|
updateGroupsAndPermissions(payload) {
|
|
let group = payload?.group
|
|
const index = this.groups?.findIndex(g => g.uid === group?.uid)
|
|
if(index > -1){
|
|
group.permissions = group?.permissions || []
|
|
this.groups[index] = group
|
|
}
|
|
},
|
|
getRoles(){
|
|
const final = new Map();
|
|
for (const role of this.groups) {
|
|
final.set(role.name, role.name)
|
|
}
|
|
return final
|
|
},
|
|
addUserAuth(payload) {},
|
|
updateUserAuth(payload) {}
|
|
|
|
}
|
|
})
|