{"version":3,"file":"file-d3KXwzPE.mjs","names":["mutationOptions","queryOptions","z","queryClient","batchDeleteFiles","deleteFile","downloadFile","getFile","getFileMetas","getFileThumbnail","updateFileMeta","uploadFile","FileSchema","GetFileMetasSchema","UpdateFileMetaSchema","UploadFileMetaSchema","QUERY_KEY","HOUR","baseOptions","staleTime","gcTime","refetchOnWindowFocus","responseToObjectUrl","response","Response","Promise","blob","URL","createObjectURL","saveBlob","Blob","fileName","url","anchor","document","createElement","href","download","click","revokeObjectURL","fileMetasQueryOptions","params","input","queryKey","appName","subId","queryFn","data","fileThumbnailQueryOptions","id","enabled","fileQueryOptions","downloadFileMutationOptions","mutationFn","fileExtension","openFileMutationOptions","Error","window","open","updateFileMetaMutationOptions","onSettled","invalidateQueries","exact","deleteFileMutationOptions","batchDeleteFilesMutationOptions","UseUploadFileProps","onSuccess","result","Awaited","ReturnType","onError","error","useUploadFile","mutate"],"sources":["../src/data/client/file.ts"],"sourcesContent":["import { mutationOptions, queryOptions } from \"@tanstack/react-query\";\nimport type { z } from \"zod\";\nimport { queryClient } from \"~/lib/queryClient\";\nimport {\n  batchDeleteFiles,\n  deleteFile,\n  downloadFile,\n  getFile,\n  getFileMetas,\n  getFileThumbnail,\n  updateFileMeta,\n  uploadFile,\n} from \"~/data/server/file\";\nimport type {\n  FileSchema,\n  GetFileMetasSchema,\n  UpdateFileMetaSchema,\n  UploadFileMetaSchema,\n} from \"~/data/server/file\";\n\nconst QUERY_KEY = \"file\";\nconst HOUR = 1000 * 60 * 60;\n\nconst baseOptions = {\n  staleTime: HOUR,\n  gcTime: HOUR,\n  refetchOnWindowFocus: false,\n};\n\nasync function responseToObjectUrl(response: Response): Promise<string> {\n  const blob = await response.blob();\n  return URL.createObjectURL(blob);\n}\n\nfunction saveBlob(blob: Blob, fileName: string): void {\n  const url = URL.createObjectURL(blob);\n  const anchor = document.createElement(\"a\");\n  anchor.href = url;\n  anchor.download = fileName;\n  anchor.click();\n  URL.revokeObjectURL(url);\n}\n\nexport const fileMetasQueryOptions = (params: z.input<typeof GetFileMetasSchema>) =>\n  queryOptions({\n    queryKey: [QUERY_KEY, \"meta\", params.appName, params.subId],\n    queryFn: () => getFileMetas({ data: params }),\n    ...baseOptions,\n  });\n\nexport const fileThumbnailQueryOptions = (params: z.input<typeof FileSchema>) =>\n  queryOptions({\n    queryKey: [QUERY_KEY, \"thumbnail\", params.appName, params.id],\n    queryFn: async () => responseToObjectUrl(await getFileThumbnail({ data: params })),\n    enabled: !!params.id,\n    ...baseOptions,\n  });\n\nexport const fileQueryOptions = (params: z.input<typeof FileSchema>) =>\n  queryOptions({\n    queryKey: [QUERY_KEY, params.appName, params.id],\n    queryFn: async () => responseToObjectUrl(await getFile({ data: params })),\n    enabled: !!params.id,\n    ...baseOptions,\n  });\n\nexport const downloadFileMutationOptions = () =>\n  mutationOptions({\n    mutationFn: async (\n      data: z.input<typeof FileSchema> & { fileName: string; fileExtension: string },\n    ) => {\n      const response = await downloadFile({ data });\n      saveBlob(await response.blob(), `${data.fileName}.${data.fileExtension}`);\n    },\n  });\n\nexport const openFileMutationOptions = () =>\n  mutationOptions<void, Error, z.input<typeof FileSchema>>({\n    mutationFn: async (data) => {\n      const response = await getFile({ data });\n      window.open(await responseToObjectUrl(response));\n    },\n  });\n\nexport const updateFileMetaMutationOptions = () =>\n  mutationOptions({\n    mutationFn: (data: z.input<typeof UpdateFileMetaSchema>) => updateFileMeta({ data }),\n    onSettled: () => queryClient.invalidateQueries({ queryKey: [QUERY_KEY, \"meta\"], exact: false }),\n  });\n\nexport const deleteFileMutationOptions = () =>\n  mutationOptions({\n    mutationFn: (data: z.input<typeof FileSchema>) => deleteFile({ data }),\n    onSettled: () => queryClient.invalidateQueries({ queryKey: [QUERY_KEY, \"meta\"], exact: false }),\n  });\n\nexport const batchDeleteFilesMutationOptions = () =>\n  mutationOptions({\n    mutationFn: (data: z.input<typeof GetFileMetasSchema>) => batchDeleteFiles({ data }),\n    onSettled: () => queryClient.invalidateQueries({ queryKey: [QUERY_KEY, \"meta\"], exact: false }),\n  });\n\ninterface UseUploadFileProps {\n  onSuccess?: (result: Awaited<ReturnType<typeof uploadFile>>) => void;\n  onError?: (error: Error) => void;\n}\n\nexport const useUploadFile = ({ onSuccess, onError }: UseUploadFileProps = {}) => {\n  const mutate = async (data: z.input<typeof UploadFileMetaSchema>) => {\n    if (!data.subId) throw new Error(\"subId is required for file upload\");\n\n    try {\n      const result = await uploadFile({ data });\n      queryClient.invalidateQueries({\n        queryKey: [QUERY_KEY, \"meta\", data.appName, data.subId],\n        exact: false,\n      });\n      onSuccess?.(result);\n    } catch (error) {\n      onError?.(error as Error);\n    }\n  };\n\n  return { mutate };\n};\n"],"mappings":"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"}