wcz-layout
Version:
104 lines (103 loc) • 3.39 kB
JavaScript
import { a as batchDeleteFiles, c as getFile, d as updateFileMeta, f as uploadFile, l as getFileMetas, o as deleteFile, s as downloadFile, u as getFileThumbnail } from "./file-bAh5yYg7.mjs";
import { mutationOptions, queryOptions } from "@tanstack/react-query";
//#region src/data/client/file.ts
const QUERY_KEY = "file";
const HOUR = 1e3 * 60 * 60;
const baseOptions = {
staleTime: HOUR,
gcTime: HOUR,
refetchOnWindowFocus: false
};
async function streamToObjectUrl(stream) {
const blob = await new Response(stream).blob();
return URL.createObjectURL(blob);
}
function saveBlob(blob, fileName) {
const url = URL.createObjectURL(blob);
const anchor = document.createElement("a");
anchor.href = url;
anchor.download = fileName;
anchor.click();
URL.revokeObjectURL(url);
}
const fileMetasQueryOptions = (params) => queryOptions({
queryKey: [
QUERY_KEY,
"meta",
params.appName,
params.subId
],
queryFn: () => getFileMetas({ data: params }),
...baseOptions
});
const fileThumbnailQueryOptions = (params) => queryOptions({
queryKey: [
QUERY_KEY,
"thumbnail",
params.appName,
params.id
],
queryFn: async () => streamToObjectUrl(await getFileThumbnail({ data: params })),
enabled: !!params.id,
...baseOptions
});
const fileQueryOptions = (params) => queryOptions({
queryKey: [
QUERY_KEY,
params.appName,
params.id
],
queryFn: async () => streamToObjectUrl(await getFile({ data: params })),
enabled: !!params.id,
...baseOptions
});
const downloadFileMutationOptions = () => mutationOptions({ mutationFn: async (data) => {
const stream = await downloadFile({ data });
saveBlob(await new Response(stream).blob(), `${data.fileName}.${data.fileExtension}`);
} });
const openFileMutationOptions = () => mutationOptions({ mutationFn: async (data) => {
const stream = await getFile({ data });
window.open(await streamToObjectUrl(stream));
} });
const updateFileMetaMutationOptions = ({ queryClient }) => mutationOptions({
mutationFn: (data) => updateFileMeta({ data }),
onSettled: () => queryClient.invalidateQueries({
queryKey: [QUERY_KEY, "meta"],
exact: false
})
});
const deleteFileMutationOptions = ({ queryClient }) => mutationOptions({
mutationFn: (data) => deleteFile({ data }),
onSettled: () => queryClient.invalidateQueries({
queryKey: [QUERY_KEY, "meta"],
exact: false
})
});
const batchDeleteFilesMutationOptions = ({ queryClient }) => mutationOptions({
mutationFn: (data) => batchDeleteFiles({ data }),
onSettled: () => queryClient.invalidateQueries({
queryKey: [QUERY_KEY, "meta"],
exact: false
})
});
const uploadFileMutationOptions = ({ queryClient }) => mutationOptions({
mutationFn: ({ appName, subId, file }) => {
const formData = new FormData();
formData.append("appName", appName);
formData.append("subId", subId);
formData.append("file", file);
return uploadFile({ data: formData });
},
onSuccess: (result) => queryClient.invalidateQueries({
queryKey: [
QUERY_KEY,
"meta",
result.appName,
result.subId
],
exact: false
})
});
//#endregion
export { fileQueryOptions as a, updateFileMetaMutationOptions as c, fileMetasQueryOptions as i, uploadFileMutationOptions as l, deleteFileMutationOptions as n, fileThumbnailQueryOptions as o, downloadFileMutationOptions as r, openFileMutationOptions as s, batchDeleteFilesMutationOptions as t };
//# sourceMappingURL=file-b_Ff1MXY.mjs.map