wcz-test 6.13.0 → 6.14.0
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-41k6-RtZ.js +3262 -0
- package/dist/FileHooks-41k6-RtZ.js.map +1 -0
- package/dist/client.d.ts +49 -55
- package/dist/components.js +3339 -3
- package/dist/components.js.map +1 -1
- package/dist/hooks.js +1008 -1
- package/dist/hooks.js.map +1 -1
- package/dist/index.js +419 -6
- package/dist/index.js.map +1 -1
- package/dist/queries.js +1 -1
- package/dist/vite.js +0 -3
- package/dist/vite.js.map +1 -1
- package/package.json +28 -28
- package/dist/FileHooks-BbjesS5D.js +0 -195
- package/dist/FileHooks-BbjesS5D.js.map +0 -1
|
@@ -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":"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"}
|