@dbs-portal/module-identity
Version:
Identity management module for user and role management
136 lines • 4.28 kB
JavaScript
/**
* 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