@maas/payload-plugin-media-cloud 0.0.33 → 0.0.35
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/adapter/handleDelete.mjs.map +1 -1
- package/dist/adapter/handleUpload.mjs.map +1 -1
- package/dist/adapter/staticHandler.mjs.map +1 -1
- package/dist/adapter/storageAdapter.mjs +10 -2
- package/dist/adapter/storageAdapter.mjs.map +1 -1
- package/dist/collectionHooks/afterChange.mjs.map +1 -1
- package/dist/collectionHooks/beforeChange.mjs.map +1 -1
- package/dist/collections/mediaCollection.mjs.map +1 -1
- package/dist/components/folderFileCard/folderFileCard.mjs +13 -1
- package/dist/components/folderFileCard/folderFileCard.mjs.map +1 -1
- package/dist/components/gridContext/gridContext.mjs +52 -51
- package/dist/components/gridContext/gridContext.mjs.map +1 -1
- package/dist/components/gridView/gridView.mjs +95 -12
- package/dist/components/gridView/gridView.mjs.map +1 -1
- package/dist/components/itemCardGrid/itemCardGrid.mjs +15 -5
- package/dist/components/itemCardGrid/itemCardGrid.mjs.map +1 -1
- package/dist/components/muxPreview/muxPreview.mjs +9 -1
- package/dist/components/muxPreview/muxPreview.mjs.map +1 -1
- package/dist/components/uploadHandler/uploadHandler.mjs.map +1 -1
- package/dist/components/uploadManager/uploadManager.mjs +101 -5
- package/dist/components/uploadManager/uploadManager.mjs.map +1 -1
- package/dist/endpoints/fileExistsHandler.mjs.map +1 -1
- package/dist/endpoints/muxAssetHandler.mjs.map +1 -1
- package/dist/endpoints/muxCreateUploadHandler.mjs.map +1 -1
- package/dist/endpoints/muxWebhookHandler.mjs.map +1 -1
- package/dist/endpoints/tusCleanupHandler.mjs.map +1 -1
- package/dist/endpoints/tusFolderHandler.mjs.map +1 -1
- package/dist/endpoints/tusPostProcessorHandler.mjs.map +1 -1
- package/dist/fields/alt.mjs.map +1 -1
- package/dist/fields/filename.mjs.map +1 -1
- package/dist/fields/height.mjs.map +1 -1
- package/dist/fields/mux.mjs.map +1 -1
- package/dist/fields/path.mjs.map +1 -1
- package/dist/fields/storage.mjs.map +1 -1
- package/dist/fields/thumbnail.mjs.map +1 -1
- package/dist/fields/width.mjs.map +1 -1
- package/dist/hooks/useErrorHandler.mjs +8 -25
- package/dist/hooks/useErrorHandler.mjs.map +1 -1
- package/dist/hooks/useMediaCloudEmitter.mjs.map +1 -1
- package/dist/plugin.mjs.map +1 -1
- package/dist/tus/stores/s3/expirationManager.mjs.map +1 -1
- package/dist/tus/stores/s3/fileOperations.mjs.map +1 -1
- package/dist/tus/stores/s3/index.mjs.map +1 -1
- package/dist/tus/stores/s3/metadataManager.mjs.map +1 -1
- package/dist/tus/stores/s3/partsManager.mjs.map +1 -1
- package/dist/tus/stores/s3/s3Store.mjs +2 -2
- package/dist/tus/stores/s3/s3Store.mjs.map +1 -1
- package/dist/tus/stores/s3/semaphore.mjs.map +1 -1
- package/dist/types/errors.mjs.map +1 -1
- package/dist/utils/buildS3Path.mjs.map +1 -1
- package/dist/utils/buildThumbnailURL.mjs.map +1 -1
- package/dist/utils/defaultOptions.mjs.map +1 -1
- package/dist/utils/file.mjs.map +1 -1
- package/dist/utils/mux.d.mts +3 -3
- package/dist/utils/mux.mjs.map +1 -1
- package/dist/utils/tus.d.mts +3 -3
- package/dist/utils/tus.mjs.map +1 -1
- package/package.json +3 -1
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
import { GridProvider } from "../gridContext/gridContext.mjs";
|
|
4
4
|
import { ItemCardGrid } from "../itemCardGrid/itemCardGrid.mjs";
|
|
5
5
|
import { c } from "react/compiler-runtime";
|
|
6
|
-
import
|
|
6
|
+
import { Fragment, useEffect } from "react";
|
|
7
7
|
import { useRouter } from "next/navigation";
|
|
8
8
|
import { getTranslation } from "@payloadcms/translations";
|
|
9
9
|
import { Gutter, ListControls, ListHeader, ListSelection, PageControls, SelectMany, SelectionProvider, useBulkUpload, useConfig, useListDrawerContext, useListQuery, useModal, useStepNav, useTranslation, useWindowInfo } from "@payloadcms/ui";
|
|
10
10
|
import { DefaultListViewTabs } from "@payloadcms/ui/elements/DefaultListViewTabs";
|
|
11
11
|
import { formatAdminURL } from "payload/shared";
|
|
12
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
12
13
|
import "./gridView.css";
|
|
13
14
|
|
|
14
15
|
//#region src/components/gridView/gridView.tsx
|
|
@@ -139,7 +140,11 @@ function GridView(props) {
|
|
|
139
140
|
const t11 = `grid-view grid-view--${collectionSlug}`;
|
|
140
141
|
let t12;
|
|
141
142
|
if ($[35] !== collectionConfig.disableBulkEdit || $[36] !== disableBulkDelete || $[37] !== disableBulkEdit || $[38] !== i18n || $[39] !== labels?.plural || $[40] !== smallBreak) {
|
|
142
|
-
t12 = !smallBreak &&
|
|
143
|
+
t12 = !smallBreak && /* @__PURE__ */ jsx(ListSelection, {
|
|
144
|
+
disableBulkDelete,
|
|
145
|
+
disableBulkEdit: collectionConfig.disableBulkEdit ?? disableBulkEdit,
|
|
146
|
+
label: getTranslation(labels?.plural, i18n)
|
|
147
|
+
}, "list-selection");
|
|
143
148
|
$[35] = collectionConfig.disableBulkEdit;
|
|
144
149
|
$[36] = disableBulkDelete;
|
|
145
150
|
$[37] = disableBulkEdit;
|
|
@@ -150,7 +155,11 @@ function GridView(props) {
|
|
|
150
155
|
} else t12 = $[41];
|
|
151
156
|
let t13;
|
|
152
157
|
if ($[42] !== collectionConfig || $[43] !== config) {
|
|
153
|
-
t13 =
|
|
158
|
+
t13 = /* @__PURE__ */ jsx(DefaultListViewTabs, {
|
|
159
|
+
collectionConfig,
|
|
160
|
+
config,
|
|
161
|
+
viewType: "list"
|
|
162
|
+
}, "default-list-actions");
|
|
154
163
|
$[42] = collectionConfig;
|
|
155
164
|
$[43] = config;
|
|
156
165
|
$[44] = t13;
|
|
@@ -175,7 +184,23 @@ function GridView(props) {
|
|
|
175
184
|
} else t15 = $[50];
|
|
176
185
|
let t16;
|
|
177
186
|
if ($[51] !== Description || $[52] !== collectionConfig || $[53] !== disableBulkDelete || $[54] !== disableBulkEdit || $[55] !== hasCreatePermission || $[56] !== hasDeletePermission || $[57] !== i18n || $[58] !== isBulkUploadEnabled || $[59] !== isTrashEnabled || $[60] !== newDocumentURL || $[61] !== openBulkUpload || $[62] !== smallBreak || $[63] !== t14 || $[64] !== t15 || $[65] !== viewType) {
|
|
178
|
-
t16 =
|
|
187
|
+
t16 = /* @__PURE__ */ jsx(ListHeader, {
|
|
188
|
+
Actions: t14,
|
|
189
|
+
collectionConfig,
|
|
190
|
+
Description,
|
|
191
|
+
disableBulkDelete,
|
|
192
|
+
disableBulkEdit,
|
|
193
|
+
hasCreatePermission,
|
|
194
|
+
hasDeletePermission,
|
|
195
|
+
i18n,
|
|
196
|
+
isBulkUploadEnabled,
|
|
197
|
+
isTrashEnabled,
|
|
198
|
+
newDocumentURL,
|
|
199
|
+
onBulkUploadSuccess: t15,
|
|
200
|
+
openBulkUpload,
|
|
201
|
+
smallBreak,
|
|
202
|
+
viewType
|
|
203
|
+
});
|
|
179
204
|
$[51] = Description;
|
|
180
205
|
$[52] = collectionConfig;
|
|
181
206
|
$[53] = disableBulkDelete;
|
|
@@ -195,14 +220,33 @@ function GridView(props) {
|
|
|
195
220
|
} else t16 = $[66];
|
|
196
221
|
let t17;
|
|
197
222
|
if ($[67] !== collectionConfig || $[68] !== collectionSlug) {
|
|
198
|
-
t17 =
|
|
223
|
+
t17 = /* @__PURE__ */ jsx(ListControls, {
|
|
224
|
+
collectionConfig,
|
|
225
|
+
collectionSlug,
|
|
226
|
+
enableColumns: false
|
|
227
|
+
});
|
|
199
228
|
$[67] = collectionConfig;
|
|
200
229
|
$[68] = collectionSlug;
|
|
201
230
|
$[69] = t17;
|
|
202
231
|
} else t17 = $[69];
|
|
203
232
|
let t18;
|
|
204
233
|
if ($[70] !== adminRoute || $[71] !== collectionSlug || $[72] !== docs.length || $[73] !== hasCreatePermission || $[74] !== i18n || $[75] !== labels?.plural || $[76] !== labels?.singular || $[77] !== mappedDocs || $[78] !== newDocumentURL || $[79] !== router || $[80] !== viewType) {
|
|
205
|
-
t18 = docs.length === 0 ?
|
|
234
|
+
t18 = docs.length === 0 ? /* @__PURE__ */ jsxs("div", {
|
|
235
|
+
className: "grid-view__no-results",
|
|
236
|
+
children: [/* @__PURE__ */ jsx("p", { children: i18n.t(viewType === "trash" ? "general:noTrashResults" : "general:noResults", { label: getTranslation(labels?.plural, i18n) }) }), hasCreatePermission && newDocumentURL && /* @__PURE__ */ jsx("div", {
|
|
237
|
+
className: "grid-view__no-results__actions",
|
|
238
|
+
children: /* @__PURE__ */ jsx("button", {
|
|
239
|
+
type: "button",
|
|
240
|
+
onClick: () => router.push(newDocumentURL),
|
|
241
|
+
className: "grid-view__create-link btn btn--icon-style-without-border btn--size-small btn--withoutPopup btn--style-pill btn--withoutPopup",
|
|
242
|
+
children: i18n.t("general:createNewLabel", { label: getTranslation(labels?.singular, i18n) })
|
|
243
|
+
})
|
|
244
|
+
})]
|
|
245
|
+
}) : /* @__PURE__ */ jsx(ItemCardGrid, {
|
|
246
|
+
items: mappedDocs,
|
|
247
|
+
adminRoute,
|
|
248
|
+
collectionSlug
|
|
249
|
+
});
|
|
206
250
|
$[70] = adminRoute;
|
|
207
251
|
$[71] = collectionSlug;
|
|
208
252
|
$[72] = docs.length;
|
|
@@ -218,7 +262,21 @@ function GridView(props) {
|
|
|
218
262
|
} else t18 = $[81];
|
|
219
263
|
let t19;
|
|
220
264
|
if ($[82] !== beforeActions || $[83] !== collectionConfig || $[84] !== disableBulkDelete || $[85] !== disableBulkEdit || $[86] !== docs.length || $[87] !== i18n || $[88] !== onBulkSelect || $[89] !== smallBreak) {
|
|
221
|
-
t19 = docs?.length > 0 &&
|
|
265
|
+
t19 = docs?.length > 0 && /* @__PURE__ */ jsx(PageControls, {
|
|
266
|
+
AfterPageControls: smallBreak ? /* @__PURE__ */ jsxs("div", {
|
|
267
|
+
className: "grid-view__list-selection",
|
|
268
|
+
children: [/* @__PURE__ */ jsx(ListSelection, {
|
|
269
|
+
collectionConfig,
|
|
270
|
+
disableBulkDelete,
|
|
271
|
+
disableBulkEdit,
|
|
272
|
+
label: getTranslation(collectionConfig.labels.plural, i18n)
|
|
273
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
274
|
+
className: "grid-view__list-selection-actions",
|
|
275
|
+
children: typeof onBulkSelect === "function" ? beforeActions ? [...beforeActions, /* @__PURE__ */ jsx(SelectMany, { onClick: onBulkSelect }, "select-many")] : [/* @__PURE__ */ jsx(SelectMany, { onClick: onBulkSelect }, "select-many")] : beforeActions
|
|
276
|
+
})]
|
|
277
|
+
}) : null,
|
|
278
|
+
collectionConfig
|
|
279
|
+
});
|
|
222
280
|
$[82] = beforeActions;
|
|
223
281
|
$[83] = collectionConfig;
|
|
224
282
|
$[84] = disableBulkDelete;
|
|
@@ -231,7 +289,17 @@ function GridView(props) {
|
|
|
231
289
|
} else t19 = $[90];
|
|
232
290
|
let t20;
|
|
233
291
|
if ($[91] !== AfterListTable || $[92] !== BeforeListTable || $[93] !== t16 || $[94] !== t17 || $[95] !== t18 || $[96] !== t19) {
|
|
234
|
-
t20 =
|
|
292
|
+
t20 = /* @__PURE__ */ jsxs(Gutter, {
|
|
293
|
+
className: "grid-view__wrapper collection-list__wrap",
|
|
294
|
+
children: [
|
|
295
|
+
t16,
|
|
296
|
+
t17,
|
|
297
|
+
BeforeListTable,
|
|
298
|
+
t18,
|
|
299
|
+
t19,
|
|
300
|
+
AfterListTable
|
|
301
|
+
]
|
|
302
|
+
});
|
|
235
303
|
$[91] = AfterListTable;
|
|
236
304
|
$[92] = BeforeListTable;
|
|
237
305
|
$[93] = t16;
|
|
@@ -242,7 +310,11 @@ function GridView(props) {
|
|
|
242
310
|
} else t20 = $[97];
|
|
243
311
|
let t21;
|
|
244
312
|
if ($[98] !== AfterList || $[99] !== BeforeList || $[100] !== t20) {
|
|
245
|
-
t21 =
|
|
313
|
+
t21 = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
314
|
+
BeforeList,
|
|
315
|
+
t20,
|
|
316
|
+
AfterList
|
|
317
|
+
] });
|
|
246
318
|
$[98] = AfterList;
|
|
247
319
|
$[99] = BeforeList;
|
|
248
320
|
$[100] = t20;
|
|
@@ -250,21 +322,32 @@ function GridView(props) {
|
|
|
250
322
|
} else t21 = $[101];
|
|
251
323
|
let t22;
|
|
252
324
|
if ($[102] !== t11 || $[103] !== t21) {
|
|
253
|
-
t22 =
|
|
325
|
+
t22 = /* @__PURE__ */ jsx("div", {
|
|
326
|
+
className: t11,
|
|
327
|
+
children: t21
|
|
328
|
+
});
|
|
254
329
|
$[102] = t11;
|
|
255
330
|
$[103] = t21;
|
|
256
331
|
$[104] = t22;
|
|
257
332
|
} else t22 = $[104];
|
|
258
333
|
let t23;
|
|
259
334
|
if ($[105] !== mappedDocs || $[106] !== t22) {
|
|
260
|
-
t23 =
|
|
335
|
+
t23 = /* @__PURE__ */ jsx(GridProvider, {
|
|
336
|
+
allowMultiSelection: true,
|
|
337
|
+
docs: mappedDocs,
|
|
338
|
+
children: t22
|
|
339
|
+
});
|
|
261
340
|
$[105] = mappedDocs;
|
|
262
341
|
$[106] = t22;
|
|
263
342
|
$[107] = t23;
|
|
264
343
|
} else t23 = $[107];
|
|
265
344
|
let t24;
|
|
266
345
|
if ($[108] !== docs || $[109] !== t10 || $[110] !== t23) {
|
|
267
|
-
t24 =
|
|
346
|
+
t24 = /* @__PURE__ */ jsx(SelectionProvider, {
|
|
347
|
+
docs,
|
|
348
|
+
totalDocs: t10,
|
|
349
|
+
children: t23
|
|
350
|
+
});
|
|
268
351
|
$[108] = docs;
|
|
269
352
|
$[109] = t10;
|
|
270
353
|
$[110] = t23;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gridView.mjs","names":["c","_c","React","Fragment","useMemo","useEffect","useRouter","getTranslation","Gutter","useListQuery","useConfig","SelectionProvider","useTranslation","useWindowInfo","useBulkUpload","useModal","useStepNav","ListHeader","ListSelection","ListControls","PageControls","SelectMany","useListDrawerContext","DefaultListViewTabs","formatAdminURL","ItemCardGrid","GridProvider","ListViewClientProps","MediaDocument","id","storage","filename","alt","mimeType","url","thumbnailURL","mux","playbackId","MappedDocument","title","relationTo","GridView","props","$","collectionSlug","AfterList","AfterListTable","BeforeList","BeforeListTable","Description","newDocumentURL","hasCreatePermission","hasDeletePermission","disableBulkDelete","disableBulkEdit","beforeActions","viewType","config","getEntityConfig","routes","t0","admin","adminRoute","router","data","t1","docs","t2","t3","undefined","i18n","setStepNav","openModal","drawerSlug","bulkUploadDrawerSlug","setCollectionSlug","setBulkUploadCollectionSlug","setOnSuccess","breakpoints","t4","s","smallBreak","t5","collectionConfig","labels","upload","isUploadCollection","Boolean","isBulkUploadEnabled","bulkUpload","isTrashEnabled","trash","onBulkSelect","getThumbnailURL","_temp","t6","t7","doc_0","doc","String","map","mappedDocs","refresh","openBulkUpload","t8","plural","baseLabel","label","path","trashLabel","t","navItems","t9","t10","totalDocs","t11","t12","t13","t14","filter","t15","t16","t17","t18","length","singular","push","t19","t20","t21","t22","t23","t24"],"sources":["../../../src/components/gridView/gridView.tsx"],"sourcesContent":["'use client'\n\nimport React, { Fragment, useMemo, useEffect } from 'react'\nimport { useRouter } from 'next/navigation'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Gutter,\n useListQuery,\n useConfig,\n SelectionProvider,\n useTranslation,\n useWindowInfo,\n useBulkUpload,\n useModal,\n useStepNav,\n ListHeader,\n ListSelection,\n ListControls,\n PageControls,\n SelectMany,\n useListDrawerContext,\n} from '@payloadcms/ui'\nimport { DefaultListViewTabs } from '@payloadcms/ui/elements/DefaultListViewTabs'\nimport { formatAdminURL } from 'payload/shared'\nimport { ItemCardGrid } from '../itemCardGrid/itemCardGrid'\nimport { GridProvider } from '../gridContext/gridContext'\n\nimport type { ListViewClientProps } from 'payload'\n\nimport './gridView.css'\n\n// Type for media document with common properties\ninterface MediaDocument {\n id: string | number\n storage: 'mux' | 's3'\n filename?: string\n alt?: string\n mimeType?: string\n url?: string\n thumbnailURL?: string\n mux?: {\n playbackId?: string\n }\n}\n\nexport interface MappedDocument {\n id: string | number\n storage: 'mux' | 's3'\n title: string\n thumbnailURL?: string\n relationTo: string\n}\n\nexport function GridView(props: ListViewClientProps): React.JSX.Element {\n const baseClass = 'grid-view'\n\n const {\n collectionSlug,\n AfterList,\n AfterListTable,\n BeforeList,\n BeforeListTable,\n Description,\n newDocumentURL,\n hasCreatePermission,\n hasDeletePermission,\n disableBulkDelete,\n disableBulkEdit,\n beforeActions,\n viewType,\n } = props\n\n const { config, getEntityConfig } = useConfig()\n\n const {\n routes: { admin: adminRoute },\n } = config\n\n const router = useRouter()\n\n const { data } = useListQuery() ?? {}\n const { docs = [] } = data ?? {}\n\n const { i18n } = useTranslation()\n const { setStepNav } = useStepNav()\n const { openModal } = useModal()\n\n const {\n drawerSlug: bulkUploadDrawerSlug,\n setCollectionSlug: setBulkUploadCollectionSlug,\n setOnSuccess,\n } = useBulkUpload()\n\n const {\n breakpoints: { s: smallBreak },\n } = useWindowInfo()\n\n const collectionConfig = getEntityConfig({ collectionSlug })\n const { labels, upload } = collectionConfig\n\n const isUploadCollection = Boolean(upload)\n\n const isBulkUploadEnabled =\n (isUploadCollection && collectionConfig.upload?.bulkUpload) ?? true\n\n const isTrashEnabled = Boolean(collectionConfig.trash)\n\n const { onBulkSelect } = useListDrawerContext()\n\n const getThumbnailURL = (doc: MediaDocument): string | undefined => {\n if (doc?.storage === 'mux' && doc?.mux?.playbackId) {\n return `https://image.mux.com/${doc.mux.playbackId}/thumbnail.jpg?width=400&height=400&fit_mode=pad`\n }\n\n if (doc?.thumbnailURL) {\n return doc.thumbnailURL\n }\n\n return undefined\n }\n\n const mappedDocs: MappedDocument[] = useMemo(() => {\n return docs.map((doc: MediaDocument) => {\n const title = doc.filename ?? doc.alt ?? String(doc.id)\n return {\n id: doc.id,\n storage: doc.storage,\n title: title,\n thumbnailURL: getThumbnailURL(doc),\n relationTo: collectionSlug,\n }\n })\n }, [docs, collectionSlug])\n\n const openBulkUpload = React.useCallback(() => {\n setBulkUploadCollectionSlug(collectionSlug)\n openModal(bulkUploadDrawerSlug)\n setOnSuccess(() => router.refresh())\n }, [\n router,\n collectionSlug,\n bulkUploadDrawerSlug,\n openModal,\n setBulkUploadCollectionSlug,\n setOnSuccess,\n ])\n\n // Set breadcrumb navigation\n useEffect(() => {\n const baseLabel = {\n label: getTranslation(labels?.plural, i18n),\n url:\n isTrashEnabled && viewType === 'trash'\n ? formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}`,\n })\n : undefined,\n }\n const trashLabel = {\n label: i18n.t('general:trash'),\n }\n const navItems =\n isTrashEnabled && viewType === 'trash'\n ? [baseLabel, trashLabel]\n : [baseLabel]\n setStepNav(navItems)\n }, [\n adminRoute,\n setStepNav,\n labels,\n isTrashEnabled,\n viewType,\n i18n,\n collectionSlug,\n ])\n\n return (\n <SelectionProvider docs={docs} totalDocs={data?.totalDocs ?? 0}>\n <GridProvider allowMultiSelection={true} docs={mappedDocs}>\n <div className={`grid-view grid-view--${collectionSlug}`}>\n <Fragment>\n {BeforeList}\n <Gutter className={`${baseClass}__wrapper collection-list__wrap`}>\n <ListHeader\n Actions={[\n beforeActions,\n !smallBreak && (\n <ListSelection\n disableBulkDelete={disableBulkDelete}\n disableBulkEdit={\n collectionConfig.disableBulkEdit ?? disableBulkEdit\n }\n key=\"list-selection\"\n label={getTranslation(labels?.plural, i18n)}\n />\n ),\n <DefaultListViewTabs\n collectionConfig={collectionConfig}\n config={config}\n key=\"default-list-actions\"\n viewType=\"list\"\n />,\n ].filter(Boolean)}\n collectionConfig={collectionConfig}\n Description={Description}\n disableBulkDelete={disableBulkDelete}\n disableBulkEdit={disableBulkEdit}\n hasCreatePermission={hasCreatePermission}\n hasDeletePermission={hasDeletePermission}\n i18n={i18n}\n isBulkUploadEnabled={isBulkUploadEnabled}\n isTrashEnabled={isTrashEnabled}\n newDocumentURL={newDocumentURL}\n onBulkUploadSuccess={() => router.refresh()}\n openBulkUpload={openBulkUpload}\n smallBreak={smallBreak}\n viewType={viewType}\n />\n <ListControls\n collectionConfig={collectionConfig}\n collectionSlug={collectionSlug}\n enableColumns={false}\n />\n\n {BeforeListTable}\n\n {docs.length === 0 ? (\n <div className={`${baseClass}__no-results`}>\n <p>\n {i18n.t(\n viewType === 'trash'\n ? 'general:noTrashResults'\n : 'general:noResults',\n {\n label: getTranslation(labels?.plural, i18n),\n }\n )}\n </p>\n {hasCreatePermission && newDocumentURL && (\n <div className={`${baseClass}__no-results__actions`}>\n <button\n type=\"button\"\n onClick={() => router.push(newDocumentURL)}\n className={`${baseClass}__create-link btn btn--icon-style-without-border btn--size-small btn--withoutPopup btn--style-pill btn--withoutPopup`}\n >\n {i18n.t('general:createNewLabel', {\n label: getTranslation(labels?.singular, i18n),\n })}\n </button>\n </div>\n )}\n </div>\n ) : (\n <ItemCardGrid\n items={mappedDocs}\n adminRoute={adminRoute}\n collectionSlug={collectionSlug}\n />\n )}\n\n {docs?.length > 0 && (\n <PageControls\n AfterPageControls={\n smallBreak ? (\n <div className={`${baseClass}__list-selection`}>\n <ListSelection\n collectionConfig={collectionConfig}\n disableBulkDelete={disableBulkDelete}\n disableBulkEdit={disableBulkEdit}\n label={getTranslation(\n collectionConfig.labels.plural,\n i18n\n )}\n />\n <div className={`${baseClass}__list-selection-actions`}>\n {typeof onBulkSelect === 'function'\n ? beforeActions\n ? [\n ...beforeActions,\n <SelectMany\n key=\"select-many\"\n onClick={onBulkSelect}\n />,\n ]\n : [\n <SelectMany\n key=\"select-many\"\n onClick={onBulkSelect}\n />,\n ]\n : beforeActions}\n </div>\n </div>\n ) : null\n }\n collectionConfig={collectionConfig}\n />\n )}\n\n {AfterListTable}\n </Gutter>\n {AfterList}\n </Fragment>\n </div>\n </GridProvider>\n </SelectionProvider>\n )\n}\n\nexport default GridView\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gridView.mjs","names":["c","_c","React","Fragment","useMemo","useEffect","useRouter","getTranslation","Gutter","useListQuery","useConfig","SelectionProvider","useTranslation","useWindowInfo","useBulkUpload","useModal","useStepNav","ListHeader","ListSelection","ListControls","PageControls","SelectMany","useListDrawerContext","DefaultListViewTabs","formatAdminURL","ItemCardGrid","GridProvider","jsx","_jsx","jsxs","_jsxs","GridView","props","$","collectionSlug","AfterList","AfterListTable","BeforeList","BeforeListTable","Description","newDocumentURL","hasCreatePermission","hasDeletePermission","disableBulkDelete","disableBulkEdit","beforeActions","viewType","config","getEntityConfig","routes","t0","admin","adminRoute","router","data","t1","docs","t2","t3","undefined","i18n","setStepNav","openModal","drawerSlug","bulkUploadDrawerSlug","setCollectionSlug","setBulkUploadCollectionSlug","setOnSuccess","breakpoints","t4","s","smallBreak","t5","collectionConfig","labels","upload","isUploadCollection","Boolean","isBulkUploadEnabled","bulkUpload","isTrashEnabled","trash","onBulkSelect","getThumbnailURL","_temp","t6","t7","doc_0","title","doc","filename","alt","String","id","storage","thumbnailURL","relationTo","map","mappedDocs","refresh","openBulkUpload","t8","plural","baseLabel","label","url","path","trashLabel","t","navItems","t9","t10","totalDocs","t11","t12","t13","t14","filter","t15","t16","Actions","onBulkUploadSuccess","t17","enableColumns","t18","length","singular","className","children","type","onClick","push","t19","AfterPageControls","t20","t21","t22","t23","allowMultiSelection","t24","mux","playbackId"],"sources":["../../../src/components/gridView/gridView.tsx"],"sourcesContent":["'use client'\n\nimport React, { Fragment, useMemo, useEffect } from 'react'\nimport { useRouter } from 'next/navigation'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Gutter,\n useListQuery,\n useConfig,\n SelectionProvider,\n useTranslation,\n useWindowInfo,\n useBulkUpload,\n useModal,\n useStepNav,\n ListHeader,\n ListSelection,\n ListControls,\n PageControls,\n SelectMany,\n useListDrawerContext,\n} from '@payloadcms/ui'\nimport { DefaultListViewTabs } from '@payloadcms/ui/elements/DefaultListViewTabs'\nimport { formatAdminURL } from 'payload/shared'\nimport { ItemCardGrid } from '../itemCardGrid/itemCardGrid'\nimport { GridProvider } from '../gridContext/gridContext'\n\nimport type { ListViewClientProps } from 'payload'\n\nimport './gridView.css'\n\n// Type for media document with common properties\ninterface MediaDocument {\n id: string | number\n storage: 'mux' | 's3'\n filename?: string\n alt?: string\n mimeType?: string\n url?: string\n thumbnailURL?: string\n mux?: {\n playbackId?: string\n }\n}\n\nexport interface MappedDocument {\n id: string | number\n storage: 'mux' | 's3'\n title: string\n thumbnailURL?: string\n relationTo: string\n}\n\nexport function GridView(props: ListViewClientProps): React.JSX.Element {\n const baseClass = 'grid-view'\n\n const {\n collectionSlug,\n AfterList,\n AfterListTable,\n BeforeList,\n BeforeListTable,\n Description,\n newDocumentURL,\n hasCreatePermission,\n hasDeletePermission,\n disableBulkDelete,\n disableBulkEdit,\n beforeActions,\n viewType,\n } = props\n\n const { config, getEntityConfig } = useConfig()\n\n const {\n routes: { admin: adminRoute },\n } = config\n\n const router = useRouter()\n\n const { data } = useListQuery() ?? {}\n const { docs = [] } = data ?? {}\n\n const { i18n } = useTranslation()\n const { setStepNav } = useStepNav()\n const { openModal } = useModal()\n\n const {\n drawerSlug: bulkUploadDrawerSlug,\n setCollectionSlug: setBulkUploadCollectionSlug,\n setOnSuccess,\n } = useBulkUpload()\n\n const {\n breakpoints: { s: smallBreak },\n } = useWindowInfo()\n\n const collectionConfig = getEntityConfig({ collectionSlug })\n const { labels, upload } = collectionConfig\n\n const isUploadCollection = Boolean(upload)\n\n const isBulkUploadEnabled =\n (isUploadCollection && collectionConfig.upload?.bulkUpload) ?? true\n\n const isTrashEnabled = Boolean(collectionConfig.trash)\n\n const { onBulkSelect } = useListDrawerContext()\n\n const getThumbnailURL = (doc: MediaDocument): string | undefined => {\n if (doc?.storage === 'mux' && doc?.mux?.playbackId) {\n return `https://image.mux.com/${doc.mux.playbackId}/thumbnail.jpg?width=400&height=400&fit_mode=pad`\n }\n\n if (doc?.thumbnailURL) {\n return doc.thumbnailURL\n }\n\n return undefined\n }\n\n const mappedDocs: MappedDocument[] = useMemo(() => {\n return docs.map((doc: MediaDocument) => {\n const title = doc.filename ?? doc.alt ?? String(doc.id)\n return {\n id: doc.id,\n storage: doc.storage,\n title: title,\n thumbnailURL: getThumbnailURL(doc),\n relationTo: collectionSlug,\n }\n })\n }, [docs, collectionSlug])\n\n const openBulkUpload = React.useCallback(() => {\n setBulkUploadCollectionSlug(collectionSlug)\n openModal(bulkUploadDrawerSlug)\n setOnSuccess(() => router.refresh())\n }, [\n router,\n collectionSlug,\n bulkUploadDrawerSlug,\n openModal,\n setBulkUploadCollectionSlug,\n setOnSuccess,\n ])\n\n // Set breadcrumb navigation\n useEffect(() => {\n const baseLabel = {\n label: getTranslation(labels?.plural, i18n),\n url:\n isTrashEnabled && viewType === 'trash'\n ? formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}`,\n })\n : undefined,\n }\n const trashLabel = {\n label: i18n.t('general:trash'),\n }\n const navItems =\n isTrashEnabled && viewType === 'trash'\n ? [baseLabel, trashLabel]\n : [baseLabel]\n setStepNav(navItems)\n }, [\n adminRoute,\n setStepNav,\n labels,\n isTrashEnabled,\n viewType,\n i18n,\n collectionSlug,\n ])\n\n return (\n <SelectionProvider docs={docs} totalDocs={data?.totalDocs ?? 0}>\n <GridProvider allowMultiSelection={true} docs={mappedDocs}>\n <div className={`grid-view grid-view--${collectionSlug}`}>\n <Fragment>\n {BeforeList}\n <Gutter className={`${baseClass}__wrapper collection-list__wrap`}>\n <ListHeader\n Actions={[\n beforeActions,\n !smallBreak && (\n <ListSelection\n disableBulkDelete={disableBulkDelete}\n disableBulkEdit={\n collectionConfig.disableBulkEdit ?? disableBulkEdit\n }\n key=\"list-selection\"\n label={getTranslation(labels?.plural, i18n)}\n />\n ),\n <DefaultListViewTabs\n collectionConfig={collectionConfig}\n config={config}\n key=\"default-list-actions\"\n viewType=\"list\"\n />,\n ].filter(Boolean)}\n collectionConfig={collectionConfig}\n Description={Description}\n disableBulkDelete={disableBulkDelete}\n disableBulkEdit={disableBulkEdit}\n hasCreatePermission={hasCreatePermission}\n hasDeletePermission={hasDeletePermission}\n i18n={i18n}\n isBulkUploadEnabled={isBulkUploadEnabled}\n isTrashEnabled={isTrashEnabled}\n newDocumentURL={newDocumentURL}\n onBulkUploadSuccess={() => router.refresh()}\n openBulkUpload={openBulkUpload}\n smallBreak={smallBreak}\n viewType={viewType}\n />\n <ListControls\n collectionConfig={collectionConfig}\n collectionSlug={collectionSlug}\n enableColumns={false}\n />\n\n {BeforeListTable}\n\n {docs.length === 0 ? (\n <div className={`${baseClass}__no-results`}>\n <p>\n {i18n.t(\n viewType === 'trash'\n ? 'general:noTrashResults'\n : 'general:noResults',\n {\n label: getTranslation(labels?.plural, i18n),\n }\n )}\n </p>\n {hasCreatePermission && newDocumentURL && (\n <div className={`${baseClass}__no-results__actions`}>\n <button\n type=\"button\"\n onClick={() => router.push(newDocumentURL)}\n className={`${baseClass}__create-link btn btn--icon-style-without-border btn--size-small btn--withoutPopup btn--style-pill btn--withoutPopup`}\n >\n {i18n.t('general:createNewLabel', {\n label: getTranslation(labels?.singular, i18n),\n })}\n </button>\n </div>\n )}\n </div>\n ) : (\n <ItemCardGrid\n items={mappedDocs}\n adminRoute={adminRoute}\n collectionSlug={collectionSlug}\n />\n )}\n\n {docs?.length > 0 && (\n <PageControls\n AfterPageControls={\n smallBreak ? (\n <div className={`${baseClass}__list-selection`}>\n <ListSelection\n collectionConfig={collectionConfig}\n disableBulkDelete={disableBulkDelete}\n disableBulkEdit={disableBulkEdit}\n label={getTranslation(\n collectionConfig.labels.plural,\n i18n\n )}\n />\n <div className={`${baseClass}__list-selection-actions`}>\n {typeof onBulkSelect === 'function'\n ? beforeActions\n ? [\n ...beforeActions,\n <SelectMany\n key=\"select-many\"\n onClick={onBulkSelect}\n />,\n ]\n : [\n <SelectMany\n key=\"select-many\"\n onClick={onBulkSelect}\n />,\n ]\n : beforeActions}\n </div>\n </div>\n ) : null\n }\n collectionConfig={collectionConfig}\n />\n )}\n\n {AfterListTable}\n </Gutter>\n {AfterList}\n </Fragment>\n </div>\n </GridProvider>\n </SelectionProvider>\n )\n}\n\nexport default GridView\n"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { ContextFolderFileCard } from "../folderFileCard/folderFileCard.mjs";
|
|
4
4
|
import { c } from "react/compiler-runtime";
|
|
5
|
-
import
|
|
5
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
import "./itemCardGrid.css";
|
|
7
7
|
|
|
8
8
|
//#region src/components/itemCardGrid/itemCardGrid.tsx
|
|
@@ -11,25 +11,35 @@ function ItemCardGrid(t0) {
|
|
|
11
11
|
const { items, title } = t0;
|
|
12
12
|
let t1;
|
|
13
13
|
if ($[0] !== title) {
|
|
14
|
-
t1 = title &&
|
|
14
|
+
t1 = title && /* @__PURE__ */ jsx("p", {
|
|
15
|
+
className: "item-card-grid__title",
|
|
16
|
+
children: title
|
|
17
|
+
});
|
|
15
18
|
$[0] = title;
|
|
16
19
|
$[1] = t1;
|
|
17
20
|
} else t1 = $[1];
|
|
18
21
|
let t2;
|
|
19
22
|
if ($[2] !== items) {
|
|
20
|
-
t2 = !items || items?.length === 0 ? null : items.map((item) =>
|
|
23
|
+
t2 = !items || items?.length === 0 ? null : items.map((item) => /* @__PURE__ */ jsx(ContextFolderFileCard, {
|
|
24
|
+
index: items.indexOf(item),
|
|
25
|
+
item,
|
|
26
|
+
className: "item-card-grid__item"
|
|
27
|
+
}, item.id));
|
|
21
28
|
$[2] = items;
|
|
22
29
|
$[3] = t2;
|
|
23
30
|
} else t2 = $[3];
|
|
24
31
|
let t3;
|
|
25
32
|
if ($[4] !== t2) {
|
|
26
|
-
t3 =
|
|
33
|
+
t3 = /* @__PURE__ */ jsx("div", {
|
|
34
|
+
className: "item-card-grid",
|
|
35
|
+
children: t2
|
|
36
|
+
});
|
|
27
37
|
$[4] = t2;
|
|
28
38
|
$[5] = t3;
|
|
29
39
|
} else t3 = $[5];
|
|
30
40
|
let t4;
|
|
31
41
|
if ($[6] !== t1 || $[7] !== t3) {
|
|
32
|
-
t4 =
|
|
42
|
+
t4 = /* @__PURE__ */ jsxs(Fragment, { children: [t1, t3] });
|
|
33
43
|
$[6] = t1;
|
|
34
44
|
$[7] = t3;
|
|
35
45
|
$[8] = t4;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"itemCardGrid.mjs","names":["c","_c","React","ContextFolderFileCard","
|
|
1
|
+
{"version":3,"file":"itemCardGrid.mjs","names":["c","_c","React","ContextFolderFileCard","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","ItemCardGrid","t0","$","items","title","t1","className","children","t2","length","map","item","index","indexOf","id","t3","baseClass","t4"],"sources":["../../../src/components/itemCardGrid/itemCardGrid.tsx"],"sourcesContent":["'use client'\n\nimport React from 'react'\nimport { ContextFolderFileCard } from '../folderFileCard/folderFileCard'\n\nimport type { MappedDocument } from '../gridView/gridView'\n\nimport './itemCardGrid.css'\n\ntype ItemCardGridProps = {\n items: MappedDocument[]\n title?: string\n adminRoute: string\n collectionSlug: string\n}\n\nexport function ItemCardGrid({ items, title }: ItemCardGridProps) {\n const baseClass = 'item-card-grid'\n\n return (\n <>\n {title && <p className={`${baseClass}__title`}>{title}</p>}\n <div className={baseClass}>\n {!items || items?.length === 0\n ? null\n : items.map((item) => {\n return (\n <ContextFolderFileCard\n key={item.id}\n index={items.indexOf(item)}\n item={item}\n className={`${baseClass}__item`}\n />\n )\n })}\n </div>\n </>\n )\n}\n"],"mappings":";;;;;;;;AAgBA,SAAOU,aAAAC,IAAA;CAAA,MAAAC,IAAAX,EAAA,EAAA;CAAsB,MAAA,EAAAY,OAAAC,UAAAH;CAAmC,IAAAI;AAAA,KAAAH,EAAA,OAAAE,OAAA;AAKzDC,OAAAD,SAAAT,oBAAA,KAAA;GAAuBW,WAAA;GAAqBC,UAAGH;GAAS,CAAC;AAAAF,IAAA,KAAAE;AAAAF,IAAA,KAAAG;OAAAA,MAAAH,EAAA;CAAA,IAAAM;AAAA,KAAAN,EAAA,OAAAC,OAAA;AAEvDK,OAAA,CAACL,SAASA,OAAKM,WAAa,IAA5B,OAEGN,MAAKO,KAAKC,SAENhB,oBAACF,uBAAqB;GAEbmB,OAAAT,MAAKU,QAASF,KAAK;GACpBA;GACKL,WAAA;GAAoB,EAH1BK,KAAIG,GAMd,CAAC;AAAAZ,IAAA,KAAAC;AAAAD,IAAA,KAAAM;OAAAA,MAAAN,EAAA;CAAA,IAAAa;AAAA,KAAAb,EAAA,OAAAM,IAAA;AAZRO,OAAApB,oBAAA,OAAA;GAAgBqB,WALF;GAKWT,UACtBC;GAYE,CAAC;AAAAN,IAAA,KAAAM;AAAAN,IAAA,KAAAa;OAAAA,MAAAb,EAAA;CAAA,IAAAe;AAAA,KAAAf,EAAA,OAAAG,MAAAH,EAAA,OAAAa,IAAA;AAfRE,OAAAlB,qBAAAF,UAAA,EAAAU,UAAA,CACGF,IACDU,GAaM,EACN,CAAC;AAAAb,IAAA,KAAAG;AAAAH,IAAA,KAAAa;AAAAb,IAAA,KAAAe;OAAAA,MAAAf,EAAA;AAAA,QAhBHe"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { c } from "react/compiler-runtime";
|
|
4
4
|
import { useEffect, useState } from "react";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
6
|
import MuxPlayer from "@mux/mux-player-react";
|
|
6
7
|
|
|
7
8
|
//#region src/components/muxPreview/muxPreview.tsx
|
|
@@ -49,7 +50,14 @@ function MuxPreview(props) {
|
|
|
49
50
|
useEffect(t2, t3);
|
|
50
51
|
let t4;
|
|
51
52
|
if ($[6] !== isClient || $[7] !== playbackId) {
|
|
52
|
-
t4 = isClient && playbackId ?
|
|
53
|
+
t4 = isClient && playbackId ? /* @__PURE__ */ jsx(MuxPlayer, {
|
|
54
|
+
playbackId,
|
|
55
|
+
streamType: "on-demand",
|
|
56
|
+
disableTracking: true,
|
|
57
|
+
style: { height: "60vh" },
|
|
58
|
+
nohotkeys: true,
|
|
59
|
+
preload: "metadata"
|
|
60
|
+
}) : null;
|
|
53
61
|
$[6] = isClient;
|
|
54
62
|
$[7] = playbackId;
|
|
55
63
|
$[8] = t4;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"muxPreview.mjs","names":["c","_c","useEffect","useState","MuxPlayer","
|
|
1
|
+
{"version":3,"file":"muxPreview.mjs","names":["c","_c","useEffect","useState","MuxPlayer","jsx","_jsx","MuxPreview","props","$","playbackId","setPlaybackId","isClient","setIsClient","t0","t1","Symbol","for","t2","t3","schemaPath","collection","split","docId","window","location","pathname","pop","fetch","then","_temp","data","mux","catch","t4","streamType","disableTracking","style","height","nohotkeys","preload","res","json"],"sources":["../../../src/components/muxPreview/muxPreview.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useState } from 'react'\nimport MuxPlayer from '@mux/mux-player-react'\n\nimport type React from 'react'\nimport type { UIFieldClientProps } from 'payload'\n\n/**\n * React component for previewing Mux video assets\n * @param props - The UI field client props containing field data\n * @returns JSX element for Mux video preview\n */\nexport function MuxPreview(props: UIFieldClientProps) {\n const [playbackId, setPlaybackId] = useState<string | null>(null)\n const [isClient, setIsClient] = useState(false)\n\n // Ensure we’re on the client side\n useEffect(() => {\n setIsClient(true)\n }, [])\n\n useEffect(() => {\n if (!isClient) {\n return\n }\n\n // Get collection from schemaPath and ID from URL\n const collection = props.schemaPath?.split('.')[0] // \"media.muxPlayer\" -> \"media\"\n const docId = window.location.pathname.split('/').pop() // Get last part of URL\n\n if (collection && docId && docId !== 'create' && docId !== 'admin') {\n fetch(`/api/${collection}/${docId}`)\n .then((res) => res.json())\n .then((data) => setPlaybackId(data.mux?.playbackId || null))\n .catch(() => setPlaybackId(null))\n }\n }, [props.schemaPath, isClient])\n\n // Only render on client with playbackId\n return isClient && playbackId ? (\n <MuxPlayer\n playbackId={playbackId}\n streamType=\"on-demand\"\n disableTracking={true}\n style={{ height: '60vh' }}\n nohotkeys={true}\n preload=\"metadata\"\n />\n ) : null\n}\n"],"mappings":";;;;;;;;;;;;;AAaA,SAAOO,WAAAC,OAAA;CAAA,MAAAC,IAAAR,EAAA,EAAA;CACL,MAAA,CAAAS,YAAAC,iBAAoCR,SAAwB,KAAK;CACjE,MAAA,CAAAS,UAAAC,eAAgCV,SAAS,MAAM;CAAA,IAAAW;CAAA,IAAAC;AAAA,KAAAN,EAAA,OAAAO,OAAAC,IAAA,4BAAA,EAAA;AAGrCH,aAAA;AACRD,eAAY,KAAK;;AAChBE,OAAA,EAAE;AAAAN,IAAA,KAAAK;AAAAL,IAAA,KAAAM;QAAA;AAAAD,OAAAL,EAAA;AAAAM,OAAAN,EAAA;;AAFLP,WAAUY,IAEPC,GAAG;CAAA,IAAAG;CAAA,IAAAC;AAAA,KAAAV,EAAA,OAAAG,YAAAH,EAAA,OAAAD,MAAAY,YAAA;AAEIF,aAAA;AACR,OAAI,CAACN,SAAQ;GAKb,MAAAS,aAAmBb,MAAKY,YAAkBE,MAAC,IAAO,CAAA;GAClD,MAAAC,QAAcC,OAAMC,SAASC,SAASJ,MAAO,IAAI,CAAAK,KAAM;AAEvD,OAAIN,cAAAE,SAAuBA,UAAU,YAAYA,UAAU,QACzDK,OAAM,QAAQP,WAAU,GAAIE,QAAQ,CAAAM,KAC5BC,MAAoB,CAAAD,MACpBE,SAAUpB,cAAcoB,KAAIC,KAAgBtB,cAApB,KAA6B,CAAC,CAAAuB,YAC/CtB,cAAc,KAAK,CAAC;;AAEpCQ,OAAA,CAACX,MAAKY,YAAaR,SAAS;AAAAH,IAAA,KAAAG;AAAAH,IAAA,KAAAD,MAAAY;AAAAX,IAAA,KAAAS;AAAAT,IAAA,KAAAU;QAAA;AAAAD,OAAAT,EAAA;AAAAU,OAAAV,EAAA;;AAf/BP,WAAUgB,IAePC,GAA6B;CAAA,IAAAe;AAAA,KAAAzB,EAAA,OAAAG,YAAAH,EAAA,OAAAC,YAAA;AAGzBwB,OAAAtB,YAAAF,aAAAJ,oBACJF,WAAS;GACIM;GACDyB,YAAA;GACMC,iBAAA;GACVC,OAAA,EAAAC,QAAU,QAAQ;GACdC,WAAA;GACHC,SAAA;GAEL,CAAC,GATD;AASC/B,IAAA,KAAAG;AAAAH,IAAA,KAAAC;AAAAD,IAAA,KAAAyB;OAAAA,MAAAzB,EAAA;AAAA,QATDyB;;AA3BF,SAAAJ,MAAAW,KAAA;AAAA,QAoBgBA,IAAGC,MAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploadHandler.mjs","names":["upchunk","tus","createClientUploadHandler","MediaCloudErrors","MediaCloudLogs","useMediaCloudEmitter","useErrorHandler","isVideo","getMimeType","generateUniqueFilename","sanitizeFilename","MediaCloudPluginOptions","Storage","MimeType","ReactNode","UploadCollectionSlug","useMagicError","UseMagicErrorReturn","UploadArgs","serverURL","apiRoute","file","File","mimeType","prefix","UploadResult","storage","filename","uploadId","MuxCreateUploadResponse","url","MUX_CHUNK_SIZE","TUS_CHUNK_SIZE","TUS_RETRY_DELAYS","magicError","throwError","emitter","muxUpload","args","Promise","endpoint","name","response","fetch","body","JSON","stringify","credentials","method","headers","json","uploader","createUpload","chunkSize","emit","polling","pollingUrl","on","MUX_UPLOAD_ERROR","progress","detail","MUX_DIRECT_UPLOAD_ERROR","error","tusUpload","filetype","type","filesize","size","toString","Object","keys","localStorage","filter","key","startsWith","forEach","removeItem","uploadUrlAvailable","eventListenerAdded","onBeforeUnload","e","BeforeUnloadEvent","window","removeEventListener","preventDefault","onPageUnload","navigator","sendBeacon","resolve","upload","Upload","retryDelays","storeFingerprintForResuming","metadata","contentType","contentLength","contentDisposition","onError","message","TUS_UPLOAD_ERROR","cause","onBeforeRequest","addEventListener","onProgress","bytesUploaded","bytesTotal","percentage","Math","round","onSuccess","onUploadUrlAvailable","start","log","Extra","pluginOptions","ClientUploadHandlerProps","Record","children","collectionSlug","enabled","extra","T","serverHandlerPath","UploadHandler","props","handler","updateFilename","assert","FILE_TYPE_UNKNOWN","allowedMimeTypes","limits","mimeTypes","mimeTypeMatches","some","allowed","endsWith","replace","FILE_TYPE_NOT_ALLOWED","fileSize","Infinity","FILE_SIZE_EXCEEDED","mappedFile","status","S3_STORE_FILE_FOUND","newFilename","NAMING_FUNCTION_ERROR","uploadArgs","StorageMap","NonNullable","storageForMimeType","prototype","hasOwnProperty","call","undefined","isVideoFile","storeOnMux","UPLOAD_HANDLER_ERROR"],"sources":["../../../src/components/uploadHandler/uploadHandler.tsx"],"sourcesContent":["'use client'\n\nimport * as upchunk from '@mux/upchunk'\nimport * as tus from 'tus-js-client'\n\nimport { createClientUploadHandler } from '@payloadcms/plugin-cloud-storage/client'\n\nimport { MediaCloudErrors, MediaCloudLogs } from '../../types/errors'\nimport { useMediaCloudEmitter } from '../../hooks/useMediaCloudEmitter'\nimport { useErrorHandler } from '../../hooks/useErrorHandler'\nimport {\n isVideo,\n getMimeType,\n generateUniqueFilename,\n sanitizeFilename,\n} from '../../utils/file'\n\nimport type {\n MediaCloudPluginOptions,\n Storage,\n MimeType,\n} from '../../types/index'\nimport type { ReactNode } from 'react'\nimport type { UploadCollectionSlug } from 'payload'\nimport { useMagicError, UseMagicErrorReturn } from '@maas/error-handler'\n\ninterface UploadArgs {\n serverURL: string\n apiRoute: string\n file: File\n mimeType: MimeType\n prefix?: string\n}\n\ninterface UploadResult {\n storage: Storage\n mimeType: MimeType\n filename: string\n uploadId?: string\n}\n\ninterface MuxCreateUploadResponse {\n url: string\n uploadId: string\n filename: string\n}\n\nconst MUX_CHUNK_SIZE = 30720\nconst TUS_CHUNK_SIZE = 1024 * 1024\nconst TUS_RETRY_DELAYS = [0, 1000, 2000, 5000]\n\nconst magicError: UseMagicErrorReturn = useMagicError({\n prefix: 'PLUGIN-MEDIA-CLOUD',\n})\n\nconst { throwError } = magicError\nconst emitter = useMediaCloudEmitter()\n\n/**\n * Handles Mux video upload with progress tracking\n * @param args - The upload arguments including file, server URL, and callbacks\n * @returns Promise that resolves to upload result or null if upload fails\n */\nasync function muxUpload(args: UploadArgs): Promise<UploadResult | null> {\n const { file, serverURL, apiRoute, mimeType } = args\n\n const endpoint = `${serverURL}${apiRoute}`\n const filename = file.name\n\n try {\n // Request upload URL from Mux\n const response = await fetch(`${endpoint}/mux/upload`, {\n body: JSON.stringify({ filename, mimeType }),\n credentials: 'include',\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n\n const { url, uploadId } = (await response.json()) as MuxCreateUploadResponse\n\n // Create upchunk uploader\n const uploader = await upchunk.createUpload({\n endpoint: url,\n file,\n chunkSize: MUX_CHUNK_SIZE,\n })\n\n // Add upload to tracker\n emitter.emit('addUpload', {\n filename,\n uploadId,\n polling: false,\n pollingUrl: `${endpoint}/mux/asset`,\n })\n\n // Set up event handlers\n uploader.on('error', function () {\n emitter.emit('removeUpload', { uploadId })\n throwError(MediaCloudErrors.MUX_UPLOAD_ERROR)\n })\n\n uploader.on('progress', function (progress) {\n emitter.emit('updateUpload', {\n filename,\n progress: progress.detail,\n })\n })\n\n uploader.on('success', function () {\n emitter.emit('uploadComplete', { filename })\n })\n\n // Update collection entry\n // with filename, uploadId, mimeType, and storage\n return {\n filename,\n uploadId,\n mimeType,\n storage: 'mux',\n }\n } catch {\n throwError(MediaCloudErrors.MUX_DIRECT_UPLOAD_ERROR)\n emitter.emit('uploadError', { filename, error: 'Video upload failed' })\n return null\n }\n}\n\n/**\n * Handles TUS file upload with resumable capabilities\n * @param args - The upload arguments including file, server URL, and callbacks\n * @returns Promise that resolves to upload result or null if upload fails\n */\nasync function tusUpload(args: UploadArgs): Promise<UploadResult | null> {\n const { apiRoute, serverURL, file, prefix = '', mimeType } = args\n\n const filename = file.name\n const filetype = file.type\n const filesize = file.size.toString()\n\n const endpoint = `${serverURL}${apiRoute}/uploads`\n\n // Clear any stale TUS uploads from localStorage\n Object.keys(localStorage)\n .filter((key) => key.startsWith('tus::'))\n .forEach((key) => localStorage.removeItem(key))\n\n // Flag to prevent multiple onUploadUrlAvailable calls\n let uploadUrlAvailable = false\n let eventListenerAdded = false\n\n function onBeforeUnload(e: BeforeUnloadEvent) {\n window.removeEventListener('beforeunload', onBeforeUnload)\n e.preventDefault()\n }\n\n function onPageUnload() {\n window.removeEventListener('unload', onPageUnload)\n navigator.sendBeacon(`${endpoint}/cleanup`, JSON.stringify({ filename }))\n }\n\n return new Promise((resolve) => {\n const upload = new tus.Upload(file, {\n endpoint,\n retryDelays: TUS_RETRY_DELAYS,\n chunkSize: TUS_CHUNK_SIZE,\n storeFingerprintForResuming: false,\n metadata: {\n filetype,\n filesize,\n filename,\n prefix,\n contentType: filetype,\n contentLength: filesize,\n contentDisposition: 'inline',\n },\n onError(error) {\n // Clean up\n navigator.sendBeacon(\n `${endpoint}/cleanup`,\n JSON.stringify({ filename })\n )\n\n // Inform user\n emitter.emit('uploadError', { filename, error: error.message })\n emitter.emit('removeUpload', { filename })\n throwError({ ...MediaCloudErrors.TUS_UPLOAD_ERROR, cause: error })\n resolve(null)\n },\n onBeforeRequest() {\n if (!eventListenerAdded) {\n window.addEventListener('beforeunload', onBeforeUnload)\n window.addEventListener('unload', onPageUnload)\n eventListenerAdded = true\n }\n },\n onProgress: function (bytesUploaded, bytesTotal) {\n const percentage = Math.round((bytesUploaded / bytesTotal) * 100)\n emitter.emit('updateUpload', {\n filename,\n progress: percentage,\n })\n },\n async onSuccess() {\n // Clean up beforeunload listener\n window.removeEventListener('beforeunload', onBeforeUnload)\n window.removeEventListener('unload', onPageUnload)\n\n // Mark upload as complete in UI\n emitter.emit('uploadComplete', { filename })\n\n // Trigger post upload processing\n await fetch(`${endpoint}/${filename}/process`)\n\n // Move file to correct folder\n await fetch(`${endpoint}/${filename}/folder`)\n },\n onUploadUrlAvailable: async function () {\n // Prevent multiple callbacks\n if (uploadUrlAvailable) {\n return\n }\n\n // Update flag\n uploadUrlAvailable = true\n\n // Add upload to UI\n emitter.emit('addUpload', { filename })\n\n // Update collection entry\n // with filename, mimeType, and storage\n resolve({\n filename,\n mimeType,\n storage: 's3',\n })\n },\n })\n\n upload.start()\n })\n}\n\nconst { log } = useErrorHandler()\n\ninterface Extra {\n pluginOptions: MediaCloudPluginOptions\n}\n\ntype ClientUploadHandlerProps<T extends Record<string, unknown>> = {\n children: ReactNode\n collectionSlug: UploadCollectionSlug\n enabled?: boolean\n extra: T\n prefix?: string\n serverHandlerPath: `/${string}`\n}\n\nexport function UploadHandler(\n props: ClientUploadHandlerProps<{ pluginOptions: MediaCloudPluginOptions }>\n) {\n return createClientUploadHandler({\n handler: async function (args) {\n const { serverURL, apiRoute, file, prefix, updateFilename, extra } = args\n const { pluginOptions } = extra as unknown as Extra\n\n // Check mime type\n const mimeType = await getMimeType(file)\n\n magicError.assert(mimeType, MediaCloudErrors.FILE_TYPE_UNKNOWN)\n\n const allowedMimeTypes = pluginOptions.limits?.mimeTypes ?? []\n const mimeTypeMatches = allowedMimeTypes.some((allowed) =>\n allowed.endsWith('/*')\n ? mimeType?.startsWith(allowed.replace('/*', '/'))\n : mimeType === allowed\n )\n\n if (!mimeTypeMatches) {\n throwError(MediaCloudErrors.FILE_TYPE_NOT_ALLOWED)\n return null\n }\n\n // Check file size limit\n if (file.size > (pluginOptions.limits?.fileSize ?? Infinity)) {\n throwError(MediaCloudErrors.FILE_SIZE_EXCEEDED)\n return null\n }\n\n // Clone file\n let mappedFile = file\n\n try {\n // Check if file with same name exists\n const endpoint = `${serverURL}${apiRoute}/uploads`\n const response = await fetch(`${endpoint}/${file.name}/exists`)\n\n if (response?.status === 200) {\n log(MediaCloudLogs.S3_STORE_FILE_FOUND)\n }\n\n // If file exists, generate a cloned file with a unique filename\n // If not, generate a cloned file with a sanitized filename\n const newFilename =\n response?.status === 200\n ? generateUniqueFilename(file.name)\n : sanitizeFilename(file.name)\n\n mappedFile = new File([file], newFilename, {\n type: file.type,\n })\n\n await updateFilename(newFilename)\n } catch (error) {\n throwError({\n ...MediaCloudErrors.NAMING_FUNCTION_ERROR,\n cause: error,\n })\n return null\n }\n\n try {\n const uploadArgs: UploadArgs = {\n file: mappedFile,\n serverURL,\n apiRoute,\n mimeType,\n prefix,\n }\n\n // Check storage mapping for mime type\n type StorageMap = NonNullable<typeof pluginOptions.storage>\n\n const storageForMimeType =\n pluginOptions.storage &&\n Object.prototype.hasOwnProperty.call(pluginOptions.storage, mimeType)\n ? pluginOptions.storage[mimeType as keyof StorageMap]\n : undefined\n\n const isVideoFile = await isVideo(file)\n const storeOnMux =\n pluginOptions.storage?.['video/*'] === 'mux' ||\n storageForMimeType === 'mux'\n\n switch (true) {\n case storeOnMux && isVideoFile:\n return await muxUpload(uploadArgs)\n default:\n return await tusUpload(uploadArgs)\n }\n } catch (error) {\n throwError({ ...MediaCloudErrors.UPLOAD_HANDLER_ERROR, cause: error })\n return null\n }\n },\n })(props)\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"uploadHandler.mjs","names":["upchunk","tus","createClientUploadHandler","MediaCloudErrors","MediaCloudLogs","useMediaCloudEmitter","useErrorHandler","isVideo","getMimeType","generateUniqueFilename","sanitizeFilename","useMagicError","MUX_CHUNK_SIZE","TUS_CHUNK_SIZE","TUS_RETRY_DELAYS","magicError","prefix","throwError","emitter","muxUpload","args","file","serverURL","apiRoute","mimeType","endpoint","filename","name","response","fetch","body","JSON","stringify","credentials","method","headers","url","uploadId","json","uploader","createUpload","chunkSize","emit","polling","pollingUrl","on","MUX_UPLOAD_ERROR","progress","detail","storage","MUX_DIRECT_UPLOAD_ERROR","error","tusUpload","filetype","type","filesize","size","toString","Object","keys","localStorage","filter","key","startsWith","forEach","removeItem","uploadUrlAvailable","eventListenerAdded","onBeforeUnload","e","window","removeEventListener","preventDefault","onPageUnload","navigator","sendBeacon","Promise","resolve","upload","Upload","retryDelays","storeFingerprintForResuming","metadata","contentType","contentLength","contentDisposition","onError","message","TUS_UPLOAD_ERROR","cause","onBeforeRequest","addEventListener","onProgress","bytesUploaded","bytesTotal","percentage","Math","round","onSuccess","onUploadUrlAvailable","start","log","UploadHandler","props","handler","updateFilename","extra","pluginOptions","assert","FILE_TYPE_UNKNOWN","allowedMimeTypes","limits","mimeTypes","mimeTypeMatches","some","allowed","endsWith","replace","FILE_TYPE_NOT_ALLOWED","fileSize","Infinity","FILE_SIZE_EXCEEDED","mappedFile","status","S3_STORE_FILE_FOUND","newFilename","File","NAMING_FUNCTION_ERROR","uploadArgs","storageForMimeType","prototype","hasOwnProperty","call","undefined","isVideoFile","storeOnMux","UPLOAD_HANDLER_ERROR"],"sources":["../../../src/components/uploadHandler/uploadHandler.tsx"],"sourcesContent":["'use client'\n\nimport * as upchunk from '@mux/upchunk'\nimport * as tus from 'tus-js-client'\n\nimport { createClientUploadHandler } from '@payloadcms/plugin-cloud-storage/client'\n\nimport { MediaCloudErrors, MediaCloudLogs } from '../../types/errors'\nimport { useMediaCloudEmitter } from '../../hooks/useMediaCloudEmitter'\nimport { useErrorHandler } from '../../hooks/useErrorHandler'\nimport {\n isVideo,\n getMimeType,\n generateUniqueFilename,\n sanitizeFilename,\n} from '../../utils/file'\n\nimport type {\n MediaCloudPluginOptions,\n Storage,\n MimeType,\n} from '../../types/index'\nimport type { ReactNode } from 'react'\nimport type { UploadCollectionSlug } from 'payload'\nimport { useMagicError, UseMagicErrorReturn } from '@maas/error-handler'\n\ninterface UploadArgs {\n serverURL: string\n apiRoute: string\n file: File\n mimeType: MimeType\n prefix?: string\n}\n\ninterface UploadResult {\n storage: Storage\n mimeType: MimeType\n filename: string\n uploadId?: string\n}\n\ninterface MuxCreateUploadResponse {\n url: string\n uploadId: string\n filename: string\n}\n\nconst MUX_CHUNK_SIZE = 30720\nconst TUS_CHUNK_SIZE = 1024 * 1024\nconst TUS_RETRY_DELAYS = [0, 1000, 2000, 5000]\n\nconst magicError: UseMagicErrorReturn = useMagicError({\n prefix: 'PLUGIN-MEDIA-CLOUD',\n})\n\nconst { throwError } = magicError\nconst emitter = useMediaCloudEmitter()\n\n/**\n * Handles Mux video upload with progress tracking\n * @param args - The upload arguments including file, server URL, and callbacks\n * @returns Promise that resolves to upload result or null if upload fails\n */\nasync function muxUpload(args: UploadArgs): Promise<UploadResult | null> {\n const { file, serverURL, apiRoute, mimeType } = args\n\n const endpoint = `${serverURL}${apiRoute}`\n const filename = file.name\n\n try {\n // Request upload URL from Mux\n const response = await fetch(`${endpoint}/mux/upload`, {\n body: JSON.stringify({ filename, mimeType }),\n credentials: 'include',\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n\n const { url, uploadId } = (await response.json()) as MuxCreateUploadResponse\n\n // Create upchunk uploader\n const uploader = await upchunk.createUpload({\n endpoint: url,\n file,\n chunkSize: MUX_CHUNK_SIZE,\n })\n\n // Add upload to tracker\n emitter.emit('addUpload', {\n filename,\n uploadId,\n polling: false,\n pollingUrl: `${endpoint}/mux/asset`,\n })\n\n // Set up event handlers\n uploader.on('error', function () {\n emitter.emit('removeUpload', { uploadId })\n throwError(MediaCloudErrors.MUX_UPLOAD_ERROR)\n })\n\n uploader.on('progress', function (progress) {\n emitter.emit('updateUpload', {\n filename,\n progress: progress.detail,\n })\n })\n\n uploader.on('success', function () {\n emitter.emit('uploadComplete', { filename })\n })\n\n // Update collection entry\n // with filename, uploadId, mimeType, and storage\n return {\n filename,\n uploadId,\n mimeType,\n storage: 'mux',\n }\n } catch {\n throwError(MediaCloudErrors.MUX_DIRECT_UPLOAD_ERROR)\n emitter.emit('uploadError', { filename, error: 'Video upload failed' })\n return null\n }\n}\n\n/**\n * Handles TUS file upload with resumable capabilities\n * @param args - The upload arguments including file, server URL, and callbacks\n * @returns Promise that resolves to upload result or null if upload fails\n */\nasync function tusUpload(args: UploadArgs): Promise<UploadResult | null> {\n const { apiRoute, serverURL, file, prefix = '', mimeType } = args\n\n const filename = file.name\n const filetype = file.type\n const filesize = file.size.toString()\n\n const endpoint = `${serverURL}${apiRoute}/uploads`\n\n // Clear any stale TUS uploads from localStorage\n Object.keys(localStorage)\n .filter((key) => key.startsWith('tus::'))\n .forEach((key) => localStorage.removeItem(key))\n\n // Flag to prevent multiple onUploadUrlAvailable calls\n let uploadUrlAvailable = false\n let eventListenerAdded = false\n\n function onBeforeUnload(e: BeforeUnloadEvent) {\n window.removeEventListener('beforeunload', onBeforeUnload)\n e.preventDefault()\n }\n\n function onPageUnload() {\n window.removeEventListener('unload', onPageUnload)\n navigator.sendBeacon(`${endpoint}/cleanup`, JSON.stringify({ filename }))\n }\n\n return new Promise((resolve) => {\n const upload = new tus.Upload(file, {\n endpoint,\n retryDelays: TUS_RETRY_DELAYS,\n chunkSize: TUS_CHUNK_SIZE,\n storeFingerprintForResuming: false,\n metadata: {\n filetype,\n filesize,\n filename,\n prefix,\n contentType: filetype,\n contentLength: filesize,\n contentDisposition: 'inline',\n },\n onError(error) {\n // Clean up\n navigator.sendBeacon(\n `${endpoint}/cleanup`,\n JSON.stringify({ filename })\n )\n\n // Inform user\n emitter.emit('uploadError', { filename, error: error.message })\n emitter.emit('removeUpload', { filename })\n throwError({ ...MediaCloudErrors.TUS_UPLOAD_ERROR, cause: error })\n resolve(null)\n },\n onBeforeRequest() {\n if (!eventListenerAdded) {\n window.addEventListener('beforeunload', onBeforeUnload)\n window.addEventListener('unload', onPageUnload)\n eventListenerAdded = true\n }\n },\n onProgress: function (bytesUploaded, bytesTotal) {\n const percentage = Math.round((bytesUploaded / bytesTotal) * 100)\n emitter.emit('updateUpload', {\n filename,\n progress: percentage,\n })\n },\n async onSuccess() {\n // Clean up beforeunload listener\n window.removeEventListener('beforeunload', onBeforeUnload)\n window.removeEventListener('unload', onPageUnload)\n\n // Mark upload as complete in UI\n emitter.emit('uploadComplete', { filename })\n\n // Trigger post upload processing\n await fetch(`${endpoint}/${filename}/process`)\n\n // Move file to correct folder\n await fetch(`${endpoint}/${filename}/folder`)\n },\n onUploadUrlAvailable: async function () {\n // Prevent multiple callbacks\n if (uploadUrlAvailable) {\n return\n }\n\n // Update flag\n uploadUrlAvailable = true\n\n // Add upload to UI\n emitter.emit('addUpload', { filename })\n\n // Update collection entry\n // with filename, mimeType, and storage\n resolve({\n filename,\n mimeType,\n storage: 's3',\n })\n },\n })\n\n upload.start()\n })\n}\n\nconst { log } = useErrorHandler()\n\ninterface Extra {\n pluginOptions: MediaCloudPluginOptions\n}\n\ntype ClientUploadHandlerProps<T extends Record<string, unknown>> = {\n children: ReactNode\n collectionSlug: UploadCollectionSlug\n enabled?: boolean\n extra: T\n prefix?: string\n serverHandlerPath: `/${string}`\n}\n\nexport function UploadHandler(\n props: ClientUploadHandlerProps<{ pluginOptions: MediaCloudPluginOptions }>\n) {\n return createClientUploadHandler({\n handler: async function (args) {\n const { serverURL, apiRoute, file, prefix, updateFilename, extra } = args\n const { pluginOptions } = extra as unknown as Extra\n\n // Check mime type\n const mimeType = await getMimeType(file)\n\n magicError.assert(mimeType, MediaCloudErrors.FILE_TYPE_UNKNOWN)\n\n const allowedMimeTypes = pluginOptions.limits?.mimeTypes ?? []\n const mimeTypeMatches = allowedMimeTypes.some((allowed) =>\n allowed.endsWith('/*')\n ? mimeType?.startsWith(allowed.replace('/*', '/'))\n : mimeType === allowed\n )\n\n if (!mimeTypeMatches) {\n throwError(MediaCloudErrors.FILE_TYPE_NOT_ALLOWED)\n return null\n }\n\n // Check file size limit\n if (file.size > (pluginOptions.limits?.fileSize ?? Infinity)) {\n throwError(MediaCloudErrors.FILE_SIZE_EXCEEDED)\n return null\n }\n\n // Clone file\n let mappedFile = file\n\n try {\n // Check if file with same name exists\n const endpoint = `${serverURL}${apiRoute}/uploads`\n const response = await fetch(`${endpoint}/${file.name}/exists`)\n\n if (response?.status === 200) {\n log(MediaCloudLogs.S3_STORE_FILE_FOUND)\n }\n\n // If file exists, generate a cloned file with a unique filename\n // If not, generate a cloned file with a sanitized filename\n const newFilename =\n response?.status === 200\n ? generateUniqueFilename(file.name)\n : sanitizeFilename(file.name)\n\n mappedFile = new File([file], newFilename, {\n type: file.type,\n })\n\n await updateFilename(newFilename)\n } catch (error) {\n throwError({\n ...MediaCloudErrors.NAMING_FUNCTION_ERROR,\n cause: error,\n })\n return null\n }\n\n try {\n const uploadArgs: UploadArgs = {\n file: mappedFile,\n serverURL,\n apiRoute,\n mimeType,\n prefix,\n }\n\n // Check storage mapping for mime type\n type StorageMap = NonNullable<typeof pluginOptions.storage>\n\n const storageForMimeType =\n pluginOptions.storage &&\n Object.prototype.hasOwnProperty.call(pluginOptions.storage, mimeType)\n ? pluginOptions.storage[mimeType as keyof StorageMap]\n : undefined\n\n const isVideoFile = await isVideo(file)\n const storeOnMux =\n pluginOptions.storage?.['video/*'] === 'mux' ||\n storageForMimeType === 'mux'\n\n switch (true) {\n case storeOnMux && isVideoFile:\n return await muxUpload(uploadArgs)\n default:\n return await tusUpload(uploadArgs)\n }\n } catch (error) {\n throwError({ ...MediaCloudErrors.UPLOAD_HANDLER_ERROR, cause: error })\n return null\n }\n },\n })(props)\n}\n"],"mappings":"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"}
|