UNPKG

wcz-layout

Version:

148 lines (147 loc) 4.69 kB
import { t as serverEnv } from "./env-CoveIivr.mjs"; import { l as getAccessToken } from "./utils-2XiozDlV.mjs"; import { t as getAppToken } from "./msalServer-CkNOOjjH.mjs"; import { t as authenticationMiddleware } from "./authMiddleware--HdlhhZO.mjs"; import { a as batchDeleteFiles, c as getFile, d as updateFileMeta, l as getFileMetas, o as deleteFile, s as downloadFile, u as getFileThumbnail } from "./file-DM1x40eJ.mjs"; import { createServerFn } from "@tanstack/react-start"; import { mutationOptions, queryOptions } from "@tanstack/react-query"; import { uuidv7 } from "uuidv7"; import { Upload } from "tus-js-client"; //#region src/server/actions/file.ts const getFileUploadToken = createServerFn({ method: "GET" }).middleware([authenticationMiddleware({ optional: true })]).handler(async () => { let token; try { token = await getAccessToken("file"); } catch { token = await getAppToken("file"); } return { token, endpoint: `${serverEnv.FILE_BASE_URL}/v1/upload` }; }); //#endregion //#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: async ({ appName, subId, file, setProgress }) => { const { token, endpoint } = await getFileUploadToken(); const id = uuidv7(); const dotIndex = file.name.lastIndexOf("."); const fileExtension = dotIndex >= 0 ? file.name.slice(dotIndex + 1) : ""; await new Promise((resolve, reject) => { new Upload(file, { endpoint, chunkSize: 1048576, metadata: { id, appName, subId, fileName: file.name, fileExtension, mimeType: file.type }, headers: { Authorization: `Bearer ${token}` }, onProgress: (bytesUploaded, bytesTotal) => setProgress?.(bytesUploaded / bytesTotal * 100), onError: reject, onSuccess: () => resolve() }).start(); }); return { id, appName, subId, fileName: file.name }; }, 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-C5-a_6W6.mjs.map