Files
dashboard/context/stores/useAccessManagementStore.ts
T
Alberto-Audrix 32a36cceff
CI / lint-and-test (push) Canceled after 0s
first commit
2026-07-28 08:55:05 +07:00

58 lines
1.7 KiB
TypeScript

import { useState, useCallback } from 'react';
import { User, Group, Role, Permission, RolePermission } from '../../types.ts';
import {
initialUsers,
initialGroups,
initialRoles,
allPermissions,
initialRolePermissions,
} from '../../mockData/accessManagementData.ts';
export const useAccessManagementStore = () => {
const [users, setUsers] = useState<User[]>(initialUsers);
const [groups, _setGroups] = useState<Group[]>(initialGroups);
const [roles, _setRoles] = useState<Role[]>(initialRoles);
const [permissions, _setPermissions] = useState<Permission[]>(allPermissions);
const [rolePermissions, setRolePermissions] = useState<RolePermission[]>(initialRolePermissions);
const onAddUser = useCallback(
(userData: Omit<User, 'id'>) =>
setUsers((prev) => [...prev, { ...userData, id: `user-${Date.now()}` }]),
[]
);
const onUpdateUser = useCallback(
(updatedUser: User) =>
setUsers((prev) => prev.map((u) => (u.id === updatedUser.id ? updatedUser : u))),
[]
);
const onDeleteUser = useCallback(
(userId: string) => setUsers((prev) => prev.filter((u) => u.id !== userId)),
[]
);
const onTogglePermission = useCallback((roleId: string, permissionId: string) => {
setRolePermissions((prev) => {
const hasPermission = prev.some(
(rp) => rp.roleId === roleId && rp.permissionId === permissionId
);
if (hasPermission) {
return prev.filter((rp) => !(rp.roleId === roleId && rp.permissionId === permissionId));
} else {
return [...prev, { roleId, permissionId }];
}
});
}, []);
return {
users,
groups,
roles,
permissions,
rolePermissions,
onAddUser,
onUpdateUser,
onDeleteUser,
onTogglePermission,
};
};