UNPKG

@dbs-portal/module-identity

Version:

Identity management module for user and role management

188 lines 5.84 kB
/** * User management hooks */ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { UserService } from '../services'; const userService = new UserService(); // Query Keys export const userKeys = { all: ['users'], lists: () => [...userKeys.all, 'list'], list: (filters) => [...userKeys.lists(), filters], details: () => [...userKeys.all, 'detail'], detail: (id) => [...userKeys.details(), id], roles: (id) => [...userKeys.all, 'roles', id], permissions: (id) => [...userKeys.all, 'permissions', id], twoFactor: (id) => [...userKeys.all, 'two-factor', id], }; /** * Hook to fetch users list */ export function useUsers(filters = {}) { return useQuery({ queryKey: userKeys.list(filters), queryFn: () => userService.getUsers(filters), staleTime: 5 * 60 * 1000, // 5 minutes }); } /** * Hook to fetch single user */ export function useUser(id) { return useQuery({ queryKey: userKeys.detail(id), queryFn: () => userService.getUser(id), enabled: !!id, staleTime: 2 * 60 * 1000, // 2 minutes }); } /** * Hook to create user */ export function useCreateUser() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (user) => userService.createUser(user), onSuccess: () => { queryClient.invalidateQueries({ queryKey: userKeys.lists() }); }, }); } /** * Hook to update user */ export function useUpdateUser() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (user) => userService.updateUser(user), onSuccess: (_, variables) => { queryClient.invalidateQueries({ queryKey: userKeys.lists() }); queryClient.invalidateQueries({ queryKey: userKeys.detail(variables.id) }); }, }); } /** * Hook to delete user */ export function useDeleteUser() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (id) => userService.deleteUser(id), onSuccess: () => { queryClient.invalidateQueries({ queryKey: userKeys.lists() }); }, }); } /** * Hook to change user password */ export function useChangeUserPassword() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (request) => userService.changePassword(request), onSuccess: (_, variables) => { queryClient.invalidateQueries({ queryKey: userKeys.detail(variables.userId) }); }, }); } /** * Hook to lock user */ export function useLockUser() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (request) => userService.lockUser(request), onSuccess: (_, variables) => { queryClient.invalidateQueries({ queryKey: userKeys.lists() }); queryClient.invalidateQueries({ queryKey: userKeys.detail(variables.userId) }); }, }); } /** * Hook to unlock user */ export function useUnlockUser() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (userId) => userService.unlockUser(userId), onSuccess: (_, userId) => { queryClient.invalidateQueries({ queryKey: userKeys.lists() }); queryClient.invalidateQueries({ queryKey: userKeys.detail(userId) }); }, }); } /** * Hook to get user roles */ export function useUserRoles(userId) { return useQuery({ queryKey: userKeys.roles(userId), queryFn: () => userService.getUserRoles(userId), enabled: !!userId, staleTime: 5 * 60 * 1000, // 5 minutes }); } /** * Hook to assign roles to user */ export function useAssignUserRoles() { const queryClient = useQueryClient(); return useMutation({ mutationFn: ({ userId, roleNames }) => userService.assignRoles(userId, roleNames), onSuccess: (_, variables) => { queryClient.invalidateQueries({ queryKey: userKeys.roles(variables.userId) }); queryClient.invalidateQueries({ queryKey: userKeys.detail(variables.userId) }); queryClient.invalidateQueries({ queryKey: userKeys.lists() }); }, }); } /** * Hook to get user permissions */ export function useUserPermissions(userId) { return useQuery({ queryKey: userKeys.permissions(userId), queryFn: () => userService.getUserPermissions(userId), enabled: !!userId, staleTime: 5 * 60 * 1000, // 5 minutes }); } /** * Hook to setup two-factor authentication */ export function useSetupTwoFactor() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (userId) => userService.setupTwoFactor(userId), onSuccess: (_, userId) => { queryClient.invalidateQueries({ queryKey: userKeys.twoFactor(userId) }); }, }); } /** * Hook to verify two-factor authentication */ export function useVerifyTwoFactor() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (request) => userService.verifyTwoFactor(request), onSuccess: (_, variables) => { queryClient.invalidateQueries({ queryKey: userKeys.detail(variables.userId) }); queryClient.invalidateQueries({ queryKey: userKeys.twoFactor(variables.userId) }); }, }); } /** * Hook to disable two-factor authentication */ export function useDisableTwoFactor() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (userId) => userService.disableTwoFactor(userId), onSuccess: (_, userId) => { queryClient.invalidateQueries({ queryKey: userKeys.detail(userId) }); queryClient.invalidateQueries({ queryKey: userKeys.twoFactor(userId) }); }, }); } //# sourceMappingURL=use-users.js.map