UNPKG

@dbs-portal/module-identity

Version:

Identity management module for user and role management

136 lines 4.28 kB
/** * Role management hooks */ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { RoleService } from '../services'; const roleService = new RoleService(); // Query Keys export const roleKeys = { all: ['roles'], lists: () => [...roleKeys.all, 'list'], list: (filters) => [...roleKeys.lists(), filters], details: () => [...roleKeys.all, 'detail'], detail: (id) => [...roleKeys.details(), id], permissions: (id) => [...roleKeys.all, 'permissions', id], users: (id) => [...roleKeys.all, 'users', id], }; /** * Hook to fetch roles list */ export function useRoles(filters = {}) { return useQuery({ queryKey: roleKeys.list(filters), queryFn: () => roleService.getRoles(filters), staleTime: 5 * 60 * 1000, // 5 minutes }); } /** * Hook to fetch single role */ export function useRole(id) { return useQuery({ queryKey: roleKeys.detail(id), queryFn: () => roleService.getRole(id), enabled: !!id, staleTime: 2 * 60 * 1000, // 2 minutes }); } /** * Hook to create role */ export function useCreateRole() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (role) => roleService.createRole(role), onSuccess: () => { queryClient.invalidateQueries({ queryKey: roleKeys.lists() }); }, }); } /** * Hook to update role */ export function useUpdateRole() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (role) => roleService.updateRole(role), onSuccess: (_, variables) => { queryClient.invalidateQueries({ queryKey: roleKeys.lists() }); queryClient.invalidateQueries({ queryKey: roleKeys.detail(variables.id) }); }, }); } /** * Hook to delete role */ export function useDeleteRole() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (id) => roleService.deleteRole(id), onSuccess: () => { queryClient.invalidateQueries({ queryKey: roleKeys.lists() }); }, }); } /** * Hook to get role permissions */ export function useRolePermissions(roleId) { return useQuery({ queryKey: roleKeys.permissions(roleId), queryFn: () => roleService.getRolePermissions(roleId), enabled: !!roleId, staleTime: 5 * 60 * 1000, // 5 minutes }); } /** * Hook to grant permission to role */ export function useGrantRolePermission() { const queryClient = useQueryClient(); return useMutation({ mutationFn: ({ roleId, permissionName }) => roleService.grantPermission(roleId, permissionName), onSuccess: (_, variables) => { queryClient.invalidateQueries({ queryKey: roleKeys.permissions(variables.roleId) }); queryClient.invalidateQueries({ queryKey: roleKeys.detail(variables.roleId) }); }, }); } /** * Hook to revoke permission from role */ export function useRevokeRolePermission() { const queryClient = useQueryClient(); return useMutation({ mutationFn: ({ roleId, permissionName }) => roleService.revokePermission(roleId, permissionName), onSuccess: (_, variables) => { queryClient.invalidateQueries({ queryKey: roleKeys.permissions(variables.roleId) }); queryClient.invalidateQueries({ queryKey: roleKeys.detail(variables.roleId) }); }, }); } /** * Hook to set role permissions (replace all) */ export function useSetRolePermissions() { const queryClient = useQueryClient(); return useMutation({ mutationFn: ({ roleId, permissionNames }) => roleService.setPermissions(roleId, permissionNames), onSuccess: (_, variables) => { queryClient.invalidateQueries({ queryKey: roleKeys.permissions(variables.roleId) }); queryClient.invalidateQueries({ queryKey: roleKeys.detail(variables.roleId) }); }, }); } /** * Hook to get users in role */ export function useRoleUsers(roleId) { return useQuery({ queryKey: roleKeys.users(roleId), queryFn: () => roleService.getRoleUsers(roleId), enabled: !!roleId, staleTime: 5 * 60 * 1000, // 5 minutes }); } //# sourceMappingURL=use-roles.js.map