refactor(admin): refactor admin roles and users management
This commit is contained in:
77
src/app/(modules)/roles/hooks/useRoleQueries.ts
Normal file
77
src/app/(modules)/roles/hooks/useRoleQueries.ts
Normal file
@@ -0,0 +1,77 @@
|
||||
'use client';
|
||||
|
||||
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
||||
import { useMemo } from 'react';
|
||||
import { toast } from 'sonner';
|
||||
|
||||
import { mapPermissionTree } from '@/components/permission-tree';
|
||||
import { permissionService, roleService } from '@/services/api';
|
||||
import type { Role, RoleListParams } from '@/types';
|
||||
|
||||
import { roleKeys } from '../queries/roleKeys';
|
||||
import type { StatusFilter } from './useRoleFilters';
|
||||
|
||||
interface UseRolesQueryParams {
|
||||
skip: number;
|
||||
limit: number;
|
||||
searchTerm: string;
|
||||
statusFilter: StatusFilter;
|
||||
}
|
||||
|
||||
function buildRoleListParams({
|
||||
skip,
|
||||
limit,
|
||||
searchTerm,
|
||||
statusFilter,
|
||||
}: UseRolesQueryParams): RoleListParams {
|
||||
return {
|
||||
skip,
|
||||
limit,
|
||||
search_term: searchTerm || undefined,
|
||||
effective_status: statusFilter === 'all' ? undefined : statusFilter === 'active',
|
||||
sort_by: 'created_at',
|
||||
sort_order: 'desc',
|
||||
};
|
||||
}
|
||||
|
||||
export function useRolesQuery(params: UseRolesQueryParams) {
|
||||
const { skip, limit, searchTerm, statusFilter } = params;
|
||||
const listParams = useMemo(
|
||||
() => buildRoleListParams({ skip, limit, searchTerm, statusFilter }),
|
||||
[limit, searchTerm, skip, statusFilter],
|
||||
);
|
||||
|
||||
return useQuery({
|
||||
queryKey: roleKeys.list(listParams),
|
||||
queryFn: () => roleService.getRoles(listParams),
|
||||
});
|
||||
}
|
||||
|
||||
export function usePermissionsTreeQuery() {
|
||||
const permissionsQuery = useQuery({
|
||||
queryKey: ['permissions', 'tree'],
|
||||
queryFn: permissionService.getPermissions,
|
||||
});
|
||||
const permissionTree = useMemo(
|
||||
() => mapPermissionTree(permissionsQuery.data?.tree || []),
|
||||
[permissionsQuery.data?.tree],
|
||||
);
|
||||
|
||||
return {
|
||||
...permissionsQuery,
|
||||
permissionTree,
|
||||
};
|
||||
}
|
||||
|
||||
export function useRoleStatusMutation() {
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: (role: Role) => roleService.updateRoleStatus(role.id, !role.effective_status),
|
||||
onSuccess: () => {
|
||||
toast.success('Role status updated');
|
||||
queryClient.invalidateQueries({ queryKey: roleKeys.all });
|
||||
},
|
||||
onError: () => toast.error('Failed to update role status'),
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user