Portal/rsconcept/frontend/src/features/users/stores/role.ts
Ivan 90be3b5aa7
Some checks failed
Backend CI / build (3.12) (push) Has been cancelled
Frontend CI / build (22.x) (push) Has been cancelled
R: Refactor users feature boundary
2025-02-12 13:07:26 +03:00

38 lines
975 B
TypeScript

import { create } from 'zustand';
import { UserRole } from '../models/user';
export interface RoleFlags {
isOwner: boolean;
isEditor: boolean;
isStaff: boolean;
adminMode: boolean;
}
interface RoleStore {
role: UserRole;
setRole: (value: UserRole) => void;
adjustRole: (flags: RoleFlags) => void;
}
export const useRoleStore = create<RoleStore>()(set => ({
role: UserRole.READER,
setRole: value => set({ role: value }),
adjustRole: ({ isOwner, isEditor, isStaff, adminMode }: RoleFlags) =>
set(state => {
if (state.role === UserRole.EDITOR && (isOwner || isStaff || isEditor)) {
return { role: UserRole.EDITOR };
}
if (isStaff && (state.role === UserRole.ADMIN || adminMode)) {
return { role: UserRole.ADMIN };
}
if (isOwner) {
return { role: UserRole.OWNER };
}
if (isEditor) {
return { role: UserRole.EDITOR };
}
return { role: UserRole.READER };
})
}));