wcz-test 6.11.0 → 6.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/FileHooks-SPG6LQAD.js +3261 -0
- package/dist/FileHooks-SPG6LQAD.js.map +1 -0
- package/dist/components.js +1 -1
- package/dist/hooks.js +1008 -1
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +0 -6
- package/dist/index.js +420 -11
- package/dist/index.js.map +1 -1
- package/dist/models.d.ts +10 -10
- package/dist/models.js +4 -4
- package/dist/models.js.map +1 -1
- package/dist/queries.d.ts +6 -6
- package/dist/queries.js +1 -1
- package/package.json +15 -15
- package/dist/FileHooks-BbjesS5D.js +0 -195
- package/dist/FileHooks-BbjesS5D.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wcz-test",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.12.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"type": "module",
|
|
@@ -58,23 +58,11 @@
|
|
|
58
58
|
"prepublishOnly": "npm run build"
|
|
59
59
|
},
|
|
60
60
|
"dependencies": {
|
|
61
|
-
"@t3-oss/env-core": "^0.13.8",
|
|
62
|
-
"@types/pg": "^8.15.6",
|
|
63
|
-
"axios": "^1.13.2",
|
|
64
|
-
"better-auth": "1.4.1",
|
|
65
|
-
"dayjs": "^1.11.19",
|
|
66
|
-
"drizzle-orm": "^0.44.7",
|
|
67
61
|
"file-saver": "^2.0.5",
|
|
68
|
-
"i18next": "^25.6.3",
|
|
69
62
|
"i18next-browser-languagedetector": "^8.2.0",
|
|
70
|
-
"pg": "^8.16.3",
|
|
71
63
|
"react-dropzone": "^14.3.8",
|
|
72
|
-
"react-i18next": "^16.3.5",
|
|
73
|
-
"react-intersection-observer": "^10.0.0",
|
|
74
64
|
"react-number-format": "^5.4.4",
|
|
75
|
-
"tus-js-client": "^4.3.1"
|
|
76
|
-
"uuidv7": "^1.1.0",
|
|
77
|
-
"zod": "^4.1.13"
|
|
65
|
+
"tus-js-client": "^4.3.1"
|
|
78
66
|
},
|
|
79
67
|
"devDependencies": {
|
|
80
68
|
"@tanstack/eslint-config": "^0.3.3",
|
|
@@ -82,6 +70,7 @@
|
|
|
82
70
|
"@tanstack/eslint-plugin-router": "^1.139.0",
|
|
83
71
|
"@types/file-saver": "^2.0.7",
|
|
84
72
|
"@types/node": "^22.10.2",
|
|
73
|
+
"@types/pg": "^8.15.6",
|
|
85
74
|
"@types/react": "^19.2.7",
|
|
86
75
|
"@types/react-dom": "^19.2.3",
|
|
87
76
|
"@vitejs/plugin-react": "^5.1.1",
|
|
@@ -103,6 +92,7 @@
|
|
|
103
92
|
"@mui/material": "7.x",
|
|
104
93
|
"@mui/x-data-grid-premium": "8.x",
|
|
105
94
|
"@mui/x-date-pickers-pro": "8.x",
|
|
95
|
+
"@t3-oss/env-core": "0.x",
|
|
106
96
|
"@tanstack/query-db-collection": "1.x",
|
|
107
97
|
"@tanstack/react-db": "0.x",
|
|
108
98
|
"@tanstack/react-form": "1.x",
|
|
@@ -110,7 +100,17 @@
|
|
|
110
100
|
"@tanstack/react-router": "1.x",
|
|
111
101
|
"@tanstack/react-router-ssr-query": "1.x",
|
|
112
102
|
"@tanstack/react-start": "1.x",
|
|
103
|
+
"axios": "1.x",
|
|
104
|
+
"better-auth": "1.x",
|
|
105
|
+
"dayjs": "1.x",
|
|
106
|
+
"drizzle-orm": "0.x",
|
|
107
|
+
"i18next": "25.x",
|
|
108
|
+
"pg": "8.x",
|
|
113
109
|
"react": "19.x",
|
|
114
|
-
"react-dom": "19.x"
|
|
110
|
+
"react-dom": "19.x",
|
|
111
|
+
"react-i18next": "16.x",
|
|
112
|
+
"react-intersection-observer": "10.x",
|
|
113
|
+
"uuidv7": "1.x",
|
|
114
|
+
"zod": "4.x"
|
|
115
115
|
}
|
|
116
116
|
}
|
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
|
|
2
|
-
import saveAs from "file-saver";
|
|
3
|
-
import { useState } from "react";
|
|
4
|
-
import { Upload } from "tus-js-client";
|
|
5
|
-
import { uuidv7 } from "uuidv7";
|
|
6
|
-
import z__default from "zod";
|
|
7
|
-
import { F as FileMetaSchema } from "./FileMeta-G1oT3mYK.js";
|
|
8
|
-
import { t as toKebabCase, h as httpClient } from "./utils-JYv9O0GI.js";
|
|
9
|
-
import { c as clientEnv } from "./env-CoxTjaDr.js";
|
|
10
|
-
const QUERY_KEY = "file";
|
|
11
|
-
const HOUR = 1e3 * 60 * 60;
|
|
12
|
-
const APP_NAME = toKebabCase(clientEnv.VITE_APP_TITLE);
|
|
13
|
-
z__default.object({
|
|
14
|
-
appName: z__default.string().min(1).max(255).default(APP_NAME).optional(),
|
|
15
|
-
subId: z__default.uuid()
|
|
16
|
-
});
|
|
17
|
-
const useGetFileMetas = (params, options) => {
|
|
18
|
-
const queryParams = new URLSearchParams();
|
|
19
|
-
queryParams.append("appName", params.appName ?? APP_NAME);
|
|
20
|
-
queryParams.append("subId", params.subId);
|
|
21
|
-
return useQuery({
|
|
22
|
-
...options,
|
|
23
|
-
queryKey: [QUERY_KEY, "meta", params.appName ?? APP_NAME, params.subId],
|
|
24
|
-
queryFn: ({ signal }) => httpClient.request({
|
|
25
|
-
url: `/${QUERY_KEY}/v1/meta?${queryParams.toString()}`,
|
|
26
|
-
method: "GET",
|
|
27
|
-
signal
|
|
28
|
-
}),
|
|
29
|
-
staleTime: HOUR,
|
|
30
|
-
gcTime: HOUR,
|
|
31
|
-
refetchOnWindowFocus: false
|
|
32
|
-
});
|
|
33
|
-
};
|
|
34
|
-
z__default.object({
|
|
35
|
-
appName: z__default.string().min(1).max(255).default(APP_NAME).optional(),
|
|
36
|
-
meta: FileMetaSchema.nullish()
|
|
37
|
-
});
|
|
38
|
-
const useGetFileThumbnail = (params, options) => {
|
|
39
|
-
const queryParams = new URLSearchParams();
|
|
40
|
-
queryParams.append("appName", params.appName ?? APP_NAME);
|
|
41
|
-
queryParams.append("id", params.meta?.id ?? "");
|
|
42
|
-
return useQuery({
|
|
43
|
-
...options,
|
|
44
|
-
queryKey: [QUERY_KEY, "thumbnail", params.appName ?? APP_NAME, params.meta?.id],
|
|
45
|
-
queryFn: ({ signal }) => httpClient.request({
|
|
46
|
-
url: `/${QUERY_KEY}/v1/thumbnail?${queryParams.toString()}`,
|
|
47
|
-
method: "GET",
|
|
48
|
-
signal,
|
|
49
|
-
responseType: "blob"
|
|
50
|
-
}),
|
|
51
|
-
select: (data) => URL.createObjectURL(data),
|
|
52
|
-
staleTime: HOUR,
|
|
53
|
-
gcTime: HOUR,
|
|
54
|
-
refetchOnWindowFocus: false,
|
|
55
|
-
enabled: !!params.meta && options?.enabled !== false
|
|
56
|
-
});
|
|
57
|
-
};
|
|
58
|
-
z__default.object({
|
|
59
|
-
appName: z__default.string().min(1).max(255).default(APP_NAME).optional(),
|
|
60
|
-
meta: FileMetaSchema.nullish()
|
|
61
|
-
});
|
|
62
|
-
const useGetFile = (params, options) => {
|
|
63
|
-
const queryParams = new URLSearchParams();
|
|
64
|
-
queryParams.append("appName", params.appName ?? APP_NAME);
|
|
65
|
-
queryParams.append("id", params.meta?.id ?? "");
|
|
66
|
-
return useQuery({
|
|
67
|
-
...options,
|
|
68
|
-
queryKey: [QUERY_KEY, params.appName ?? APP_NAME, params.meta?.id],
|
|
69
|
-
queryFn: ({ signal }) => httpClient.request({
|
|
70
|
-
url: `/${QUERY_KEY}/v1?${queryParams.toString()}`,
|
|
71
|
-
method: "GET",
|
|
72
|
-
signal,
|
|
73
|
-
responseType: "blob"
|
|
74
|
-
}),
|
|
75
|
-
select: (data) => URL.createObjectURL(data),
|
|
76
|
-
staleTime: HOUR,
|
|
77
|
-
gcTime: HOUR,
|
|
78
|
-
refetchOnWindowFocus: false,
|
|
79
|
-
enabled: !!params.meta && options?.enabled !== false
|
|
80
|
-
});
|
|
81
|
-
};
|
|
82
|
-
const useDownloadFile = (options) => {
|
|
83
|
-
return useMutation({
|
|
84
|
-
...options,
|
|
85
|
-
mutationFn: (meta) => httpClient.request({
|
|
86
|
-
url: `/${QUERY_KEY}/v1/download?appName=${APP_NAME}&id=${meta.id}`,
|
|
87
|
-
method: "GET",
|
|
88
|
-
responseType: "blob"
|
|
89
|
-
}),
|
|
90
|
-
onSuccess: (data, variables) => saveAs(data, `${variables.fileName}.${variables.fileExtension}`)
|
|
91
|
-
});
|
|
92
|
-
};
|
|
93
|
-
const useOpenFile = (options) => {
|
|
94
|
-
return useMutation({
|
|
95
|
-
...options,
|
|
96
|
-
mutationFn: (meta) => httpClient.request({
|
|
97
|
-
url: `/${QUERY_KEY}/v1?appName=${APP_NAME}&id=${meta.id}`,
|
|
98
|
-
method: "GET",
|
|
99
|
-
responseType: "blob"
|
|
100
|
-
}),
|
|
101
|
-
onSuccess: (data) => {
|
|
102
|
-
window.open(URL.createObjectURL(data));
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
};
|
|
106
|
-
const useUpdateFileMeta = (options) => {
|
|
107
|
-
const queryClient = useQueryClient();
|
|
108
|
-
return useMutation({
|
|
109
|
-
...options,
|
|
110
|
-
mutationFn: (meta) => httpClient.request({
|
|
111
|
-
url: `/${QUERY_KEY}/v1/meta?appName=${APP_NAME}&id=${meta.id}`,
|
|
112
|
-
method: "PUT",
|
|
113
|
-
data: meta
|
|
114
|
-
}),
|
|
115
|
-
onSettled: () => queryClient.invalidateQueries({ queryKey: [QUERY_KEY, "meta"], exact: false })
|
|
116
|
-
});
|
|
117
|
-
};
|
|
118
|
-
const useDeleteFile = (options) => {
|
|
119
|
-
const queryClient = useQueryClient();
|
|
120
|
-
return useMutation({
|
|
121
|
-
...options,
|
|
122
|
-
mutationFn: (meta) => httpClient.request({
|
|
123
|
-
url: `/${QUERY_KEY}/v1?appName=${APP_NAME}&id=${meta.id}`,
|
|
124
|
-
method: "DELETE"
|
|
125
|
-
}),
|
|
126
|
-
onSettled: () => queryClient.invalidateQueries({ queryKey: [QUERY_KEY, "meta"], exact: false })
|
|
127
|
-
});
|
|
128
|
-
};
|
|
129
|
-
const useDeleteFiles = (options) => {
|
|
130
|
-
const queryClient = useQueryClient();
|
|
131
|
-
return useMutation({
|
|
132
|
-
...options,
|
|
133
|
-
mutationFn: (subId) => httpClient.request({
|
|
134
|
-
url: `/${QUERY_KEY}/v1?appName=${APP_NAME}&subId=${subId}`,
|
|
135
|
-
method: "DELETE"
|
|
136
|
-
}),
|
|
137
|
-
onSettled: () => queryClient.invalidateQueries({ queryKey: [QUERY_KEY, "meta"], exact: false })
|
|
138
|
-
});
|
|
139
|
-
};
|
|
140
|
-
const useUploadFile = ({ subId, onSuccess, onError }) => {
|
|
141
|
-
const [progress, setProgress] = useState(0);
|
|
142
|
-
const queryClient = useQueryClient();
|
|
143
|
-
const mutate = async (file) => {
|
|
144
|
-
if (!subId) throw new Error("subId is required for file upload");
|
|
145
|
-
const metadata = {
|
|
146
|
-
id: uuidv7(),
|
|
147
|
-
appName: APP_NAME,
|
|
148
|
-
subId,
|
|
149
|
-
fileName: file.name
|
|
150
|
-
};
|
|
151
|
-
const upload = new Upload(file, {
|
|
152
|
-
endpoint: `${clientEnv.VITE_API_URL}/${QUERY_KEY}/v1/upload`,
|
|
153
|
-
chunkSize: 1048576,
|
|
154
|
-
// 1 MB
|
|
155
|
-
metadata: {
|
|
156
|
-
id: metadata.id,
|
|
157
|
-
appName: metadata.appName,
|
|
158
|
-
subId: metadata.subId,
|
|
159
|
-
fileName: metadata.fileName,
|
|
160
|
-
fileExtension: file.type
|
|
161
|
-
},
|
|
162
|
-
// headers: { "Authorization": `Bearer ${await getToken()}` }, //TODO: implement token retrieval
|
|
163
|
-
onError: (error) => {
|
|
164
|
-
setProgress(0);
|
|
165
|
-
onError?.(error);
|
|
166
|
-
},
|
|
167
|
-
onProgress: (bytesUploaded, bytesTotal) => {
|
|
168
|
-
setProgress(bytesUploaded / bytesTotal * 100);
|
|
169
|
-
},
|
|
170
|
-
onSuccess: () => {
|
|
171
|
-
setProgress(0);
|
|
172
|
-
queryClient.invalidateQueries({ queryKey: [QUERY_KEY, "meta", subId], exact: false });
|
|
173
|
-
onSuccess?.(metadata);
|
|
174
|
-
}
|
|
175
|
-
});
|
|
176
|
-
const previousUploads = await upload.findPreviousUploads();
|
|
177
|
-
if (previousUploads.length > 0) {
|
|
178
|
-
upload.resumeFromPreviousUpload(previousUploads[0]);
|
|
179
|
-
}
|
|
180
|
-
upload.start();
|
|
181
|
-
};
|
|
182
|
-
return { mutate, progress };
|
|
183
|
-
};
|
|
184
|
-
export {
|
|
185
|
-
useGetFileThumbnail as a,
|
|
186
|
-
useGetFile as b,
|
|
187
|
-
useDownloadFile as c,
|
|
188
|
-
useOpenFile as d,
|
|
189
|
-
useUpdateFileMeta as e,
|
|
190
|
-
useDeleteFile as f,
|
|
191
|
-
useDeleteFiles as g,
|
|
192
|
-
useUploadFile as h,
|
|
193
|
-
useGetFileMetas as u
|
|
194
|
-
};
|
|
195
|
-
//# sourceMappingURL=FileHooks-BbjesS5D.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FileHooks-BbjesS5D.js","sources":["../src/queries/FileHooks.ts"],"sourcesContent":["import { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\r\nimport saveAs from \"file-saver\";\r\nimport { useState } from \"react\";\r\nimport { Upload as TusUpload } from \"tus-js-client\";\r\nimport { uuidv7 } from \"uuidv7\";\r\nimport z from \"zod\";\r\nimport type { DetailedError } from \"tus-js-client\";\r\nimport type { DefinedInitialDataOptions, UseMutationOptions } from \"@tanstack/react-query\";\r\nimport type { FileMeta } from \"~/models/file/FileMeta\";\r\nimport { FileMetaSchema } from \"~/models/file/FileMeta\";\r\nimport { httpClient, toKebabCase } from \"~/lib/utils\";\r\nimport { clientEnv } from \"~/env\";\r\n\r\nconst QUERY_KEY = \"file\";\r\nconst HOUR = 1000 * 60 * 60;\r\nconst APP_NAME = toKebabCase(clientEnv.VITE_APP_TITLE);\r\n\r\ntype OptionalId = string | undefined | null;\r\n\r\ntype BaseFileMetaArrayQueryOptions = Omit<DefinedInitialDataOptions<Array<FileMeta>>, \"queryKey\" | \"queryFn\" | \"staleTime\" | \"gcTime\" | \"refetchOnWindowFocus\" | \"initialData\">;\r\ntype BaseBlobQueryOptions = Omit<DefinedInitialDataOptions<Blob, Error, string>, \"queryKey\" | \"queryFn\" | \"select\" | \"staleTime\" | \"gcTime\" | \"refetchOnWindowFocus\" | \"initialData\">;\r\ntype BaseFileMetaMutationOptions = Omit<UseMutationOptions<FileMeta, Error, FileMeta>, \"mutationFn\" | \"onSettled\">;\r\ntype BaseBlobMutationOptions = Omit<UseMutationOptions<Blob, Error, FileMeta>, \"mutationFn\" | \"onSuccess\">;\r\ntype BaseStringMutationOptions = Omit<UseMutationOptions<string, Error, string>, \"mutationFn\" | \"onSettled\">;\r\n\r\nexport const GetFileMetasParamsSchema = z.object({\r\n appName: z.string().min(1).max(255).default(APP_NAME).optional(),\r\n subId: z.uuid(),\r\n});\r\n\r\nexport type GetFileMetasParams = z.infer<typeof GetFileMetasParamsSchema>;\r\n\r\nexport const useGetFileMetas = (params: GetFileMetasParams, options?: BaseFileMetaArrayQueryOptions) => {\r\n const queryParams = new URLSearchParams();\r\n queryParams.append(\"appName\", params.appName ?? APP_NAME);\r\n queryParams.append(\"subId\", params.subId);\r\n\r\n return useQuery<Array<FileMeta>>({\r\n ...options,\r\n queryKey: [QUERY_KEY, \"meta\", params.appName ?? APP_NAME, params.subId],\r\n queryFn: ({ signal }) => httpClient.request({\r\n url: `/${QUERY_KEY}/v1/meta?${queryParams.toString()}`,\r\n method: \"GET\",\r\n signal,\r\n }),\r\n staleTime: HOUR,\r\n gcTime: HOUR,\r\n refetchOnWindowFocus: false,\r\n });\r\n};\r\n\r\nexport const GetFileThumbnailParamsSchema = z.object({\r\n appName: z.string().min(1).max(255).default(APP_NAME).optional(),\r\n meta: FileMetaSchema.nullish(),\r\n});\r\n\r\nexport type GetFileThumbnailParams = z.infer<typeof GetFileThumbnailParamsSchema>;\r\n\r\nexport const useGetFileThumbnail = (params: GetFileThumbnailParams, options?: BaseBlobQueryOptions) => {\r\n const queryParams = new URLSearchParams();\r\n queryParams.append(\"appName\", params.appName ?? APP_NAME);\r\n queryParams.append(\"id\", params.meta?.id ?? \"\");\r\n\r\n return useQuery<Blob, Error, string>({\r\n ...options,\r\n queryKey: [QUERY_KEY, \"thumbnail\", params.appName ?? APP_NAME, params.meta?.id],\r\n queryFn: ({ signal }) => httpClient.request({\r\n url: `/${QUERY_KEY}/v1/thumbnail?${queryParams.toString()}`,\r\n method: \"GET\",\r\n signal,\r\n responseType: \"blob\"\r\n }),\r\n select: data => URL.createObjectURL(data),\r\n staleTime: HOUR,\r\n gcTime: HOUR,\r\n refetchOnWindowFocus: false,\r\n enabled: !!params.meta && options?.enabled !== false,\r\n });\r\n};\r\n\r\nexport const GetFileParamsSchema = z.object({\r\n appName: z.string().min(1).max(255).default(APP_NAME).optional(),\r\n meta: FileMetaSchema.nullish(),\r\n});\r\n\r\nexport type GetFileParams = z.infer<typeof GetFileParamsSchema>;\r\n\r\nexport const useGetFile = (params: GetFileParams, options?: BaseBlobQueryOptions) => {\r\n const queryParams = new URLSearchParams();\r\n queryParams.append(\"appName\", params.appName ?? APP_NAME);\r\n queryParams.append(\"id\", params.meta?.id ?? \"\");\r\n\r\n return useQuery<Blob, Error, string>({\r\n ...options,\r\n queryKey: [QUERY_KEY, params.appName ?? APP_NAME, params.meta?.id],\r\n queryFn: ({ signal }) => httpClient.request({\r\n url: `/${QUERY_KEY}/v1?${queryParams.toString()}`,\r\n method: \"GET\",\r\n signal,\r\n responseType: \"blob\"\r\n }),\r\n select: data => URL.createObjectURL(data),\r\n staleTime: HOUR,\r\n gcTime: HOUR,\r\n refetchOnWindowFocus: false,\r\n enabled: !!params.meta && options?.enabled !== false,\r\n });\r\n};\r\n\r\nexport const useDownloadFile = (options?: BaseBlobMutationOptions) => {\r\n return useMutation<Blob, Error, FileMeta>({\r\n ...options,\r\n mutationFn: meta => httpClient.request({\r\n url: `/${QUERY_KEY}/v1/download?appName=${APP_NAME}&id=${meta.id}`,\r\n method: \"GET\",\r\n responseType: \"blob\"\r\n }),\r\n onSuccess: (data, variables) => saveAs(data, `${variables.fileName}.${variables.fileExtension}`)\r\n });\r\n};\r\n\r\nexport const useOpenFile = (options?: BaseBlobMutationOptions) => {\r\n return useMutation<Blob, Error, FileMeta>({\r\n ...options,\r\n mutationFn: meta => httpClient.request({\r\n url: `/${QUERY_KEY}/v1?appName=${APP_NAME}&id=${meta.id}`,\r\n method: \"GET\",\r\n responseType: \"blob\"\r\n }),\r\n onSuccess: data => { window.open(URL.createObjectURL(data)); }\r\n });\r\n};\r\n\r\nexport const useUpdateFileMeta = (options?: BaseFileMetaMutationOptions) => {\r\n const queryClient = useQueryClient();\r\n\r\n return useMutation<FileMeta, Error, FileMeta>({\r\n ...options,\r\n mutationFn: meta => httpClient.request({\r\n url: `/${QUERY_KEY}/v1/meta?appName=${APP_NAME}&id=${meta.id}`,\r\n method: \"PUT\",\r\n data: meta\r\n }),\r\n onSettled: () => queryClient.invalidateQueries({ queryKey: [QUERY_KEY, \"meta\"], exact: false })\r\n });\r\n};\r\n\r\nexport const useDeleteFile = (options?: BaseFileMetaMutationOptions) => {\r\n const queryClient = useQueryClient();\r\n\r\n return useMutation<FileMeta, Error, FileMeta>({\r\n ...options,\r\n mutationFn: meta => httpClient.request({\r\n url: `/${QUERY_KEY}/v1?appName=${APP_NAME}&id=${meta.id}`,\r\n method: \"DELETE\"\r\n }),\r\n onSettled: () => queryClient.invalidateQueries({ queryKey: [QUERY_KEY, \"meta\"], exact: false }),\r\n });\r\n};\r\n\r\nexport const useDeleteFiles = (options?: BaseStringMutationOptions) => {\r\n const queryClient = useQueryClient();\r\n\r\n return useMutation<string, Error, string>({\r\n ...options,\r\n mutationFn: subId => httpClient.request({\r\n url: `/${QUERY_KEY}/v1?appName=${APP_NAME}&subId=${subId}`,\r\n method: \"DELETE\"\r\n }),\r\n onSettled: () => queryClient.invalidateQueries({ queryKey: [QUERY_KEY, \"meta\"], exact: false })\r\n });\r\n};\r\n\r\ninterface UseUploadFileProps {\r\n subId: OptionalId;\r\n onSuccess?: (meta: Pick<FileMeta, \"id\" | \"appName\" | \"subId\" | \"fileName\">) => void;\r\n onError?: (error: Error | DetailedError) => void;\r\n}\r\n\r\nexport const useUploadFile = ({ subId, onSuccess, onError }: UseUploadFileProps) => {\r\n const [progress, setProgress] = useState<number>(0);\r\n const queryClient = useQueryClient();\r\n\r\n const mutate = async (file: File) => {\r\n if (!subId) throw new Error(\"subId is required for file upload\");\r\n\r\n const metadata: Pick<FileMeta, \"id\" | \"appName\" | \"subId\" | \"fileName\"> = {\r\n id: uuidv7(),\r\n appName: APP_NAME,\r\n subId: subId,\r\n fileName: file.name,\r\n };\r\n\r\n const upload = new TusUpload(file, {\r\n endpoint: `${clientEnv.VITE_API_URL}/${QUERY_KEY}/v1/upload`,\r\n chunkSize: 1_048_576, // 1 MB\r\n metadata: {\r\n id: metadata.id,\r\n appName: metadata.appName,\r\n subId: metadata.subId,\r\n fileName: metadata.fileName,\r\n fileExtension: file.type\r\n },\r\n // headers: { \"Authorization\": `Bearer ${await getToken()}` }, //TODO: implement token retrieval\r\n onError: (error) => {\r\n setProgress(0);\r\n onError?.(error);\r\n },\r\n onProgress: (bytesUploaded, bytesTotal) => {\r\n setProgress((bytesUploaded / bytesTotal) * 100);\r\n },\r\n onSuccess: () => {\r\n setProgress(0);\r\n queryClient.invalidateQueries({ queryKey: [QUERY_KEY, \"meta\", subId], exact: false });\r\n onSuccess?.(metadata);\r\n },\r\n });\r\n\r\n const previousUploads = await upload.findPreviousUploads();\r\n if (previousUploads.length > 0) {\r\n upload.resumeFromPreviousUpload(previousUploads[0]);\r\n }\r\n\r\n upload.start();\r\n };\r\n\r\n return { mutate, progress };\r\n};\r\n"],"names":["z","TusUpload"],"mappings":";;;;;;;;;AAaA,MAAM,YAAY;AAClB,MAAM,OAAO,MAAO,KAAK;AACzB,MAAM,WAAW,YAAY,UAAU,cAAc;AAUbA,WAAE,OAAO;AAAA,EAC7C,SAASA,WAAE,OAAA,EAAS,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,QAAQ,EAAE,SAAA;AAAA,EACtD,OAAOA,WAAE,KAAA;AACb,CAAC;AAIM,MAAM,kBAAkB,CAAC,QAA4B,YAA4C;AACpG,QAAM,cAAc,IAAI,gBAAA;AACxB,cAAY,OAAO,WAAW,OAAO,WAAW,QAAQ;AACxD,cAAY,OAAO,SAAS,OAAO,KAAK;AAExC,SAAO,SAA0B;AAAA,IAC7B,GAAG;AAAA,IACH,UAAU,CAAC,WAAW,QAAQ,OAAO,WAAW,UAAU,OAAO,KAAK;AAAA,IACtE,SAAS,CAAC,EAAE,aAAa,WAAW,QAAQ;AAAA,MACxC,KAAK,IAAI,SAAS,YAAY,YAAY,UAAU;AAAA,MACpD,QAAQ;AAAA,MACR;AAAA,IAAA,CACH;AAAA,IACD,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,sBAAsB;AAAA,EAAA,CACzB;AACL;AAE4CA,WAAE,OAAO;AAAA,EACjD,SAASA,WAAE,OAAA,EAAS,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,QAAQ,EAAE,SAAA;AAAA,EACtD,MAAM,eAAe,QAAA;AACzB,CAAC;AAIM,MAAM,sBAAsB,CAAC,QAAgC,YAAmC;AACnG,QAAM,cAAc,IAAI,gBAAA;AACxB,cAAY,OAAO,WAAW,OAAO,WAAW,QAAQ;AACxD,cAAY,OAAO,MAAM,OAAO,MAAM,MAAM,EAAE;AAE9C,SAAO,SAA8B;AAAA,IACjC,GAAG;AAAA,IACH,UAAU,CAAC,WAAW,aAAa,OAAO,WAAW,UAAU,OAAO,MAAM,EAAE;AAAA,IAC9E,SAAS,CAAC,EAAE,aAAa,WAAW,QAAQ;AAAA,MACxC,KAAK,IAAI,SAAS,iBAAiB,YAAY,UAAU;AAAA,MACzD,QAAQ;AAAA,MACR;AAAA,MACA,cAAc;AAAA,IAAA,CACjB;AAAA,IACD,QAAQ,CAAA,SAAQ,IAAI,gBAAgB,IAAI;AAAA,IACxC,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,sBAAsB;AAAA,IACtB,SAAS,CAAC,CAAC,OAAO,QAAQ,SAAS,YAAY;AAAA,EAAA,CAClD;AACL;AAEmCA,WAAE,OAAO;AAAA,EACxC,SAASA,WAAE,OAAA,EAAS,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,QAAQ,EAAE,SAAA;AAAA,EACtD,MAAM,eAAe,QAAA;AACzB,CAAC;AAIM,MAAM,aAAa,CAAC,QAAuB,YAAmC;AACjF,QAAM,cAAc,IAAI,gBAAA;AACxB,cAAY,OAAO,WAAW,OAAO,WAAW,QAAQ;AACxD,cAAY,OAAO,MAAM,OAAO,MAAM,MAAM,EAAE;AAE9C,SAAO,SAA8B;AAAA,IACjC,GAAG;AAAA,IACH,UAAU,CAAC,WAAW,OAAO,WAAW,UAAU,OAAO,MAAM,EAAE;AAAA,IACjE,SAAS,CAAC,EAAE,aAAa,WAAW,QAAQ;AAAA,MACxC,KAAK,IAAI,SAAS,OAAO,YAAY,UAAU;AAAA,MAC/C,QAAQ;AAAA,MACR;AAAA,MACA,cAAc;AAAA,IAAA,CACjB;AAAA,IACD,QAAQ,CAAA,SAAQ,IAAI,gBAAgB,IAAI;AAAA,IACxC,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,sBAAsB;AAAA,IACtB,SAAS,CAAC,CAAC,OAAO,QAAQ,SAAS,YAAY;AAAA,EAAA,CAClD;AACL;AAEO,MAAM,kBAAkB,CAAC,YAAsC;AAClE,SAAO,YAAmC;AAAA,IACtC,GAAG;AAAA,IACH,YAAY,CAAA,SAAQ,WAAW,QAAQ;AAAA,MACnC,KAAK,IAAI,SAAS,wBAAwB,QAAQ,OAAO,KAAK,EAAE;AAAA,MAChE,QAAQ;AAAA,MACR,cAAc;AAAA,IAAA,CACjB;AAAA,IACD,WAAW,CAAC,MAAM,cAAc,OAAO,MAAM,GAAG,UAAU,QAAQ,IAAI,UAAU,aAAa,EAAE;AAAA,EAAA,CAClG;AACL;AAEO,MAAM,cAAc,CAAC,YAAsC;AAC9D,SAAO,YAAmC;AAAA,IACtC,GAAG;AAAA,IACH,YAAY,CAAA,SAAQ,WAAW,QAAQ;AAAA,MACnC,KAAK,IAAI,SAAS,eAAe,QAAQ,OAAO,KAAK,EAAE;AAAA,MACvD,QAAQ;AAAA,MACR,cAAc;AAAA,IAAA,CACjB;AAAA,IACD,WAAW,CAAA,SAAQ;AAAE,aAAO,KAAK,IAAI,gBAAgB,IAAI,CAAC;AAAA,IAAG;AAAA,EAAA,CAChE;AACL;AAEO,MAAM,oBAAoB,CAAC,YAA0C;AACxE,QAAM,cAAc,eAAA;AAEpB,SAAO,YAAuC;AAAA,IAC1C,GAAG;AAAA,IACH,YAAY,CAAA,SAAQ,WAAW,QAAQ;AAAA,MACnC,KAAK,IAAI,SAAS,oBAAoB,QAAQ,OAAO,KAAK,EAAE;AAAA,MAC5D,QAAQ;AAAA,MACR,MAAM;AAAA,IAAA,CACT;AAAA,IACD,WAAW,MAAM,YAAY,kBAAkB,EAAE,UAAU,CAAC,WAAW,MAAM,GAAG,OAAO,MAAA,CAAO;AAAA,EAAA,CACjG;AACL;AAEO,MAAM,gBAAgB,CAAC,YAA0C;AACpE,QAAM,cAAc,eAAA;AAEpB,SAAO,YAAuC;AAAA,IAC1C,GAAG;AAAA,IACH,YAAY,CAAA,SAAQ,WAAW,QAAQ;AAAA,MACnC,KAAK,IAAI,SAAS,eAAe,QAAQ,OAAO,KAAK,EAAE;AAAA,MACvD,QAAQ;AAAA,IAAA,CACX;AAAA,IACD,WAAW,MAAM,YAAY,kBAAkB,EAAE,UAAU,CAAC,WAAW,MAAM,GAAG,OAAO,MAAA,CAAO;AAAA,EAAA,CACjG;AACL;AAEO,MAAM,iBAAiB,CAAC,YAAwC;AACnE,QAAM,cAAc,eAAA;AAEpB,SAAO,YAAmC;AAAA,IACtC,GAAG;AAAA,IACH,YAAY,CAAA,UAAS,WAAW,QAAQ;AAAA,MACpC,KAAK,IAAI,SAAS,eAAe,QAAQ,UAAU,KAAK;AAAA,MACxD,QAAQ;AAAA,IAAA,CACX;AAAA,IACD,WAAW,MAAM,YAAY,kBAAkB,EAAE,UAAU,CAAC,WAAW,MAAM,GAAG,OAAO,MAAA,CAAO;AAAA,EAAA,CACjG;AACL;AAQO,MAAM,gBAAgB,CAAC,EAAE,OAAO,WAAW,cAAkC;AAChF,QAAM,CAAC,UAAU,WAAW,IAAI,SAAiB,CAAC;AAClD,QAAM,cAAc,eAAA;AAEpB,QAAM,SAAS,OAAO,SAAe;AACjC,QAAI,CAAC,MAAO,OAAM,IAAI,MAAM,mCAAmC;AAE/D,UAAM,WAAoE;AAAA,MACtE,IAAI,OAAA;AAAA,MACJ,SAAS;AAAA,MACT;AAAA,MACA,UAAU,KAAK;AAAA,IAAA;AAGnB,UAAM,SAAS,IAAIC,OAAU,MAAM;AAAA,MAC/B,UAAU,GAAG,UAAU,YAAY,IAAI,SAAS;AAAA,MAChD,WAAW;AAAA;AAAA,MACX,UAAU;AAAA,QACN,IAAI,SAAS;AAAA,QACb,SAAS,SAAS;AAAA,QAClB,OAAO,SAAS;AAAA,QAChB,UAAU,SAAS;AAAA,QACnB,eAAe,KAAK;AAAA,MAAA;AAAA;AAAA,MAGxB,SAAS,CAAC,UAAU;AAChB,oBAAY,CAAC;AACb,kBAAU,KAAK;AAAA,MACnB;AAAA,MACA,YAAY,CAAC,eAAe,eAAe;AACvC,oBAAa,gBAAgB,aAAc,GAAG;AAAA,MAClD;AAAA,MACA,WAAW,MAAM;AACb,oBAAY,CAAC;AACb,oBAAY,kBAAkB,EAAE,UAAU,CAAC,WAAW,QAAQ,KAAK,GAAG,OAAO,OAAO;AACpF,oBAAY,QAAQ;AAAA,MACxB;AAAA,IAAA,CACH;AAED,UAAM,kBAAkB,MAAM,OAAO,oBAAA;AACrC,QAAI,gBAAgB,SAAS,GAAG;AAC5B,aAAO,yBAAyB,gBAAgB,CAAC,CAAC;AAAA,IACtD;AAEA,WAAO,MAAA;AAAA,EACX;AAEA,SAAO,EAAE,QAAQ,SAAA;AACrB;"}
|