@maas/payload-plugin-media-cloud 0.0.38 → 0.0.40

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.
Files changed (52) hide show
  1. package/dist/adapter/handleUpload.mjs +9 -9
  2. package/dist/adapter/handleUpload.mjs.map +1 -1
  3. package/dist/adapter/staticHandler.mjs +5 -2
  4. package/dist/adapter/staticHandler.mjs.map +1 -1
  5. package/dist/adapter/storageAdapter.mjs +1 -1
  6. package/dist/collectionHooks/afterChange.mjs +14 -3
  7. package/dist/collectionHooks/afterChange.mjs.map +1 -1
  8. package/dist/collections/mediaCollection.mjs +2 -3
  9. package/dist/collections/mediaCollection.mjs.map +1 -1
  10. package/dist/components/gridContext/gridContext.d.mts +1 -1
  11. package/dist/components/gridView/gridView.css +11 -1
  12. package/dist/components/gridView/gridView.d.mts +1 -1
  13. package/dist/components/gridView/gridView.mjs +3 -2
  14. package/dist/components/gridView/gridView.mjs.map +1 -1
  15. package/dist/components/muxPreview/muxPreview.d.mts +1 -1
  16. package/dist/components/selectMany/selectMany.d.mts +10 -0
  17. package/dist/components/selectMany/selectMany.mjs +49 -0
  18. package/dist/components/selectMany/selectMany.mjs.map +1 -0
  19. package/dist/components/uploadHandler/uploadHandler.d.mts +1 -1
  20. package/dist/components/uploadHandler/uploadHandler.mjs +117 -99
  21. package/dist/components/uploadHandler/uploadHandler.mjs.map +1 -1
  22. package/dist/components/uploadManager/uploadManager.mjs +2 -2
  23. package/dist/components/uploadManager/uploadManager.mjs.map +1 -1
  24. package/dist/endpoints/fileExistsHandler.mjs +3 -3
  25. package/dist/endpoints/fileExistsHandler.mjs.map +1 -1
  26. package/dist/endpoints/muxAssetHandler.d.mts +1 -1
  27. package/dist/endpoints/muxAssetHandler.mjs +2 -2
  28. package/dist/endpoints/muxAssetHandler.mjs.map +1 -1
  29. package/dist/endpoints/muxCreateUploadHandler.d.mts +1 -1
  30. package/dist/endpoints/muxCreateUploadHandler.mjs +2 -2
  31. package/dist/endpoints/muxCreateUploadHandler.mjs.map +1 -1
  32. package/dist/endpoints/muxWebhookHandler.d.mts +1 -1
  33. package/dist/endpoints/tusPostProcessorHandler.mjs +13 -3
  34. package/dist/endpoints/tusPostProcessorHandler.mjs.map +1 -1
  35. package/dist/fields/mux.mjs +0 -3
  36. package/dist/fields/mux.mjs.map +1 -1
  37. package/dist/tus/stores/s3/partsManager.mjs +4 -10
  38. package/dist/tus/stores/s3/partsManager.mjs.map +1 -1
  39. package/dist/tus/stores/s3/s3Store.mjs +4 -1
  40. package/dist/tus/stores/s3/s3Store.mjs.map +1 -1
  41. package/dist/types/errors.d.mts +8 -0
  42. package/dist/types/errors.mjs +8 -0
  43. package/dist/types/errors.mjs.map +1 -1
  44. package/dist/types/index.d.mts +5 -1
  45. package/dist/utils/defaultOptions.mjs +5 -1
  46. package/dist/utils/defaultOptions.mjs.map +1 -1
  47. package/dist/utils/file.d.mts +2 -2
  48. package/dist/utils/file.mjs +1 -1
  49. package/dist/utils/file.mjs.map +1 -1
  50. package/dist/utils/mux.d.mts +3 -3
  51. package/dist/utils/tus.d.mts +4 -4
  52. package/package.json +6 -5
@@ -1,23 +1,23 @@
1
+ import { MediaCloudErrors } from "../types/errors.mjs";
2
+ import { useErrorHandler } from "../hooks/useErrorHandler.mjs";
3
+
1
4
  //#region src/adapter/handleUpload.ts
2
5
  /**
3
6
  * Creates a handle upload function for processing file uploads to both Mux and S3 storage
4
7
  * @returns A HandleUpload function that processes client upload context and updates document data
5
8
  */
6
9
  function getHandleUpload() {
10
+ const { throwError } = useErrorHandler();
7
11
  return async function({ clientUploadContext, data }) {
8
- if (!clientUploadContext) return data;
12
+ if (!clientUploadContext) throwError(MediaCloudErrors.UPLOAD_HANDLER_ERROR);
9
13
  const ctx = clientUploadContext;
10
14
  data.mimeType = ctx.mimeType;
15
+ data.storage = ctx.storage;
11
16
  switch (ctx.storage) {
12
17
  case "mux":
13
- data.storage = "mux";
14
- data.mux = {
15
- uploadId: ctx.uploadId ?? "",
16
- status: "preparing"
17
- };
18
- break;
19
- default:
20
- data.storage = "s3";
18
+ data.mux = data.mux || {};
19
+ data.mux.uploadId = ctx.uploadId;
20
+ data.mux.status = "preparing";
21
21
  break;
22
22
  }
23
23
  return data;
@@ -1 +1 @@
1
- {"version":3,"file":"handleUpload.mjs","names":[],"sources":["../../src/adapter/handleUpload.ts"],"sourcesContent":["import type { HandleUpload } from '@payloadcms/plugin-cloud-storage/types'\n\ninterface ClientUploadContext {\n storage: 'mux' | 's3'\n uploadId?: string\n mimeType?: string\n}\n\n/**\n * Creates a handle upload function for processing file uploads to both Mux and S3 storage\n * @returns A HandleUpload function that processes client upload context and updates document data\n */\nexport function getHandleUpload(): HandleUpload {\n return async function ({ clientUploadContext, data }) {\n if (!clientUploadContext) {\n return data\n }\n\n const ctx = clientUploadContext as ClientUploadContext\n data.mimeType = ctx.mimeType\n\n switch (ctx.storage) {\n case 'mux':\n data.storage = 'mux'\n data.mux = {\n uploadId: ctx.uploadId ?? '',\n status: 'preparing',\n }\n break\n default:\n data.storage = 's3'\n break\n }\n\n return data\n }\n}\n"],"mappings":";;;;;AAYA,SAAgB,kBAAgC;AAC9C,QAAO,eAAgB,EAAE,qBAAqB,QAAQ;AACpD,MAAI,CAAC,oBACH,QAAO;EAGT,MAAM,MAAM;AACZ,OAAK,WAAW,IAAI;AAEpB,UAAQ,IAAI,SAAZ;GACE,KAAK;AACH,SAAK,UAAU;AACf,SAAK,MAAM;KACT,UAAU,IAAI,YAAY;KAC1B,QAAQ;KACT;AACD;GACF;AACE,SAAK,UAAU;AACf;;AAGJ,SAAO"}
1
+ {"version":3,"file":"handleUpload.mjs","names":[],"sources":["../../src/adapter/handleUpload.ts"],"sourcesContent":["import type { HandleUpload } from '@payloadcms/plugin-cloud-storage/types'\nimport { useErrorHandler } from '../hooks/useErrorHandler'\nimport { MediaCloudErrors } from '../types/errors'\n\ninterface ClientUploadContext {\n storage: 'mux' | 's3'\n uploadId?: string\n mimeType?: string\n}\n\n/**\n * Creates a handle upload function for processing file uploads to both Mux and S3 storage\n * @returns A HandleUpload function that processes client upload context and updates document data\n */\nexport function getHandleUpload(): HandleUpload {\n const { throwError } = useErrorHandler()\n\n return async function ({ clientUploadContext, data }) {\n if (!clientUploadContext) {\n throwError(MediaCloudErrors.UPLOAD_HANDLER_ERROR)\n }\n\n const ctx = clientUploadContext as ClientUploadContext\n\n data.mimeType = ctx.mimeType\n data.storage = ctx.storage\n\n switch (ctx.storage) {\n case 'mux':\n data.mux = data.mux || {}\n data.mux.uploadId = ctx.uploadId\n data.mux.status = 'preparing'\n break\n }\n\n return data\n }\n}\n"],"mappings":";;;;;;;;AAcA,SAAgB,kBAAgC;CAC9C,MAAM,EAAE,eAAe,iBAAiB;AAExC,QAAO,eAAgB,EAAE,qBAAqB,QAAQ;AACpD,MAAI,CAAC,oBACH,YAAW,iBAAiB,qBAAqB;EAGnD,MAAM,MAAM;AAEZ,OAAK,WAAW,IAAI;AACpB,OAAK,UAAU,IAAI;AAEnB,UAAQ,IAAI,SAAZ;GACE,KAAK;AACH,SAAK,MAAM,KAAK,OAAO,EAAE;AACzB,SAAK,IAAI,WAAW,IAAI;AACxB,SAAK,IAAI,SAAS;AAClB;;AAGJ,SAAO"}
@@ -50,13 +50,16 @@ function createEmptyResponse(args) {
50
50
  * @returns A Promise that resolves to a Response object containing the file stream or empty response on error
51
51
  */
52
52
  async function serveS3File({ getS3Store, doc }) {
53
+ let stream$1 = void 0;
53
54
  try {
54
- const stream$1 = await getS3Store().read(doc.filename);
55
+ stream$1 = await getS3Store().read(doc.path ?? doc.filename);
55
56
  if (stream$1) {
56
57
  const webStream = Readable.toWeb(stream$1);
57
58
  return new Response(webStream);
58
59
  }
59
- } catch (_error) {}
60
+ } catch (_error) {
61
+ stream$1?.destroy();
62
+ }
60
63
  return createEmptyResponse({});
61
64
  }
62
65
 
@@ -1 +1 @@
1
- {"version":3,"file":"staticHandler.mjs","names":["stream"],"sources":["../../src/adapter/staticHandler.ts"],"sourcesContent":["import { Readable } from 'node:stream'\nimport type { StaticHandler } from '@payloadcms/plugin-cloud-storage/types'\nimport type { Document } from 'payload'\nimport type { S3Store } from '../tus/stores/s3/s3Store'\n\ninterface StaticHandlerArgs {\n getS3Store: () => S3Store\n collection: string\n}\n\ninterface ServeS3FileArgs {\n getS3Store: () => S3Store\n doc: Document\n}\n\ninterface CreateEmptyResponseArgs {\n mimeType?: string\n}\n\n/**\n * Creates a static handler that serves files from S3 or returns empty responses for Mux assets\n * @param args - The arguments for creating the static handler\n * @param args.getS3Store - Function that returns an S3 client instance\n * @param args.collection - The name of the media collection in Payload\n * @returns A StaticHandler function that serves files or empty responses based on storage type\n */\nexport function getStaticHandler(args: StaticHandlerArgs): StaticHandler {\n const { getS3Store, collection } = args\n return async (req, { params }) => {\n const { payload } = req\n const filename = params.filename\n\n const { docs } = await payload.find({\n collection,\n where: { filename: { equals: filename } },\n })\n\n const doc = docs[0] as Document\n\n if (!doc) {\n return createEmptyResponse()\n }\n\n if (doc.storage === 'mux') {\n return createEmptyResponse({ mimeType: doc.mimeType })\n }\n\n return await serveS3File({ getS3Store, doc })\n }\n}\n\n/**\n * Creates an empty response with appropriate headers\n * @param args - Optional arguments for the empty response\n * @param args.mimeType - The MIME type to set in the Content-Type header\n * @returns A Response object with empty content and appropriate headers\n */\nfunction createEmptyResponse(args?: CreateEmptyResponseArgs): Response {\n const { mimeType = 'application/octet-stream' } = args ?? {}\n return new Response(new Uint8Array(0), {\n status: 200,\n headers: {\n 'Content-Type': mimeType,\n 'Content-Length': '0',\n },\n })\n}\n\n/**\n * Serves a file from S3 storage\n * @param args - The arguments for serving the S3 file\n * @param args.getS3Store - Function that returns an S3 client instance\n * @param args.doc - The document containing file metadata\n * @returns A Promise that resolves to a Response object containing the file stream or empty response on error\n */\nasync function serveS3File({\n getS3Store,\n doc,\n}: ServeS3FileArgs): Promise<Response> {\n try {\n const s3Store = getS3Store()\n const stream = await s3Store.read(doc.filename)\n\n if (stream) {\n const webStream = Readable.toWeb(stream) as ReadableStream<Uint8Array>\n return new Response(webStream)\n }\n } catch (_error) {\n // File not found or other error, fall back to empty response\n }\n\n return createEmptyResponse({})\n}\n"],"mappings":";;;;;;;;;;AA0BA,SAAgB,iBAAiB,MAAwC;CACvE,MAAM,EAAE,YAAY,eAAe;AACnC,QAAO,OAAO,KAAK,EAAE,aAAa;EAChC,MAAM,EAAE,YAAY;EACpB,MAAM,WAAW,OAAO;EAExB,MAAM,EAAE,SAAS,MAAM,QAAQ,KAAK;GAClC;GACA,OAAO,EAAE,UAAU,EAAE,QAAQ,UAAU,EAAE;GAC1C,CAAC;EAEF,MAAM,MAAM,KAAK;AAEjB,MAAI,CAAC,IACH,QAAO,qBAAqB;AAG9B,MAAI,IAAI,YAAY,MAClB,QAAO,oBAAoB,EAAE,UAAU,IAAI,UAAU,CAAC;AAGxD,SAAO,MAAM,YAAY;GAAE;GAAY;GAAK,CAAC;;;;;;;;;AAUjD,SAAS,oBAAoB,MAA0C;CACrE,MAAM,EAAE,WAAW,+BAA+B,QAAQ,EAAE;AAC5D,QAAO,IAAI,SAAS,IAAI,WAAW,EAAE,EAAE;EACrC,QAAQ;EACR,SAAS;GACP,gBAAgB;GAChB,kBAAkB;GACnB;EACF,CAAC;;;;;;;;;AAUJ,eAAe,YAAY,EACzB,YACA,OACqC;AACrC,KAAI;EAEF,MAAMA,WAAS,MADC,YAAY,CACC,KAAK,IAAI,SAAS;AAE/C,MAAIA,UAAQ;GACV,MAAM,YAAY,SAAS,MAAMA,SAAO;AACxC,UAAO,IAAI,SAAS,UAAU;;UAEzB,QAAQ;AAIjB,QAAO,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"staticHandler.mjs","names":["stream: Readable | undefined","stream"],"sources":["../../src/adapter/staticHandler.ts"],"sourcesContent":["import { Readable } from 'node:stream'\nimport type { StaticHandler } from '@payloadcms/plugin-cloud-storage/types'\nimport type { Document } from 'payload'\nimport type { S3Store } from '../tus/stores/s3/s3Store'\n\ninterface StaticHandlerArgs {\n getS3Store: () => S3Store\n collection: string\n}\n\ninterface ServeS3FileArgs {\n getS3Store: () => S3Store\n doc: Document\n}\n\ninterface CreateEmptyResponseArgs {\n mimeType?: string\n}\n\n/**\n * Creates a static handler that serves files from S3 or returns empty responses for Mux assets\n * @param args - The arguments for creating the static handler\n * @param args.getS3Store - Function that returns an S3 client instance\n * @param args.collection - The name of the media collection in Payload\n * @returns A StaticHandler function that serves files or empty responses based on storage type\n */\nexport function getStaticHandler(args: StaticHandlerArgs): StaticHandler {\n const { getS3Store, collection } = args\n return async (req, { params }) => {\n const { payload } = req\n const filename = params.filename\n\n const { docs } = await payload.find({\n collection,\n where: { filename: { equals: filename } },\n })\n\n const doc = docs[0] as Document\n\n if (!doc) {\n return createEmptyResponse()\n }\n\n if (doc.storage === 'mux') {\n return createEmptyResponse({ mimeType: doc.mimeType })\n }\n\n return await serveS3File({ getS3Store, doc })\n }\n}\n\n/**\n * Creates an empty response with appropriate headers\n * @param args - Optional arguments for the empty response\n * @param args.mimeType - The MIME type to set in the Content-Type header\n * @returns A Response object with empty content and appropriate headers\n */\nfunction createEmptyResponse(args?: CreateEmptyResponseArgs): Response {\n const { mimeType = 'application/octet-stream' } = args ?? {}\n return new Response(new Uint8Array(0), {\n status: 200,\n headers: {\n 'Content-Type': mimeType,\n 'Content-Length': '0',\n },\n })\n}\n\n/**\n * Serves a file from S3 storage\n * @param args - The arguments for serving the S3 file\n * @param args.getS3Store - Function that returns an S3 client instance\n * @param args.doc - The document containing file metadata\n * @returns A Promise that resolves to a Response object containing the file stream or empty response on error\n */\nasync function serveS3File({\n getS3Store,\n doc,\n}: ServeS3FileArgs): Promise<Response> {\n let stream: Readable | undefined = undefined\n\n try {\n const s3Store = getS3Store()\n stream = await s3Store.read(doc.path ?? doc.filename)\n\n if (stream) {\n const webStream = Readable.toWeb(stream) as ReadableStream<Uint8Array>\n return new Response(webStream)\n }\n } catch (_error) {\n stream?.destroy()\n // File not found or other error, fall back to empty response\n }\n\n return createEmptyResponse({})\n}\n"],"mappings":";;;;;;;;;;AA0BA,SAAgB,iBAAiB,MAAwC;CACvE,MAAM,EAAE,YAAY,eAAe;AACnC,QAAO,OAAO,KAAK,EAAE,aAAa;EAChC,MAAM,EAAE,YAAY;EACpB,MAAM,WAAW,OAAO;EAExB,MAAM,EAAE,SAAS,MAAM,QAAQ,KAAK;GAClC;GACA,OAAO,EAAE,UAAU,EAAE,QAAQ,UAAU,EAAE;GAC1C,CAAC;EAEF,MAAM,MAAM,KAAK;AAEjB,MAAI,CAAC,IACH,QAAO,qBAAqB;AAG9B,MAAI,IAAI,YAAY,MAClB,QAAO,oBAAoB,EAAE,UAAU,IAAI,UAAU,CAAC;AAGxD,SAAO,MAAM,YAAY;GAAE;GAAY;GAAK,CAAC;;;;;;;;;AAUjD,SAAS,oBAAoB,MAA0C;CACrE,MAAM,EAAE,WAAW,+BAA+B,QAAQ,EAAE;AAC5D,QAAO,IAAI,SAAS,IAAI,WAAW,EAAE,EAAE;EACrC,QAAQ;EACR,SAAS;GACP,gBAAgB;GAChB,kBAAkB;GACnB;EACF,CAAC;;;;;;;;;AAUJ,eAAe,YAAY,EACzB,YACA,OACqC;CACrC,IAAIA,WAA+B;AAEnC,KAAI;AAEF,aAAS,MADO,YAAY,CACL,KAAK,IAAI,QAAQ,IAAI,SAAS;AAErD,MAAIC,UAAQ;GACV,MAAM,YAAY,SAAS,MAAMA,SAAO;AACxC,UAAO,IAAI,SAAS,UAAU;;UAEzB,QAAQ;AACf,YAAQ,SAAS;;AAInB,QAAO,oBAAoB,EAAE,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { MediaCloudErrors } from "../types/errors.mjs";
2
- import { getHandleUpload } from "./handleUpload.mjs";
3
2
  import { useMagicError } from "../error-handler/dist/index.mjs";
3
+ import { getHandleUpload } from "./handleUpload.mjs";
4
4
  import { getHandleDelete } from "./handleDelete.mjs";
5
5
  import { getStaticHandler } from "./staticHandler.mjs";
6
6
 
@@ -6,6 +6,7 @@ import { s3Store } from "../plugin.mjs";
6
6
  //#region src/collectionHooks/afterChange.ts
7
7
  const afterChangeHook = async ({ collection, doc, previousDoc, req }) => {
8
8
  const { throwError } = useErrorHandler();
9
+ if (req.context?._mediaCloudPluginInternal) return doc;
9
10
  if (doc.path !== previousDoc?.path) {
10
11
  if (doc.storage === "s3" && s3Store) try {
11
12
  const oldKey = previousDoc?.path ?? previousDoc?.filename;
@@ -18,17 +19,27 @@ const afterChangeHook = async ({ collection, doc, previousDoc, req }) => {
18
19
  });
19
20
  }
20
21
  }
21
- if (!doc.thumbnail || previousDoc?.path !== doc.path) {
22
+ if (!doc.thumbnail || previousDoc?.path !== doc.path) try {
22
23
  const thumbnail = buildThumbnailURL({
23
24
  storage: doc.storage,
24
25
  playbackId: doc.storage === "mux" ? doc.mux.playbackId : void 0,
25
26
  s3Key: doc.storage === "s3" ? doc.path ?? doc.filename : void 0,
26
27
  s3Store
27
28
  });
28
- req.payload.update({
29
+ req.context = { ...req.context };
30
+ req.context._mediaCloudPluginInternal = true;
31
+ const update = await req.payload.update({
29
32
  collection: collection.slug,
30
33
  id: doc.id,
31
- data: { thumbnail }
34
+ data: { thumbnail },
35
+ req
36
+ });
37
+ delete req.context._mediaCloudPluginInternal;
38
+ return update;
39
+ } catch (error) {
40
+ throwError({
41
+ ...MediaCloudErrors.THUMBNAIL_GENERATION_ERROR,
42
+ cause: error
32
43
  });
33
44
  }
34
45
  return doc;
@@ -1 +1 @@
1
- {"version":3,"file":"afterChange.mjs","names":["afterChangeHook: CollectionAfterChangeHook"],"sources":["../../src/collectionHooks/afterChange.ts"],"sourcesContent":["import { buildThumbnailURL } from '../utils/buildThumbnailURL'\nimport { s3Store } from '../plugin'\nimport { MediaCloudErrors } from '../types/errors'\nimport { useErrorHandler } from '../hooks/useErrorHandler'\n\nimport type { CollectionAfterChangeHook } from 'payload'\n\nexport const afterChangeHook: CollectionAfterChangeHook = async ({\n collection,\n doc,\n previousDoc,\n req,\n}) => {\n const { throwError } = useErrorHandler()\n\n // Move asset in S3 if path has changed\n if (doc.path !== previousDoc?.path) {\n if (doc.storage === 's3' && s3Store) {\n try {\n const oldKey = previousDoc?.path ?? previousDoc?.filename\n const newKey = doc.path\n\n await s3Store.copy(oldKey, newKey)\n } catch (error) {\n throwError({ ...MediaCloudErrors.S3_MOVE_ERROR, cause: error })\n }\n }\n }\n\n // Handle thumbnail\n if (!doc.thumbnail || previousDoc?.path !== doc.path) {\n const thumbnail = buildThumbnailURL({\n storage: doc.storage,\n playbackId: doc.storage === 'mux' ? doc.mux.playbackId : undefined,\n s3Key: doc.storage === 's3' ? (doc.path ?? doc.filename) : undefined,\n s3Store,\n })\n\n req.payload.update({\n collection: collection.slug,\n id: doc.id,\n data: { thumbnail },\n })\n }\n\n return doc\n}\n"],"mappings":";;;;;;AAOA,MAAaA,kBAA6C,OAAO,EAC/D,YACA,KACA,aACA,UACI;CACJ,MAAM,EAAE,eAAe,iBAAiB;AAGxC,KAAI,IAAI,SAAS,aAAa,MAC5B;MAAI,IAAI,YAAY,QAAQ,QAC1B,KAAI;GACF,MAAM,SAAS,aAAa,QAAQ,aAAa;GACjD,MAAM,SAAS,IAAI;AAEnB,SAAM,QAAQ,KAAK,QAAQ,OAAO;WAC3B,OAAO;AACd,cAAW;IAAE,GAAG,iBAAiB;IAAe,OAAO;IAAO,CAAC;;;AAMrE,KAAI,CAAC,IAAI,aAAa,aAAa,SAAS,IAAI,MAAM;EACpD,MAAM,YAAY,kBAAkB;GAClC,SAAS,IAAI;GACb,YAAY,IAAI,YAAY,QAAQ,IAAI,IAAI,aAAa;GACzD,OAAO,IAAI,YAAY,OAAQ,IAAI,QAAQ,IAAI,WAAY;GAC3D;GACD,CAAC;AAEF,MAAI,QAAQ,OAAO;GACjB,YAAY,WAAW;GACvB,IAAI,IAAI;GACR,MAAM,EAAE,WAAW;GACpB,CAAC;;AAGJ,QAAO"}
1
+ {"version":3,"file":"afterChange.mjs","names":["afterChangeHook: CollectionAfterChangeHook"],"sources":["../../src/collectionHooks/afterChange.ts"],"sourcesContent":["import { buildThumbnailURL } from '../utils/buildThumbnailURL'\nimport { s3Store } from '../plugin'\nimport { MediaCloudErrors } from '../types/errors'\nimport { useErrorHandler } from '../hooks/useErrorHandler'\n\nimport type { CollectionAfterChangeHook } from 'payload'\n\nexport const afterChangeHook: CollectionAfterChangeHook = async ({\n collection,\n doc,\n previousDoc,\n req,\n}) => {\n const { throwError } = useErrorHandler()\n\n // Skip if this is an internal update to prevent infinite loop\n if (req.context?._mediaCloudPluginInternal) {\n return doc\n }\n\n // Move asset in S3 if path has changed\n if (doc.path !== previousDoc?.path) {\n if (doc.storage === 's3' && s3Store) {\n try {\n const oldKey = previousDoc?.path ?? previousDoc?.filename\n const newKey = doc.path\n\n await s3Store.copy(oldKey, newKey)\n } catch (error) {\n throwError({ ...MediaCloudErrors.S3_MOVE_ERROR, cause: error })\n }\n }\n }\n\n // Handle thumbnail\n if (!doc.thumbnail || previousDoc?.path !== doc.path) {\n try {\n const thumbnail = buildThumbnailURL({\n storage: doc.storage,\n playbackId: doc.storage === 'mux' ? doc.mux.playbackId : undefined,\n s3Key: doc.storage === 's3' ? (doc.path ?? doc.filename) : undefined,\n s3Store,\n })\n\n req.context = { ...req.context }\n req.context._mediaCloudPluginInternal = true\n\n const update = await req.payload.update({\n collection: collection.slug,\n id: doc.id,\n data: { thumbnail },\n req,\n })\n\n delete req.context._mediaCloudPluginInternal\n\n return update\n } catch (error) {\n throwError({\n ...MediaCloudErrors.THUMBNAIL_GENERATION_ERROR,\n cause: error,\n })\n }\n }\n\n return doc\n}\n"],"mappings":";;;;;;AAOA,MAAaA,kBAA6C,OAAO,EAC/D,YACA,KACA,aACA,UACI;CACJ,MAAM,EAAE,eAAe,iBAAiB;AAGxC,KAAI,IAAI,SAAS,0BACf,QAAO;AAIT,KAAI,IAAI,SAAS,aAAa,MAC5B;MAAI,IAAI,YAAY,QAAQ,QAC1B,KAAI;GACF,MAAM,SAAS,aAAa,QAAQ,aAAa;GACjD,MAAM,SAAS,IAAI;AAEnB,SAAM,QAAQ,KAAK,QAAQ,OAAO;WAC3B,OAAO;AACd,cAAW;IAAE,GAAG,iBAAiB;IAAe,OAAO;IAAO,CAAC;;;AAMrE,KAAI,CAAC,IAAI,aAAa,aAAa,SAAS,IAAI,KAC9C,KAAI;EACF,MAAM,YAAY,kBAAkB;GAClC,SAAS,IAAI;GACb,YAAY,IAAI,YAAY,QAAQ,IAAI,IAAI,aAAa;GACzD,OAAO,IAAI,YAAY,OAAQ,IAAI,QAAQ,IAAI,WAAY;GAC3D;GACD,CAAC;AAEF,MAAI,UAAU,EAAE,GAAG,IAAI,SAAS;AAChC,MAAI,QAAQ,4BAA4B;EAExC,MAAM,SAAS,MAAM,IAAI,QAAQ,OAAO;GACtC,YAAY,WAAW;GACvB,IAAI,IAAI;GACR,MAAM,EAAE,WAAW;GACnB;GACD,CAAC;AAEF,SAAO,IAAI,QAAQ;AAEnB,SAAO;UACA,OAAO;AACd,aAAW;GACT,GAAG,iBAAiB;GACpB,OAAO;GACR,CAAC;;AAIN,QAAO"}
@@ -19,7 +19,6 @@ function getMediaCollection(args) {
19
19
  const { baseCollection, view, folders } = args;
20
20
  const config = {
21
21
  slug: "media",
22
- custom: { storage: "test" },
23
22
  access: {
24
23
  read: () => true,
25
24
  delete: () => true
@@ -49,8 +48,8 @@ function getMediaCollection(args) {
49
48
  muxField
50
49
  ],
51
50
  hooks: {
52
- beforeChange: folders ? [beforeChangeHook] : [],
53
- afterChange: folders ? [afterChangeHook] : []
51
+ beforeChange: [beforeChangeHook],
52
+ afterChange: [afterChangeHook]
54
53
  }
55
54
  };
56
55
  if (!baseCollection) return config;
@@ -1 +1 @@
1
- {"version":3,"file":"mediaCollection.mjs","names":["config: CollectionConfig"],"sources":["../../src/collections/mediaCollection.ts"],"sourcesContent":["import { thumbnailField } from '../fields/thumbnail'\nimport { pathField } from '../fields/path'\nimport { filenameField } from '../fields/filename'\nimport { altField } from '../fields/alt'\nimport { widthField } from '../fields/width'\nimport { heightField } from '../fields/height'\nimport { storageField } from '../fields/storage'\nimport { muxField } from '../fields/mux'\n\nimport { beforeChangeHook } from '../collectionHooks/beforeChange'\nimport { afterChangeHook } from '../collectionHooks/afterChange'\n\nimport type { CollectionConfig } from 'payload'\nimport type { Document } from 'payload'\nimport type { MediaCloudPluginOptions } from '../types/index'\n\ninterface GetMediaCollectionArgs {\n view: MediaCloudPluginOptions['view']\n folders: MediaCloudPluginOptions['folders']\n baseCollection?: CollectionConfig\n}\n\n/**\n * Creates a media collection configuration for Payload CMS\n * @param args - Arguments including the S3Store instance\n * @returns A configured Payload collection for media files\n */\nexport function getMediaCollection(\n args: GetMediaCollectionArgs\n): CollectionConfig {\n const { baseCollection, view, folders } = args\n\n // Override list view to use grid view if specified\n const components =\n view === 'grid'\n ? {\n views: {\n list: {\n Component: '@maas/payload-plugin-media-cloud/components#GridView',\n },\n },\n }\n : undefined\n\n // Add hook, if folders are enabled\n // to handle thumbnails and S3 prefixing\n const afterChange = folders ? [afterChangeHook] : []\n const beforeChange = folders ? [beforeChangeHook] : []\n\n const config: CollectionConfig = {\n slug: 'media',\n custom: {\n storage: 'test',\n },\n access: {\n read: () => true,\n delete: () => true,\n },\n admin: {\n components,\n group: 'Media Cloud',\n pagination: {\n defaultLimit: 50,\n },\n },\n upload: {\n crop: false,\n displayPreview: true,\n hideRemoveFile: true,\n adminThumbnail({ doc }: { doc: Document }) {\n return doc.thumbnail ?? null\n },\n },\n fields: [\n thumbnailField,\n pathField,\n altField,\n {\n type: 'row',\n fields: [widthField, heightField],\n },\n storageField,\n muxField,\n ],\n hooks: {\n beforeChange,\n afterChange,\n },\n }\n\n if (!baseCollection) {\n return config\n }\n\n return {\n ...baseCollection,\n slug: baseCollection.slug ?? config.slug,\n admin: {\n ...(config.admin ?? {}),\n ...(baseCollection.admin ?? {}),\n },\n access: {\n ...(config.access ?? {}),\n ...(baseCollection.access ?? {}),\n },\n upload: config.upload,\n fields: [...(baseCollection.fields ?? []), ...config.fields, filenameField],\n hooks: {\n ...baseCollection.hooks,\n beforeChange: [\n ...(baseCollection.hooks?.beforeChange ?? []),\n ...(config.hooks?.beforeChange ?? []),\n ],\n afterChange: [\n ...(baseCollection.hooks?.afterChange ?? []),\n ...(config.hooks?.afterChange ?? []),\n ],\n },\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AA2BA,SAAgB,mBACd,MACkB;CAClB,MAAM,EAAE,gBAAgB,MAAM,YAAY;CAmB1C,MAAMA,SAA2B;EAC/B,MAAM;EACN,QAAQ,EACN,SAAS,QACV;EACD,QAAQ;GACN,YAAY;GACZ,cAAc;GACf;EACD,OAAO;GACL,YAzBF,SAAS,SACL,EACE,OAAO,EACL,MAAM,EACJ,WAAW,wDACZ,EACF,EACF,GACD;GAkBF,OAAO;GACP,YAAY,EACV,cAAc,IACf;GACF;EACD,QAAQ;GACN,MAAM;GACN,gBAAgB;GAChB,gBAAgB;GAChB,eAAe,EAAE,OAA0B;AACzC,WAAO,IAAI,aAAa;;GAE3B;EACD,QAAQ;GACN;GACA;GACA;GACA;IACE,MAAM;IACN,QAAQ,CAAC,YAAY,YAAY;IAClC;GACD;GACA;GACD;EACD,OAAO;GACL,cAtCiB,UAAU,CAAC,iBAAiB,GAAG,EAAE;GAuClD,aAxCgB,UAAU,CAAC,gBAAgB,GAAG,EAAE;GAyCjD;EACF;AAED,KAAI,CAAC,eACH,QAAO;AAGT,QAAO;EACL,GAAG;EACH,MAAM,eAAe,QAAQ,OAAO;EACpC,OAAO;GACL,GAAI,OAAO,SAAS,EAAE;GACtB,GAAI,eAAe,SAAS,EAAE;GAC/B;EACD,QAAQ;GACN,GAAI,OAAO,UAAU,EAAE;GACvB,GAAI,eAAe,UAAU,EAAE;GAChC;EACD,QAAQ,OAAO;EACf,QAAQ;GAAC,GAAI,eAAe,UAAU,EAAE;GAAG,GAAG,OAAO;GAAQ;GAAc;EAC3E,OAAO;GACL,GAAG,eAAe;GAClB,cAAc,CACZ,GAAI,eAAe,OAAO,gBAAgB,EAAE,EAC5C,GAAI,OAAO,OAAO,gBAAgB,EAAE,CACrC;GACD,aAAa,CACX,GAAI,eAAe,OAAO,eAAe,EAAE,EAC3C,GAAI,OAAO,OAAO,eAAe,EAAE,CACpC;GACF;EACF"}
1
+ {"version":3,"file":"mediaCollection.mjs","names":["config: CollectionConfig"],"sources":["../../src/collections/mediaCollection.ts"],"sourcesContent":["import { thumbnailField } from '../fields/thumbnail'\nimport { pathField } from '../fields/path'\nimport { filenameField } from '../fields/filename'\nimport { altField } from '../fields/alt'\nimport { widthField } from '../fields/width'\nimport { heightField } from '../fields/height'\nimport { storageField } from '../fields/storage'\nimport { muxField } from '../fields/mux'\n\nimport { beforeChangeHook } from '../collectionHooks/beforeChange'\nimport { afterChangeHook } from '../collectionHooks/afterChange'\n\nimport type { CollectionConfig } from 'payload'\nimport type { Document } from 'payload'\nimport type { MediaCloudPluginOptions } from '../types/index'\n\ninterface GetMediaCollectionArgs {\n view: MediaCloudPluginOptions['view']\n folders: MediaCloudPluginOptions['folders']\n baseCollection?: CollectionConfig\n}\n\n/**\n * Creates a media collection configuration for Payload CMS\n * @param args - Arguments including the S3Store instance\n * @returns A configured Payload collection for media files\n */\nexport function getMediaCollection(\n args: GetMediaCollectionArgs\n): CollectionConfig {\n const { baseCollection, view, folders } = args\n\n // Override list view to use grid view if specified\n const components =\n view === 'grid'\n ? {\n views: {\n list: {\n Component: '@maas/payload-plugin-media-cloud/components#GridView',\n },\n },\n }\n : undefined\n\n const config: CollectionConfig = {\n slug: 'media',\n access: {\n read: () => true,\n delete: () => true,\n },\n admin: {\n components,\n group: 'Media Cloud',\n pagination: {\n defaultLimit: 50,\n },\n },\n upload: {\n crop: false,\n displayPreview: true,\n hideRemoveFile: true,\n adminThumbnail({ doc }: { doc: Document }) {\n return doc.thumbnail ?? null\n },\n },\n fields: [\n thumbnailField,\n pathField,\n altField,\n {\n type: 'row',\n fields: [widthField, heightField],\n },\n storageField,\n muxField,\n ],\n hooks: {\n beforeChange: [beforeChangeHook],\n afterChange: [afterChangeHook],\n },\n }\n\n if (!baseCollection) {\n return config\n }\n\n return {\n ...baseCollection,\n slug: baseCollection.slug ?? config.slug,\n admin: {\n ...(config.admin ?? {}),\n ...(baseCollection.admin ?? {}),\n },\n access: {\n ...(config.access ?? {}),\n ...(baseCollection.access ?? {}),\n },\n upload: config.upload,\n fields: [...(baseCollection.fields ?? []), ...config.fields, filenameField],\n hooks: {\n ...baseCollection.hooks,\n beforeChange: [\n ...(baseCollection.hooks?.beforeChange ?? []),\n ...(config.hooks?.beforeChange ?? []),\n ],\n afterChange: [\n ...(baseCollection.hooks?.afterChange ?? []),\n ...(config.hooks?.afterChange ?? []),\n ],\n },\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AA2BA,SAAgB,mBACd,MACkB;CAClB,MAAM,EAAE,gBAAgB,MAAM,YAAY;CAc1C,MAAMA,SAA2B;EAC/B,MAAM;EACN,QAAQ;GACN,YAAY;GACZ,cAAc;GACf;EACD,OAAO;GACL,YAjBF,SAAS,SACL,EACE,OAAO,EACL,MAAM,EACJ,WAAW,wDACZ,EACF,EACF,GACD;GAUF,OAAO;GACP,YAAY,EACV,cAAc,IACf;GACF;EACD,QAAQ;GACN,MAAM;GACN,gBAAgB;GAChB,gBAAgB;GAChB,eAAe,EAAE,OAA0B;AACzC,WAAO,IAAI,aAAa;;GAE3B;EACD,QAAQ;GACN;GACA;GACA;GACA;IACE,MAAM;IACN,QAAQ,CAAC,YAAY,YAAY;IAClC;GACD;GACA;GACD;EACD,OAAO;GACL,cAAc,CAAC,iBAAiB;GAChC,aAAa,CAAC,gBAAgB;GAC/B;EACF;AAED,KAAI,CAAC,eACH,QAAO;AAGT,QAAO;EACL,GAAG;EACH,MAAM,eAAe,QAAQ,OAAO;EACpC,OAAO;GACL,GAAI,OAAO,SAAS,EAAE;GACtB,GAAI,eAAe,SAAS,EAAE;GAC/B;EACD,QAAQ;GACN,GAAI,OAAO,UAAU,EAAE;GACvB,GAAI,eAAe,UAAU,EAAE;GAChC;EACD,QAAQ,OAAO;EACf,QAAQ;GAAC,GAAI,eAAe,UAAU,EAAE;GAAG,GAAG,OAAO;GAAQ;GAAc;EAC3E,OAAO;GACL,GAAG,eAAe;GAClB,cAAc,CACZ,GAAI,eAAe,OAAO,gBAAgB,EAAE,EAC5C,GAAI,OAAO,OAAO,gBAAgB,EAAE,CACrC;GACD,aAAa,CACX,GAAI,eAAe,OAAO,eAAe,EAAE,EAC3C,GAAI,OAAO,OAAO,eAAe,EAAE,CACpC;GACF;EACF"}
@@ -1,6 +1,6 @@
1
1
  import { MappedDocument } from "../gridView/gridView.mjs";
2
- import React from "react";
3
2
  import { FolderSortKeys } from "payload";
3
+ import React from "react";
4
4
 
5
5
  //#region src/components/gridContext/gridContext.d.ts
6
6
  interface OnItemClickArgs {
@@ -45,6 +45,16 @@
45
45
  .grid-view__list-selection {
46
46
  display: flex;
47
47
  align-items: center;
48
+ justify-content: space-between;
49
+ flex-wrap: wrap;
48
50
  gap: 1rem;
49
- margin-top: 1rem;
51
+ margin: 1rem 10px 0 10px;
52
+ width: 100%;
53
+ & .list-selection {
54
+ margin-bottom: 0;
55
+ margin-left: 0;
56
+ & span {
57
+ white-space: nowrap;
58
+ }
59
+ }
50
60
  }
@@ -1,6 +1,6 @@
1
+ import { ListViewClientProps } from "payload";
1
2
  import React from "react";
2
3
  import "./gridView.css";
3
- import { ListViewClientProps } from "payload";
4
4
 
5
5
  //#region src/components/gridView/gridView.d.ts
6
6
  interface MappedDocument {
@@ -2,11 +2,12 @@
2
2
 
3
3
  import { GridProvider } from "../gridContext/gridContext.mjs";
4
4
  import { ItemCardGrid } from "../itemCardGrid/itemCardGrid.mjs";
5
+ import { SelectMany } from "../selectMany/selectMany.mjs";
5
6
  import { c } from "react/compiler-runtime";
6
7
  import { Fragment, useEffect } from "react";
7
8
  import { useRouter } from "next/navigation";
8
9
  import { getTranslation } from "@payloadcms/translations";
9
- import { Gutter, ListControls, ListHeader, ListSelection, PageControls, SelectMany, SelectionProvider, useBulkUpload, useConfig, useListDrawerContext, useListQuery, useModal, useStepNav, useTranslation, useWindowInfo } from "@payloadcms/ui";
10
+ import { Gutter, ListControls, ListHeader, ListSelection, PageControls, SelectionProvider, useBulkUpload, useConfig, useListDrawerContext, useListQuery, useModal, useStepNav, useTranslation, useWindowInfo } from "@payloadcms/ui";
10
11
  import { DefaultListViewTabs } from "@payloadcms/ui/elements/DefaultListViewTabs";
11
12
  import { formatAdminURL } from "payload/shared";
12
13
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -282,7 +283,7 @@ function GridView(props) {
282
283
  label: getTranslation(collectionConfig.labels.plural, i18n)
283
284
  }), /* @__PURE__ */ jsx("div", {
284
285
  className: "grid-view__list-selection-actions",
285
- children: typeof onBulkSelect === "function" ? beforeActions ? [...beforeActions, /* @__PURE__ */ jsx(SelectMany, { onClick: onBulkSelect }, "select-many")] : [/* @__PURE__ */ jsx(SelectMany, { onClick: onBulkSelect }, "select-many")] : beforeActions
286
+ children: typeof onBulkSelect === "function" ? [...beforeActions ?? [], /* @__PURE__ */ jsx(SelectMany, { onClick: onBulkSelect }, "select-many")] : beforeActions
286
287
  })]
287
288
  }) : null,
288
289
  collectionConfig
@@ -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","jsx","_jsx","jsxs","_jsxs","GridView","props","$","collectionSlug","AfterList","AfterListTable","BeforeList","BeforeListTable","Description","newDocumentURL","hasCreatePermission","hasDeletePermission","disableBulkDelete","disableBulkEdit","enableRowSelections","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","isInDrawer","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","t18","enableColumns","t19","length","singular","className","children","type","onClick","push","t20","AfterPageControls","t21","t22","t23","t24","t25","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 enableRowSelections,\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, isInDrawer } = useListDrawerContext()\n\n const getThumbnailURL = (doc: MediaDocument): string | undefined => {\n if (doc?.thumbnailURL) {\n return doc.thumbnailURL\n }\n\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 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={enableRowSelections} 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 beforeActions={\n isInDrawer && typeof onBulkSelect === 'function'\n ? [\n ...(beforeActions ?? []),\n <SelectMany key=\"select-many\" onClick={onBulkSelect} />,\n ]\n : beforeActions\n }\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","ListSelection","ListControls","ListHeader","PageControls","useListDrawerContext","DefaultListViewTabs","formatAdminURL","ItemCardGrid","GridProvider","SelectMany","jsx","_jsx","jsxs","_jsxs","GridView","props","$","collectionSlug","AfterList","AfterListTable","BeforeList","BeforeListTable","Description","newDocumentURL","hasCreatePermission","hasDeletePermission","disableBulkDelete","disableBulkEdit","enableRowSelections","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","isInDrawer","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","t18","enableColumns","t19","length","singular","className","children","type","onClick","push","t20","AfterPageControls","t21","t22","t23","t24","t25","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 ListSelection,\n ListControls,\n ListHeader,\n PageControls,\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'\nimport { SelectMany } from '../selectMany/selectMany'\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 enableRowSelections,\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, isInDrawer } = useListDrawerContext()\n\n const getThumbnailURL = (doc: MediaDocument): string | undefined => {\n if (doc?.thumbnailURL) {\n return doc.thumbnailURL\n }\n\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 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={enableRowSelections} 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 beforeActions={\n isInDrawer && typeof onBulkSelect === 'function'\n ? [\n ...(beforeActions ?? []),\n <SelectMany key=\"select-many\" onClick={onBulkSelect} />,\n ]\n : beforeActions\n }\n collectionConfig={collectionConfig}\n collectionSlug={collectionSlug}\n enableColumns={false}\n />\n {BeforeListTable}\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 {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 ? [\n ...(beforeActions ?? []),\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 {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,5 +1,5 @@
1
- import React from "react";
2
1
  import { UIFieldClientProps } from "payload";
2
+ import React from "react";
3
3
 
4
4
  //#region src/components/muxPreview/muxPreview.d.ts
5
5
 
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ import { useSelection } from "@payloadcms/ui";
3
+
4
+ //#region src/components/selectMany/selectMany.d.ts
5
+ declare const SelectMany: React.FC<{
6
+ onClick?: (ids: ReturnType<typeof useSelection>['selected']) => void;
7
+ }>;
8
+ //#endregion
9
+ export { SelectMany };
10
+ //# sourceMappingURL=selectMany.d.mts.map
@@ -0,0 +1,49 @@
1
+ import { c } from "react/compiler-runtime";
2
+ import { Pill, useSelection, useTranslation } from "@payloadcms/ui";
3
+ import { jsxs } from "react/jsx-runtime";
4
+
5
+ //#region src/components/selectMany/selectMany.tsx
6
+ const SelectMany = (props) => {
7
+ const $ = c(9);
8
+ const { onClick } = props;
9
+ const { count, selected } = useSelection();
10
+ const { t } = useTranslation();
11
+ if (!selected || !count) return null;
12
+ let t0;
13
+ if ($[0] !== onClick || $[1] !== selected) {
14
+ t0 = () => {
15
+ if (typeof onClick === "function") onClick(selected);
16
+ };
17
+ $[0] = onClick;
18
+ $[1] = selected;
19
+ $[2] = t0;
20
+ } else t0 = $[2];
21
+ let t1;
22
+ if ($[3] !== t) {
23
+ t1 = t("general:select");
24
+ $[3] = t;
25
+ $[4] = t1;
26
+ } else t1 = $[4];
27
+ let t2;
28
+ if ($[5] !== count || $[6] !== t0 || $[7] !== t1) {
29
+ t2 = /* @__PURE__ */ jsxs(Pill, {
30
+ onClick: t0,
31
+ pillStyle: "light",
32
+ size: "small",
33
+ children: [
34
+ t1,
35
+ " ",
36
+ count
37
+ ]
38
+ });
39
+ $[5] = count;
40
+ $[6] = t0;
41
+ $[7] = t1;
42
+ $[8] = t2;
43
+ } else t2 = $[8];
44
+ return t2;
45
+ };
46
+
47
+ //#endregion
48
+ export { SelectMany };
49
+ //# sourceMappingURL=selectMany.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectMany.mjs","names":["React","useSelection","useTranslation","Pill","jsxs","_jsxs","SelectMany","props","$","_c","onClick","count","selected","t","t0","t1","t2","pillStyle","size","children"],"sources":["../../../src/components/selectMany/selectMany.tsx"],"sourcesContent":["import React from 'react'\n\nimport { useSelection, useTranslation, Pill } from '@payloadcms/ui'\n\nexport const SelectMany: React.FC<{\n onClick?: (ids: ReturnType<typeof useSelection>['selected']) => void\n}> = (props) => {\n const { onClick } = props\n\n const { count, selected } = useSelection()\n const { t } = useTranslation()\n\n if (!selected || !count) {\n return null\n }\n\n return (\n <Pill\n onClick={() => {\n if (typeof onClick === 'function') {\n onClick(selected)\n }\n }}\n pillStyle=\"light\"\n size=\"small\"\n >\n {t('general:select')} {count}\n </Pill>\n )\n}\n"],"mappings":";;;;;AAIA,MAAaM,cAERC,UAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CACH,MAAA,EAAAC,YAAoBH;CAEpB,MAAA,EAAAI,OAAAC,aAA4BX,cAAc;CAC1C,MAAA,EAAAY,MAAcX,gBAAgB;AAE9B,KAAI,CAACU,YAAD,CAAcD,MAAK,QACd;CACR,IAAAG;AAAA,KAAAN,EAAA,OAAAE,WAAAF,EAAA,OAAAI,UAAA;AAIYE,aAAA;AACP,OAAI,OAAOJ,YAAY,WACrBA,SAAQE,SAAS;;AAEpBJ,IAAA,KAAAE;AAAAF,IAAA,KAAAI;AAAAJ,IAAA,KAAAM;OAAAA,MAAAN,EAAA;CAAA,IAAAO;AAAA,KAAAP,EAAA,OAAAK,GAAA;AAIAE,OAAAF,EAAE,iBAAiB;AAAAL,IAAA,KAAAK;AAAAL,IAAA,KAAAO;OAAAA,MAAAP,EAAA;CAAA,IAAAQ;AAAA,KAAAR,EAAA,OAAAG,SAAAH,EAAA,OAAAM,MAAAN,EAAA,OAAAO,IAAA;AATtBC,OAAAX,qBAACF,MAAI;GACMO,SAAAI;GAKCG,WAAA;GACLC,MAAA;GAAOC,UAAA;IAEXJ;IAAoB;IAAEJ;IAAK;GACxB,CAAC;AAAAH,IAAA,KAAAG;AAAAH,IAAA,KAAAM;AAAAN,IAAA,KAAAO;AAAAP,IAAA,KAAAQ;OAAAA,MAAAR,EAAA;AAAA,QAVPQ"}
@@ -1,7 +1,7 @@
1
1
  import { MediaCloudPluginOptions } from "../../types/index.mjs";
2
+ import { UploadCollectionSlug } from "payload";
2
3
  import * as react0 from "react";
3
4
  import { ReactNode } from "react";
4
- import { UploadCollectionSlug } from "payload";
5
5
 
6
6
  //#region src/components/uploadHandler/uploadHandler.d.ts
7
7
  type ClientUploadHandlerProps<T extends Record<string, unknown>> = {