dashboard/src/hooks/use-query/useUploadQuery.ts
Rama main · réplica de lectura del repositorio original.
import { useMutation, useQueryClient } from '@tanstack/react-query';
import axiosInstance from '@/config/axios';
export type UploadData = {
app_name: string;
version: string;
channel: string;
publish: boolean;
critical: boolean;
intermediate: boolean;
platform: string;
arch: string;
changelog?: string;
files: File[];
updater?: string;
signature?: string;
};
export const useUploadQuery = () => {
const queryClient = useQueryClient();
const uploadMutation = useMutation({
mutationFn: async (data: UploadData) => {
const formData = new FormData();
data.files.forEach(file => {
formData.append('file', file);
});
const jsonData = {
app_name: data.app_name,
version: data.version,
channel: data.channel,
publish: data.publish,
critical: data.critical,
intermediate: data.intermediate,
platform: data.platform,
arch: data.arch,
changelog: data.changelog,
...(data.updater && { updater: data.updater }),
...(data.signature && { signature: data.signature }),
};
formData.append('data', JSON.stringify(jsonData));
const response = await axiosInstance.post('/upload', formData, {
headers: {
'Content-Type': 'multipart/form-data',
},
});
return response.data;
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['apps'] });
},
});
const upload = async (data: UploadData) => {
return await uploadMutation.mutateAsync(data);
};
return { upload, isLoading: uploadMutation.isPending, error: uploadMutation.error };
};