2025-12-22 14:53:19 +07:00
|
|
|
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
|
|
|
import * as appVersionService from "@/services/app-version.service";
|
|
|
|
|
import type { AxiosProgressEvent } from "axios";
|
|
|
|
|
import type { Version } from "@/types/file";
|
|
|
|
|
|
|
|
|
|
const APP_VERSION_QUERY_KEYS = {
|
|
|
|
|
all: ["app-version"] as const,
|
|
|
|
|
agentVersion: () => [...APP_VERSION_QUERY_KEYS.all, "agent"] as const,
|
|
|
|
|
softwareList: () => [...APP_VERSION_QUERY_KEYS.all, "software"] as const,
|
|
|
|
|
blacklist: () => [...APP_VERSION_QUERY_KEYS.all, "blacklist"] as const,
|
|
|
|
|
requiredFiles: () => [...APP_VERSION_QUERY_KEYS.all, "required-files"] as const,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Hook để lấy danh sách phiên bản agent
|
|
|
|
|
*/
|
|
|
|
|
export function useGetAgentVersion(enabled = true) {
|
|
|
|
|
return useQuery<Version[]>({
|
|
|
|
|
queryKey: APP_VERSION_QUERY_KEYS.agentVersion(),
|
|
|
|
|
queryFn: () => appVersionService.getAgentVersion(),
|
|
|
|
|
enabled,
|
|
|
|
|
staleTime: 60 * 1000, // 1 minute
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Hook để lấy danh sách phần mềm
|
|
|
|
|
*/
|
|
|
|
|
export function useGetSoftwareList(enabled = true) {
|
|
|
|
|
return useQuery<Version[]>({
|
|
|
|
|
queryKey: APP_VERSION_QUERY_KEYS.softwareList(),
|
|
|
|
|
queryFn: () => appVersionService.getSoftwareList(),
|
|
|
|
|
enabled,
|
|
|
|
|
staleTime: 60 * 1000,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Hook để upload file
|
|
|
|
|
*/
|
|
|
|
|
export function useUploadSoftware() {
|
|
|
|
|
const queryClient = useQueryClient();
|
|
|
|
|
|
|
|
|
|
return useMutation({
|
|
|
|
|
mutationFn: (data: {
|
|
|
|
|
formData: FormData;
|
|
|
|
|
onUploadProgress?: (progressEvent: AxiosProgressEvent) => void;
|
|
|
|
|
}) => appVersionService.uploadSoftware(data.formData, data.onUploadProgress),
|
|
|
|
|
onSuccess: () => {
|
|
|
|
|
// Invalidate software list
|
|
|
|
|
queryClient.invalidateQueries({
|
|
|
|
|
queryKey: APP_VERSION_QUERY_KEYS.softwareList(),
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Hook để lấy danh sách blacklist
|
|
|
|
|
*/
|
|
|
|
|
export function useGetBlacklist(enabled = true) {
|
|
|
|
|
return useQuery({
|
|
|
|
|
queryKey: APP_VERSION_QUERY_KEYS.blacklist(),
|
|
|
|
|
queryFn: () => appVersionService.getBlacklist(),
|
|
|
|
|
enabled,
|
|
|
|
|
staleTime: 60 * 1000,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Hook để thêm vào blacklist
|
|
|
|
|
*/
|
|
|
|
|
export function useAddBlacklist() {
|
|
|
|
|
const queryClient = useQueryClient();
|
|
|
|
|
|
|
|
|
|
return useMutation({
|
|
|
|
|
mutationFn: (data: any) => appVersionService.addBlacklist(data),
|
|
|
|
|
onSuccess: () => {
|
|
|
|
|
queryClient.invalidateQueries({
|
|
|
|
|
queryKey: APP_VERSION_QUERY_KEYS.blacklist(),
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Hook để xóa khỏi blacklist
|
|
|
|
|
*/
|
|
|
|
|
export function useDeleteBlacklist() {
|
|
|
|
|
const queryClient = useQueryClient();
|
|
|
|
|
|
|
|
|
|
return useMutation({
|
|
|
|
|
mutationFn: (appId: number) => appVersionService.deleteBlacklist(appId),
|
|
|
|
|
onSuccess: () => {
|
|
|
|
|
queryClient.invalidateQueries({
|
|
|
|
|
queryKey: APP_VERSION_QUERY_KEYS.blacklist(),
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Hook để cập nhật blacklist
|
|
|
|
|
*/
|
|
|
|
|
export function useUpdateBlacklist() {
|
|
|
|
|
const queryClient = useQueryClient();
|
|
|
|
|
|
|
|
|
|
return useMutation({
|
|
|
|
|
mutationFn: ({ appId, data }: { appId: string; data: any }) =>
|
|
|
|
|
appVersionService.updateBlacklist(appId, data),
|
|
|
|
|
onSuccess: () => {
|
|
|
|
|
queryClient.invalidateQueries({
|
|
|
|
|
queryKey: APP_VERSION_QUERY_KEYS.blacklist(),
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Hook để yêu cầu cập nhật blacklist
|
|
|
|
|
*/
|
|
|
|
|
export function useRequestUpdateBlacklist() {
|
|
|
|
|
return useMutation({
|
|
|
|
|
mutationFn: (data: any) => appVersionService.requestUpdateBlacklist(data),
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Hook để lấy danh sách file bắt buộc
|
|
|
|
|
*/
|
|
|
|
|
export function useGetRequiredFiles(enabled = true) {
|
|
|
|
|
return useQuery({
|
|
|
|
|
queryKey: APP_VERSION_QUERY_KEYS.requiredFiles(),
|
|
|
|
|
queryFn: () => appVersionService.getRequiredFiles(),
|
|
|
|
|
enabled,
|
|
|
|
|
staleTime: 60 * 1000,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Hook để thêm file bắt buộc
|
|
|
|
|
*/
|
|
|
|
|
export function useAddRequiredFile() {
|
|
|
|
|
const queryClient = useQueryClient();
|
|
|
|
|
|
|
|
|
|
return useMutation({
|
|
|
|
|
mutationFn: (data: any) => appVersionService.addRequiredFile(data),
|
|
|
|
|
onSuccess: () => {
|
|
|
|
|
queryClient.invalidateQueries({
|
|
|
|
|
queryKey: APP_VERSION_QUERY_KEYS.requiredFiles(),
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Hook để xóa file bắt buộc
|
|
|
|
|
*/
|
|
|
|
|
export function useDeleteRequiredFile() {
|
|
|
|
|
const queryClient = useQueryClient();
|
|
|
|
|
|
|
|
|
|
return useMutation({
|
2026-04-01 16:56:52 +07:00
|
|
|
mutationFn: (data: { MsiFileIds: number[] }) => appVersionService.deleteRequiredFile(data),
|
2025-12-22 14:53:19 +07:00
|
|
|
onSuccess: () => {
|
|
|
|
|
queryClient.invalidateQueries({
|
|
|
|
|
queryKey: APP_VERSION_QUERY_KEYS.requiredFiles(),
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Hook để xóa file
|
|
|
|
|
*/
|
|
|
|
|
export function useDeleteFile() {
|
|
|
|
|
const queryClient = useQueryClient();
|
|
|
|
|
|
|
|
|
|
return useMutation({
|
|
|
|
|
mutationFn: (fileId: number) => appVersionService.deleteFile(fileId),
|
|
|
|
|
onSuccess: () => {
|
|
|
|
|
queryClient.invalidateQueries({
|
|
|
|
|
queryKey: APP_VERSION_QUERY_KEYS.softwareList(),
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|