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