91 lines
2.5 KiB
TypeScript
91 lines
2.5 KiB
TypeScript
|
|
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
||
|
|
import * as permissionService from "@/services/permission.service";
|
||
|
|
|
||
|
|
export const PERMISSION_QUERY_KEYS = {
|
||
|
|
all: ["permissions"] as const,
|
||
|
|
list: () => [...PERMISSION_QUERY_KEYS.all, "list"] as const,
|
||
|
|
dbList: () => [...PERMISSION_QUERY_KEYS.all, "db-list"] as const,
|
||
|
|
byCategory: () => [...PERMISSION_QUERY_KEYS.all, "by-category"] as const,
|
||
|
|
detail: (value: number) => [...PERMISSION_QUERY_KEYS.all, "detail", value] as const,
|
||
|
|
};
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Hook để lấy danh sách permission từ enum
|
||
|
|
*/
|
||
|
|
export function useGetPermissionList(enabled = true) {
|
||
|
|
return useQuery({
|
||
|
|
queryKey: PERMISSION_QUERY_KEYS.list(),
|
||
|
|
queryFn: () => permissionService.getPermissionList(),
|
||
|
|
enabled,
|
||
|
|
staleTime: 10 * 60 * 1000, // 10 minutes
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Hook để lấy permission theo category
|
||
|
|
*/
|
||
|
|
export function useGetPermissionByCategory(enabled = true) {
|
||
|
|
return useQuery({
|
||
|
|
queryKey: PERMISSION_QUERY_KEYS.byCategory(),
|
||
|
|
queryFn: () => permissionService.getPermissionByCategory(),
|
||
|
|
enabled,
|
||
|
|
staleTime: 10 * 60 * 1000, // 10 minutes
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Hook để lấy chi tiết permission theo value
|
||
|
|
*/
|
||
|
|
export function useGetPermissionByValue(value: number, enabled = true) {
|
||
|
|
return useQuery({
|
||
|
|
queryKey: PERMISSION_QUERY_KEYS.detail(value),
|
||
|
|
queryFn: () => permissionService.getPermissionByValue(value),
|
||
|
|
enabled: enabled && value > 0,
|
||
|
|
staleTime: 10 * 60 * 1000, // 10 minutes
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Hook để lấy danh sách permission từ database
|
||
|
|
*/
|
||
|
|
export function useGetPermissionDbList(enabled = true) {
|
||
|
|
return useQuery({
|
||
|
|
queryKey: PERMISSION_QUERY_KEYS.dbList(),
|
||
|
|
queryFn: () => permissionService.getPermissionDbList(),
|
||
|
|
enabled,
|
||
|
|
staleTime: 10 * 60 * 1000, // 10 minutes
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Hook để seed permission từ enum vào DB
|
||
|
|
*/
|
||
|
|
export function useSeedPermissionFromEnum() {
|
||
|
|
const queryClient = useQueryClient();
|
||
|
|
|
||
|
|
return useMutation({
|
||
|
|
mutationFn: () => permissionService.seedPermissionFromEnum(),
|
||
|
|
onSuccess: () => {
|
||
|
|
queryClient.invalidateQueries({
|
||
|
|
queryKey: PERMISSION_QUERY_KEYS.all,
|
||
|
|
});
|
||
|
|
},
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Hook để xóa permission
|
||
|
|
*/
|
||
|
|
export function useDeletePermission() {
|
||
|
|
const queryClient = useQueryClient();
|
||
|
|
|
||
|
|
return useMutation({
|
||
|
|
mutationFn: (id: number) => permissionService.deletePermission(id),
|
||
|
|
onSuccess: () => {
|
||
|
|
queryClient.invalidateQueries({
|
||
|
|
queryKey: PERMISSION_QUERY_KEYS.all,
|
||
|
|
});
|
||
|
|
},
|
||
|
|
});
|
||
|
|
}
|