@kimjansheden/payload-video-processor 0.1.7 → 0.1.9

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/README.md CHANGED
@@ -51,6 +51,12 @@ const videoOptions = {
51
51
  redisUrl: process.env.REDIS_URL,
52
52
  concurrency: 1,
53
53
  },
54
+ // Auto-enqueue a preset when a new video is uploaded.
55
+ autoEnqueue: true,
56
+ // Optional: override the default preset used on create.
57
+ autoEnqueuePreset: "hd1080",
58
+ // Optional: replace the original with the auto-generated variant.
59
+ autoReplaceOriginal: true,
54
60
  };
55
61
 
56
62
  export default buildConfig({
@@ -62,6 +68,11 @@ export default buildConfig({
62
68
  });
63
69
  ```
64
70
 
71
+ When `autoEnqueue` is `true`, the plugin
72
+ tries a preset named `1080`, then `hd1080`, and finally falls back to the first
73
+ configured preset.
74
+ Set `autoEnqueuePreset` to force a specific preset name when auto-enqueueing.
75
+
65
76
  2. Provide a worker options module and bundle it to JS (the CLI needs a JS file).
66
77
  Example setup:
67
78
 
@@ -12,6 +12,13 @@ var React__default = /*#__PURE__*/_interopDefault(React);
12
12
  if (typeof document !== "undefined") {
13
13
  void import('../styles-GMHOOV63.css');
14
14
  }
15
+ var isRecord = (value) => typeof value === "object" && value !== null;
16
+ var extractDocument = (payload) => {
17
+ if (!isRecord(payload)) return null;
18
+ const candidate = isRecord(payload.doc) ? payload.doc : payload;
19
+ if (!isRecord(candidate)) return null;
20
+ return candidate;
21
+ };
15
22
  var isVideoVariantFieldConfig = (value) => {
16
23
  if (!value || typeof value !== "object") return false;
17
24
  const candidate = value;
@@ -28,6 +35,7 @@ var formatProgress = (value) => {
28
35
  if (typeof value !== "number") return "0%";
29
36
  return `${Math.round(value)}%`;
30
37
  };
38
+ var isActiveJobState = (state) => Boolean(state && state !== "completed" && state !== "failed");
31
39
  var readVariantPreset = (variant) => {
32
40
  if (!variant || typeof variant !== "object") return void 0;
33
41
  if (typeof variant.preset === "string" && variant.preset.trim().length > 0) {
@@ -68,7 +76,7 @@ var formatSeconds = (value) => {
68
76
  var VideoField = (props) => {
69
77
  const { useEffect, useMemo, useState, useCallback, useRef } = React__default.default;
70
78
  const { field } = props;
71
- const { id } = ui.useDocumentInfo();
79
+ const { id, lastUpdateTime } = ui.useDocumentInfo();
72
80
  const custom = field.custom ?? (isVideoVariantFieldConfig(props) ? props : void 0);
73
81
  const presets = custom?.presets ?? {};
74
82
  const apiBase = useMemo(
@@ -82,9 +90,7 @@ var VideoField = (props) => {
82
90
  if (!value || value === "create") return null;
83
91
  return value;
84
92
  }, [id]);
85
- const [EasyCrop, setEasyCrop] = useState(
86
- null
87
- );
93
+ const [EasyCrop, setEasyCrop] = useState(null);
88
94
  useEffect(() => {
89
95
  if (typeof window !== "undefined" && !EasyCrop) {
90
96
  import('react-easy-crop').then((module) => {
@@ -102,6 +108,7 @@ var VideoField = (props) => {
102
108
  const [jobStatus, setJobStatus] = useState(null);
103
109
  const [pollingJobId, setPollingJobId] = useState(null);
104
110
  const [expectedPreset, setExpectedPreset] = useState(null);
111
+ const [processingStatus, setProcessingStatus] = useState(null);
105
112
  const [variants, setVariants] = useState([]);
106
113
  const [previewKey, setPreviewKey] = useState(null);
107
114
  const [replaceLoading, setReplaceLoading] = useState(null);
@@ -117,6 +124,24 @@ var VideoField = (props) => {
117
124
  useEffect(() => {
118
125
  expectedPresetRef.current = expectedPreset;
119
126
  }, [expectedPreset]);
127
+ useEffect(() => {
128
+ if (!processingStatus) return;
129
+ const statusJobId = processingStatus.jobId.trim();
130
+ if (!statusJobId) return;
131
+ if (!jobStatus) {
132
+ setJobStatus({
133
+ id: statusJobId,
134
+ state: processingStatus.state,
135
+ progress: processingStatus.progress
136
+ });
137
+ }
138
+ if (isActiveJobState(processingStatus.state) && !pollingJobId) {
139
+ setPollingJobId(statusJobId);
140
+ if (!expectedPreset && processingStatus.preset) {
141
+ setExpectedPreset(processingStatus.preset);
142
+ }
143
+ }
144
+ }, [expectedPreset, jobStatus, pollingJobId, processingStatus]);
120
145
  const messageClassName = message?.type === "error" ? "bg-rose-50 text-rose-700" : message?.type === "info" ? "bg-slate-50 text-slate-700" : "bg-emerald-50 text-emerald-700";
121
146
  const sendEnqueueRequest = useCallback(
122
147
  async ({
@@ -252,8 +277,8 @@ var VideoField = (props) => {
252
277
  variantIndex
253
278
  });
254
279
  if (docId === mediaId) {
255
- const nextDoc = payload?.doc;
256
- if (nextDoc && typeof nextDoc === "object") {
280
+ const nextDoc = extractDocument(payload);
281
+ if (nextDoc) {
257
282
  setDocData(nextDoc);
258
283
  const docVariants = Array.isArray(nextDoc?.variants) ? nextDoc.variants : [];
259
284
  setVariants(docVariants);
@@ -290,8 +315,8 @@ var VideoField = (props) => {
290
315
  preset: preset2
291
316
  });
292
317
  if (docId === mediaId) {
293
- const nextDoc = payload?.doc;
294
- if (nextDoc && typeof nextDoc === "object") {
318
+ const nextDoc = extractDocument(payload);
319
+ if (nextDoc) {
295
320
  setDocData(nextDoc);
296
321
  const docVariants = Array.isArray(nextDoc?.variants) ? nextDoc.variants : [];
297
322
  setVariants(docVariants);
@@ -371,9 +396,16 @@ var VideoField = (props) => {
371
396
  throw new Error(`Failed to load document (${response.status})`);
372
397
  }
373
398
  const payload = await response.json();
374
- const nextDoc = payload.doc ?? payload;
399
+ const nextDoc = extractDocument(payload);
400
+ if (!nextDoc) {
401
+ setDocData(null);
402
+ setVariants([]);
403
+ setProcessingStatus(null);
404
+ return null;
405
+ }
375
406
  setDocData(nextDoc);
376
- const docVariants = Array.isArray(nextDoc?.variants) ? nextDoc.variants : [];
407
+ setProcessingStatus(nextDoc.videoProcessingStatus ?? null);
408
+ const docVariants = Array.isArray(nextDoc.variants) ? nextDoc.variants : [];
377
409
  setVariants(docVariants);
378
410
  return { doc: nextDoc, variants: docVariants };
379
411
  } catch (fetchError) {
@@ -387,7 +419,7 @@ var VideoField = (props) => {
387
419
  }, [apiBase, custom, docId]);
388
420
  useEffect(() => {
389
421
  void fetchDocument();
390
- }, [fetchDocument, jobStatus?.state]);
422
+ }, [fetchDocument, jobStatus?.state, lastUpdateTime]);
391
423
  const enqueue = useCallback(async () => {
392
424
  if (!custom || !docId || !selectedPreset) return;
393
425
  try {
@@ -498,6 +530,7 @@ var VideoField = (props) => {
498
530
  }, [custom, fetchDocument, pollingJobId, sleep]);
499
531
  const preset = selectedPreset ? presets[selectedPreset] : void 0;
500
532
  const cropEnabled = Boolean(preset?.enableCrop);
533
+ const activePresetLabel = expectedPreset ? presets[expectedPreset]?.label ?? expectedPreset : null;
501
534
  useEffect(() => {
502
535
  if (!cropEnabled) {
503
536
  setCropSelection(DEFAULT_CROP);
@@ -505,17 +538,14 @@ var VideoField = (props) => {
505
538
  setZoom(1);
506
539
  }
507
540
  }, [cropEnabled]);
508
- const handleCropComplete = useCallback(
509
- (area) => {
510
- setCropSelection({
511
- width: area.width / 100,
512
- height: area.height / 100,
513
- x: area.x / 100,
514
- y: area.y / 100
515
- });
516
- },
517
- []
518
- );
541
+ const handleCropComplete = useCallback((area) => {
542
+ setCropSelection({
543
+ width: area.width / 100,
544
+ height: area.height / 100,
545
+ x: area.x / 100,
546
+ y: area.y / 100
547
+ });
548
+ }, []);
519
549
  const handleTogglePreview = useCallback((key) => {
520
550
  setPreviewKey((current) => current === key ? null : key);
521
551
  }, []);
@@ -543,8 +573,8 @@ var VideoField = (props) => {
543
573
  documentId: docId,
544
574
  preset: preset2
545
575
  });
546
- const updatedDoc = payload?.doc;
547
- if (updatedDoc && typeof updatedDoc === "object") {
576
+ const updatedDoc = extractDocument(payload);
577
+ if (updatedDoc) {
548
578
  setDocData(updatedDoc);
549
579
  const docVariants = Array.isArray(updatedDoc?.variants) ? updatedDoc.variants : [];
550
580
  setVariants(docVariants);
@@ -596,8 +626,8 @@ var VideoField = (props) => {
596
626
  variantId: readVariantId(variant),
597
627
  variantIndex: index
598
628
  });
599
- const updatedDoc = payload?.doc;
600
- if (updatedDoc && typeof updatedDoc === "object") {
629
+ const updatedDoc = extractDocument(payload);
630
+ if (updatedDoc) {
601
631
  setDocData(updatedDoc);
602
632
  const docVariants = Array.isArray(updatedDoc?.variants) ? updatedDoc.variants : [];
603
633
  setVariants(docVariants);
@@ -626,6 +656,19 @@ var VideoField = (props) => {
626
656
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4 rounded-xl border border-slate-200 bg-white/60 p-4 shadow-sm", children: [
627
657
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
628
658
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-semibold text-slate-700", children: field.label ?? "Video processor" }),
659
+ jobStatus && isActiveJobState(jobStatus.state) ? /* @__PURE__ */ jsxRuntime.jsxs(
660
+ "div",
661
+ {
662
+ className: "rounded-lg border border-sky-200 bg-sky-50 px-3 py-2 text-xs text-sky-800",
663
+ role: "status",
664
+ children: [
665
+ "Konverterar film, vanta ...",
666
+ " ",
667
+ activePresetLabel ? `(${activePresetLabel}) ` : "",
668
+ formatProgress(jobStatus.progress)
669
+ ]
670
+ }
671
+ ) : null,
629
672
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [
630
673
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col text-xs font-medium text-slate-600", children: [
631
674
  "Preset",
@@ -675,7 +718,18 @@ var VideoField = (props) => {
675
718
  video: docData.url,
676
719
  crop: cropState,
677
720
  zoom,
678
- aspect: void 0,
721
+ rotation: 0,
722
+ aspect: 4 / 3,
723
+ minZoom: 1,
724
+ maxZoom: 3,
725
+ cropShape: "rect",
726
+ zoomSpeed: 1,
727
+ restrictPosition: true,
728
+ mediaProps: {},
729
+ cropperProps: {},
730
+ style: {},
731
+ classes: {},
732
+ keyboardStep: 1,
679
733
  onCropChange: setCropState,
680
734
  onZoomChange: setZoom,
681
735
  onCropComplete: handleCropComplete,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/admin/VideoField.tsx"],"names":["React","useDocumentInfo","preset","jsxs","jsx"],"mappings":"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","file":"VideoField.cjs","sourcesContent":["\"use client\";\n\nimport React, { type FC } from \"react\";\nimport { useDocumentInfo } from \"@payloadcms/ui\";\n\nimport type { VariantRecord, VideoVariantFieldConfig } from \"../types\";\n\nif (typeof document !== \"undefined\") {\n void import(\"./styles.css\");\n}\n\ntype BridgeArgs = {\n mediaId: string;\n preset: string;\n crop?: Record<string, unknown>;\n};\n\ntype BridgeResult = {\n jobId: string;\n};\n\ntype RemoveVariantArgs = {\n mediaId: string;\n preset?: string;\n variantId?: string;\n variantIndex?: number;\n collection?: string;\n};\n\ntype ReplaceOriginalArgs = {\n mediaId: string;\n preset?: string;\n collection?: string;\n};\n\ntype BridgeConfig = {\n presets: string[];\n enqueueTranscode: (args: BridgeArgs) => Promise<BridgeResult>;\n removeVariant: (args: RemoveVariantArgs) => Promise<void>;\n replaceOriginal: (args: ReplaceOriginalArgs) => Promise<void>;\n};\n\ndeclare global {\n interface Window {\n __PAYLOAD_VIDEO_PLUGIN__?: BridgeConfig;\n }\n}\n\ntype JobStatus = {\n id: string | number;\n state: string;\n progress?: number;\n};\n\ntype FieldProps = {\n field: {\n label?: string;\n custom?: VideoVariantFieldConfig;\n };\n} & Partial<VideoVariantFieldConfig>;\n\nconst isVideoVariantFieldConfig = (\n value: unknown,\n): value is VideoVariantFieldConfig => {\n if (!value || typeof value !== \"object\") return false;\n const candidate = value as Record<string, unknown>;\n return (\n typeof candidate.enqueuePath === \"string\" &&\n typeof candidate.statusPath === \"string\" &&\n typeof candidate.replaceOriginalPath === \"string\" &&\n typeof candidate.removeVariantPath === \"string\" &&\n typeof candidate.collectionSlug === \"string\" &&\n typeof candidate.queueName === \"string\" &&\n Boolean(candidate.presets) &&\n typeof candidate.presets === \"object\"\n );\n};\n\nconst DEFAULT_CROP = {\n x: 0,\n y: 0,\n width: 1,\n height: 1,\n};\n\nconst resolveApiBase = (enqueuePath: string): string =>\n enqueuePath.replace(/\\/video-queue\\/enqueue$/, \"\");\n\nconst formatProgress = (value?: number): string => {\n if (typeof value !== \"number\") return \"0%\";\n return `${Math.round(value)}%`;\n};\n\nconst readVariantPreset = (variant: VariantRecord | null | undefined) => {\n if (!variant || typeof variant !== \"object\") return undefined;\n if (typeof variant.preset === \"string\" && variant.preset.trim().length > 0) {\n return variant.preset.trim();\n }\n return undefined;\n};\n\nconst readVariantId = (variant: VariantRecord | null | undefined) => {\n const rawId = (variant as { id?: unknown })?.id;\n if (typeof rawId === \"string\" && rawId.trim().length > 0) {\n return rawId.trim();\n }\n return undefined;\n};\n\nconst resolveVariantIdentifier = (\n variant: VariantRecord,\n fallback: string,\n): string => {\n return (\n readVariantId(variant) ??\n readVariantPreset(variant) ??\n fallback ??\n \"variant\"\n );\n};\n\nconst formatBytes = (value?: number): string => {\n if (!value || Number.isNaN(value)) return \"-\";\n const units = [\"B\", \"KB\", \"MB\", \"GB\"];\n let size = value;\n let unitIndex = 0;\n while (size >= 1024 && unitIndex < units.length - 1) {\n size /= 1024;\n unitIndex += 1;\n }\n return `${size.toFixed(1)} ${units[unitIndex]}`;\n};\n\nconst formatSeconds = (value?: number): string => {\n if (!value || Number.isNaN(value)) return \"-\";\n if (value < 60) {\n return `${value.toFixed(1)} s`;\n }\n const minutes = Math.floor(value / 60);\n const seconds = Math.round(value % 60);\n return `${minutes} min ${seconds}s`;\n};\n\nconst VideoField: FC<FieldProps> = (props) => {\n const { useEffect, useMemo, useState, useCallback, useRef } = React;\n const { field } = props;\n const { id } = useDocumentInfo();\n const custom =\n field.custom ?? (isVideoVariantFieldConfig(props) ? props : undefined);\n const presets = custom?.presets ?? {};\n const apiBase = useMemo(\n () => (custom ? resolveApiBase(custom.enqueuePath) : \"/api\"),\n [custom],\n );\n const presetNames = useMemo(() => Object.keys(presets), [presets]);\n const docId = useMemo(() => {\n if (typeof id === \"undefined\" || id === null) return null;\n const value = String(id);\n if (!value || value === \"create\") return null;\n return value;\n }, [id]);\n\n // Lazy load react-easy-crop to avoid SSR issues\n const [EasyCrop, setEasyCrop] = useState<FC<Record<string, unknown>> | null>(\n null,\n );\n\n useEffect(() => {\n if (typeof window !== \"undefined\" && !EasyCrop) {\n import(\"react-easy-crop\").then((module) => {\n setEasyCrop(() => module.default as any);\n });\n }\n }, [EasyCrop]);\n\n const [selectedPreset, setSelectedPreset] = useState<string | undefined>(\n presetNames[0],\n );\n const [docData, setDocData] = useState<any>(null);\n const [loadingDoc, setLoadingDoc] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [message, setMessage] = useState<{\n type: \"success\" | \"error\" | \"info\";\n text: string;\n } | null>(null);\n const [jobStatus, setJobStatus] = useState<JobStatus | null>(null);\n const [pollingJobId, setPollingJobId] = useState<string | null>(null);\n const [expectedPreset, setExpectedPreset] = useState<string | null>(null);\n const [variants, setVariants] = useState<VariantRecord[]>([]);\n const [previewKey, setPreviewKey] = useState<string | null>(null);\n const [replaceLoading, setReplaceLoading] = useState<string | null>(null);\n const [deleteLoading, setDeleteLoading] = useState<string | null>(null);\n const [cropState, setCropState] = useState({ x: 0, y: 0 });\n const [zoom, setZoom] = useState(1);\n const [cropSelection, setCropSelection] = useState(DEFAULT_CROP);\n const expectedPresetRef = useRef<string | null>(null);\n const sleep = useCallback(\n (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms)),\n [],\n );\n\n useEffect(() => {\n expectedPresetRef.current = expectedPreset;\n }, [expectedPreset]);\n\n const messageClassName =\n message?.type === \"error\"\n ? \"bg-rose-50 text-rose-700\"\n : message?.type === \"info\"\n ? \"bg-slate-50 text-slate-700\"\n : \"bg-emerald-50 text-emerald-700\";\n\n const sendEnqueueRequest = useCallback(\n async ({\n documentId,\n presetName,\n crop,\n }: {\n documentId: string;\n presetName: string;\n crop?: Record<string, unknown>;\n }): Promise<JobStatus> => {\n if (!custom) {\n throw new Error(\"Video plugin is not configured.\");\n }\n\n const response = await fetch(custom.enqueuePath, {\n method: \"POST\",\n credentials: \"include\",\n cache: \"no-store\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n collection: custom.collectionSlug,\n id: documentId,\n preset: presetName,\n crop,\n }),\n });\n\n if (!response.ok) {\n const payload = await response.json().catch(() => ({}));\n throw new Error(\n payload?.error ?? `Request failed (${response.status})`,\n );\n }\n\n return (await response.json()) as JobStatus;\n },\n [custom],\n );\n\n const sendRemoveVariantRequest = useCallback(\n async ({\n documentId,\n preset,\n variantId,\n variantIndex,\n }: {\n documentId: string;\n preset?: string;\n variantId?: string;\n variantIndex?: number;\n }) => {\n if (!custom) {\n throw new Error(\"Video plugin is not configured.\");\n }\n\n const response = await fetch(custom.removeVariantPath, {\n method: \"POST\",\n credentials: \"include\",\n cache: \"no-store\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n collection: custom.collectionSlug,\n id: documentId,\n preset,\n variantId,\n variantIndex,\n }),\n });\n\n if (!response.ok) {\n const payload = await response.json().catch(() => ({}));\n throw new Error(\n payload?.error ?? `Request failed (${response.status})`,\n );\n }\n\n return (await response.json()) as { doc?: unknown };\n },\n [custom],\n );\n\n const sendReplaceOriginalRequest = useCallback(\n async ({ documentId, preset }: { documentId: string; preset?: string }) => {\n if (!custom) {\n throw new Error(\"Video plugin is not configured.\");\n }\n\n const response = await fetch(custom.replaceOriginalPath, {\n method: \"POST\",\n credentials: \"include\",\n cache: \"no-store\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n collection: custom.collectionSlug,\n id: documentId,\n preset,\n }),\n });\n\n if (!response.ok) {\n const payload = await response.json().catch(() => ({}));\n throw new Error(\n payload?.error ?? `Request failed (${response.status})`,\n );\n }\n\n return (await response.json()) as { doc?: unknown };\n },\n [custom],\n );\n\n const bridgeEnqueue = useCallback(\n async ({ mediaId, preset, crop }: BridgeArgs): Promise<BridgeResult> => {\n if (!mediaId) {\n throw new Error(\"A media id is required to enqueue transcoding.\");\n }\n\n if (!preset) {\n throw new Error(\"A preset name is required to enqueue transcoding.\");\n }\n\n const job = await sendEnqueueRequest({\n documentId: mediaId,\n presetName: preset,\n crop,\n });\n\n const jobId =\n typeof job.id === \"string\" || typeof job.id === \"number\"\n ? String(job.id)\n : \"\";\n\n if (!jobId) {\n throw new Error(\"Unable to determine job id returned by the server.\");\n }\n\n return { jobId };\n },\n [sendEnqueueRequest],\n );\n\n const bridgeRemoveVariant = useCallback(\n async ({\n mediaId,\n preset,\n variantId,\n variantIndex,\n }: RemoveVariantArgs): Promise<void> => {\n if (!mediaId) {\n throw new Error(\"A media id is required to remove a variant.\");\n }\n\n const payload = await sendRemoveVariantRequest({\n documentId: mediaId,\n preset,\n variantId,\n variantIndex,\n });\n\n if (docId === mediaId) {\n const nextDoc = (payload as any)?.doc;\n if (nextDoc && typeof nextDoc === \"object\") {\n setDocData(nextDoc);\n const docVariants = Array.isArray(nextDoc?.variants)\n ? (nextDoc.variants as VariantRecord[])\n : [];\n setVariants(docVariants);\n } else {\n setVariants((current) =>\n current.filter((variant, index) => {\n if (typeof variantIndex === \"number\" && variantIndex === index) {\n return false;\n }\n if (variantId && readVariantId(variant) === variantId) {\n return false;\n }\n if (preset && readVariantPreset(variant) === preset) {\n return false;\n }\n return true;\n }),\n );\n }\n }\n\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new CustomEvent(\"payload-video-plugin:change\"));\n }\n },\n [docId, sendRemoveVariantRequest],\n );\n\n const bridgeReplaceOriginal = useCallback(\n async ({ mediaId, preset }: ReplaceOriginalArgs) => {\n if (!mediaId) {\n throw new Error(\"A media id is required to replace the original.\");\n }\n\n const payload = await sendReplaceOriginalRequest({\n documentId: mediaId,\n preset,\n });\n\n if (docId === mediaId) {\n const nextDoc = (payload as any)?.doc;\n if (nextDoc && typeof nextDoc === \"object\") {\n setDocData(nextDoc);\n const docVariants = Array.isArray(nextDoc?.variants)\n ? (nextDoc.variants as VariantRecord[])\n : [];\n setVariants(docVariants);\n }\n }\n\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new CustomEvent(\"payload-video-plugin:change\"));\n }\n },\n [docId, sendReplaceOriginalRequest],\n );\n useEffect(() => {\n if (typeof window === \"undefined\" || !custom) {\n return;\n }\n\n const bridge: BridgeConfig = {\n presets: presetNames,\n enqueueTranscode: async (args) => {\n const cropArg = args.crop;\n const presetConfig = presets[args.preset];\n const allowCrop = Boolean(presetConfig?.enableCrop);\n return bridgeEnqueue({\n mediaId: args.mediaId,\n preset: args.preset,\n crop: allowCrop ? cropArg : undefined,\n });\n },\n removeVariant: async (args) =>\n bridgeRemoveVariant({\n mediaId: args.mediaId,\n preset: args.preset,\n variantId: args.variantId,\n variantIndex: args.variantIndex,\n }),\n replaceOriginal: async (args) =>\n bridgeReplaceOriginal({\n mediaId: args.mediaId,\n preset: args.preset,\n }),\n };\n\n window.__PAYLOAD_VIDEO_PLUGIN__ = bridge;\n window.dispatchEvent(new CustomEvent(\"payload-video-plugin:change\"));\n\n return () => {\n if (\n window.__PAYLOAD_VIDEO_PLUGIN__?.enqueueTranscode ===\n bridge.enqueueTranscode\n ) {\n delete window.__PAYLOAD_VIDEO_PLUGIN__;\n window.dispatchEvent(new CustomEvent(\"payload-video-plugin:change\"));\n }\n };\n }, [\n bridgeEnqueue,\n bridgeRemoveVariant,\n bridgeReplaceOriginal,\n custom,\n presetNames,\n presets,\n ]);\n\n useEffect(() => {\n if (presetNames.length > 0 && !selectedPreset) {\n setSelectedPreset(presetNames[0]);\n }\n }, [presetNames, selectedPreset]);\n\n const fetchDocument = useCallback(async () => {\n if (!docId || !custom) {\n setDocData(null);\n setVariants([]);\n return null;\n }\n\n try {\n setLoadingDoc(true);\n setError(null);\n\n const response = await fetch(\n `${apiBase}/${custom.collectionSlug}/${docId}?t=${Date.now()}`,\n {\n credentials: \"include\",\n cache: \"no-store\",\n },\n );\n if (!response.ok) {\n throw new Error(`Failed to load document (${response.status})`);\n }\n\n const payload = await response.json();\n const nextDoc = (payload as any).doc ?? payload;\n setDocData(nextDoc);\n\n const docVariants = Array.isArray(nextDoc?.variants)\n ? (nextDoc.variants as VariantRecord[])\n : [];\n setVariants(docVariants);\n\n return { doc: nextDoc as any, variants: docVariants };\n } catch (fetchError) {\n setError(\n fetchError instanceof Error\n ? fetchError.message\n : \"Failed to load document data.\",\n );\n return null;\n } finally {\n setLoadingDoc(false);\n }\n }, [apiBase, custom, docId]);\n\n useEffect(() => {\n void fetchDocument();\n }, [fetchDocument, jobStatus?.state]);\n\n const enqueue = useCallback(async () => {\n if (!custom || !docId || !selectedPreset) return;\n try {\n setError(null);\n setMessage(null);\n setExpectedPreset(selectedPreset);\n const allowCrop = Boolean(presets[selectedPreset]?.enableCrop);\n const data = await sendEnqueueRequest({\n documentId: docId,\n presetName: selectedPreset,\n crop: allowCrop ? cropSelection : undefined,\n });\n setJobStatus(data);\n setPollingJobId(String(data.id));\n } catch (enqueueError) {\n setError(\n enqueueError instanceof Error\n ? enqueueError.message\n : \"Failed to enqueue job.\",\n );\n }\n }, [\n custom,\n cropSelection,\n docId,\n presets,\n selectedPreset,\n sendEnqueueRequest,\n ]);\n\n useEffect(() => {\n if (!pollingJobId || !custom) return;\n let active = true;\n\n const refreshAfterCompletion = async (jobId: string) => {\n const presetToWaitFor = expectedPresetRef.current;\n if (!presetToWaitFor) {\n await fetchDocument();\n return;\n }\n\n const maxAttempts = 5;\n for (let attempt = 0; attempt < maxAttempts && active; attempt += 1) {\n const result = await fetchDocument();\n const hasVariant = Boolean(\n result?.variants?.some(\n (variant) => readVariantPreset(variant) === presetToWaitFor,\n ),\n );\n if (hasVariant) {\n setExpectedPreset(null);\n setJobStatus({ id: jobId, state: \"completed\", progress: 100 });\n setMessage({\n type: \"success\",\n text: `Variant \\\"${presetToWaitFor}\\\" saved.`,\n });\n return;\n }\n await sleep(1000);\n }\n\n if (active) {\n setMessage({\n type: \"info\",\n text: `Job ${jobId} finished, but the new variant isn’t visible yet. Try refreshing the page.`,\n });\n }\n };\n\n const interval = window.setInterval(async () => {\n try {\n const response = await fetch(\n `${custom.statusPath}/${pollingJobId}?t=${Date.now()}`,\n {\n credentials: \"include\",\n cache: \"no-store\",\n },\n );\n if (!response.ok) {\n if (response.status === 404) {\n if (active) {\n setJobStatus({ id: pollingJobId, state: \"unknown\" });\n setPollingJobId(null);\n setMessage({\n type: \"info\",\n text: `Job ${pollingJobId} status is no longer available. Refreshing variants…`,\n });\n void refreshAfterCompletion(pollingJobId);\n }\n return;\n }\n throw new Error(`Status request failed (${response.status})`);\n }\n const payload = (await response.json()) as JobStatus;\n if (active) {\n setJobStatus(payload);\n if (payload.state === \"completed\" || payload.state === \"failed\") {\n setPollingJobId(null);\n void refreshAfterCompletion(String(payload.id));\n }\n }\n } catch (statusError) {\n if (active) {\n setPollingJobId(null);\n setError(\n statusError instanceof Error\n ? statusError.message\n : \"Status polling failed.\",\n );\n }\n }\n }, 1500);\n\n return () => {\n active = false;\n window.clearInterval(interval);\n };\n }, [custom, fetchDocument, pollingJobId, sleep]);\n\n const preset = selectedPreset ? presets[selectedPreset] : undefined;\n const cropEnabled = Boolean(preset?.enableCrop);\n\n useEffect(() => {\n if (!cropEnabled) {\n setCropSelection(DEFAULT_CROP);\n setCropState({ x: 0, y: 0 });\n setZoom(1);\n }\n }, [cropEnabled]);\n\n const handleCropComplete = useCallback(\n (area: { width: number; height: number; x: number; y: number }) => {\n setCropSelection({\n width: area.width / 100,\n height: area.height / 100,\n x: area.x / 100,\n y: area.y / 100,\n });\n },\n [],\n );\n\n const handleTogglePreview = useCallback((key: string) => {\n setPreviewKey((current) => (current === key ? null : key));\n }, []);\n\n const handleReplaceOriginalVariant = useCallback(\n async (variant: VariantRecord) => {\n if (!docId) {\n setError(\"Document id is missing; save before replacing the original.\");\n return;\n }\n\n const preset = readVariantPreset(variant);\n const identifier = resolveVariantIdentifier(variant, preset ?? \"variant\");\n\n if (typeof window !== \"undefined\") {\n const confirmation = window.confirm(\n `Replace the original file with variant \"${identifier}\"?`,\n );\n if (!confirmation) {\n return;\n }\n }\n\n setError(null);\n setMessage(null);\n setReplaceLoading(identifier);\n\n try {\n const payload = await sendReplaceOriginalRequest({\n documentId: docId,\n preset,\n });\n const updatedDoc = (payload as any)?.doc;\n if (updatedDoc && typeof updatedDoc === \"object\") {\n setDocData(updatedDoc);\n const docVariants = Array.isArray(updatedDoc?.variants)\n ? (updatedDoc.variants as VariantRecord[])\n : [];\n setVariants(docVariants);\n } else {\n setVariants((current) =>\n current.filter(\n (candidate) =>\n readVariantPreset(candidate) !== readVariantPreset(variant),\n ),\n );\n }\n setPreviewKey((current) => (current === identifier ? null : current));\n setMessage({ type: \"success\", text: \"Original video replaced.\" });\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new CustomEvent(\"payload-video-plugin:change\"));\n }\n } catch (replaceError) {\n setError(\n replaceError instanceof Error\n ? replaceError.message\n : \"Failed to replace the original video.\",\n );\n } finally {\n setReplaceLoading(null);\n }\n },\n [docId, sendReplaceOriginalRequest],\n );\n\n const handleRemoveVariant = useCallback(\n async (variant: VariantRecord, index: number) => {\n if (!docId) {\n setError(\"Document id is missing; save before removing variants.\");\n return;\n }\n\n const fallbackIdentifier = `variant-${index + 1}`;\n const identifier = resolveVariantIdentifier(variant, fallbackIdentifier);\n\n if (typeof window !== \"undefined\") {\n const confirmation = window.confirm(\n `Remove variant \"${identifier}\"? This cannot be undone.`,\n );\n if (!confirmation) {\n return;\n }\n }\n\n setError(null);\n setMessage(null);\n setDeleteLoading(identifier);\n\n try {\n const payload = await sendRemoveVariantRequest({\n documentId: docId,\n preset: readVariantPreset(variant),\n variantId: readVariantId(variant),\n variantIndex: index,\n });\n const updatedDoc = (payload as any)?.doc;\n if (updatedDoc && typeof updatedDoc === \"object\") {\n setDocData(updatedDoc);\n const docVariants = Array.isArray(updatedDoc?.variants)\n ? (updatedDoc.variants as VariantRecord[])\n : [];\n setVariants(docVariants);\n } else {\n setVariants((current) =>\n current.filter(\n (_candidate, candidateIndex) => candidateIndex !== index,\n ),\n );\n }\n setPreviewKey((current) => (current === identifier ? null : current));\n setMessage({ type: \"success\", text: \"Variant removed.\" });\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new CustomEvent(\"payload-video-plugin:change\"));\n }\n } catch (removeError) {\n setError(\n removeError instanceof Error\n ? removeError.message\n : \"Failed to remove variant.\",\n );\n } finally {\n setDeleteLoading(null);\n }\n },\n [docId, sendRemoveVariantRequest],\n );\n\n return (\n <div className=\"flex flex-col gap-4 rounded-xl border border-slate-200 bg-white/60 p-4 shadow-sm\">\n <div className=\"flex flex-col gap-2\">\n <span className=\"text-sm font-semibold text-slate-700\">\n {field.label ?? \"Video processor\"}\n </span>\n <div className=\"flex flex-wrap items-center gap-3\">\n <label className=\"flex flex-col text-xs font-medium text-slate-600\">\n Preset\n <select\n className=\"mt-1 w-48 rounded-lg border border-slate-300 bg-white px-2 py-1 text-sm focus:border-slate-500 focus:outline-none\"\n value={selectedPreset ?? \"\"}\n onChange={(event) => setSelectedPreset(event.target.value)}\n >\n {presetNames.map((name) => (\n <option key={name} value={name}>\n {presets[name]?.label ?? name}\n </option>\n ))}\n </select>\n </label>\n <button\n className=\"rounded-lg bg-slate-900 px-4 py-2 text-sm font-semibold disabled:cursor-not-allowed disabled:bg-slate-400\"\n type=\"button\"\n disabled={!docId || !selectedPreset}\n onClick={enqueue}\n >\n Enqueue variant\n </button>\n {jobStatus ? (\n <span className=\"text-xs text-slate-600\">\n Job {jobStatus.id}: {jobStatus.state} ·{\" \"}\n {formatProgress(jobStatus.progress)}\n </span>\n ) : null}\n {custom?.queueName ? (\n <span className=\"text-xs text-slate-400\">\n Queue: {custom.queueName}\n </span>\n ) : null}\n </div>\n {!docId ? (\n <p className=\"rounded-lg bg-amber-50 px-3 py-2 text-xs text-amber-700\">\n Save the document before enqueuing video variants.\n </p>\n ) : null}\n {error ? (\n <p className=\"rounded-lg bg-rose-50 px-3 py-2 text-xs text-rose-700\">\n {error}\n </p>\n ) : null}\n {message ? (\n <p className={`rounded-lg px-3 py-2 text-xs ${messageClassName}`}>\n {message.text}\n </p>\n ) : null}\n </div>\n\n {cropEnabled && docData?.url ? (\n <div className=\"flex flex-col gap-3\">\n <span className=\"text-xs font-medium uppercase tracking-wide text-slate-500\">\n Crop\n </span>\n <div className=\"video-crop-wrapper\">\n {EasyCrop ? (\n <EasyCrop\n video={docData.url}\n crop={cropState}\n zoom={zoom}\n aspect={undefined}\n onCropChange={setCropState}\n onZoomChange={setZoom}\n onCropComplete={handleCropComplete}\n objectFit=\"contain\"\n showGrid\n />\n ) : (\n <div>Loading cropper...</div>\n )}\n </div>\n <label className=\"flex items-center gap-2 text-xs text-slate-600\">\n Zoom\n <input\n type=\"range\"\n min={1}\n max={3}\n step={0.1}\n value={zoom}\n onChange={(event) => setZoom(Number(event.target.value))}\n className=\"w-48\"\n />\n </label>\n </div>\n ) : null}\n\n <div className=\"flex flex-col gap-2 text-xs text-slate-600\">\n <span className=\"font-semibold uppercase tracking-wide text-slate-500\">\n Variants\n </span>\n {loadingDoc ? (\n <span className=\"text-xs text-slate-500\">\n Loading document metadata…\n </span>\n ) : null}\n {variants.length === 0 ? (\n <p className=\"rounded-lg bg-slate-100 px-3 py-2 text-xs text-slate-600\">\n No variants available yet. Enqueue a preset to generate a new\n version of the video.\n </p>\n ) : (\n <div className=\"flex flex-col gap-3\">\n {variants.map((variant, index) => {\n const presetName =\n readVariantPreset(variant) ?? `Variant ${index + 1}`;\n const identifier = resolveVariantIdentifier(\n variant,\n `variant-${index + 1}`,\n );\n const url =\n typeof variant.url === \"string\" ? variant.url : undefined;\n const previewing = previewKey === identifier;\n const replacing = replaceLoading === identifier;\n const deleting = deleteLoading === identifier;\n\n return (\n <div\n key={`${identifier}-${index}`}\n className=\"flex flex-col gap-2 rounded-lg border border-slate-200 bg-white px-3 py-2\"\n >\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-semibold text-slate-700\">\n {presetName}\n </span>\n <span className=\"text-xs text-slate-500\">\n {formatBytes(variant.size)} ·{\" \"}\n {formatSeconds(variant.duration)}\n </span>\n </div>\n <div className=\"flex items-center gap-2\">\n {url ? (\n <button\n className=\"rounded-lg border border-slate-300 px-3 py-1 text-xs font-medium text-slate-700 transition hover:border-slate-400 hover:text-slate-900 disabled:cursor-not-allowed disabled:opacity-60\"\n type=\"button\"\n onClick={() => handleTogglePreview(identifier)}\n disabled={replacing || deleting}\n >\n {previewing ? \"Close preview\" : \"Preview\"}\n </button>\n ) : null}\n <button\n className=\"rounded-lg bg-slate-900 px-3 py-1 text-xs font-semibold disabled:cursor-not-allowed disabled:bg-slate-400\"\n type=\"button\"\n onClick={() =>\n void handleReplaceOriginalVariant(variant)\n }\n disabled={replacing || deleting}\n >\n {replacing ? \"Replacing…\" : \"Replace original\"}\n </button>\n <button\n className=\"rounded-lg border border-rose-300 px-3 py-1 text-xs font-semibold text-rose-700 transition hover:border-rose-400 hover:text-rose-900 disabled:cursor-not-allowed disabled:opacity-60\"\n type=\"button\"\n onClick={() => void handleRemoveVariant(variant, index)}\n disabled={deleting || replacing}\n >\n {deleting ? \"Deleting…\" : \"Delete\"}\n </button>\n </div>\n </div>\n {previewing && url ? (\n <div className=\"overflow-hidden rounded-lg border border-slate-200\">\n <video\n className=\"w-full bg-black\"\n controls\n preload=\"metadata\"\n src={url}\n />\n </div>\n ) : null}\n </div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default VideoField;\n"]}
1
+ {"version":3,"sources":["../../src/admin/VideoField.tsx"],"names":["React","useDocumentInfo","preset","jsxs","jsx"],"mappings":"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","file":"VideoField.cjs","sourcesContent":["\"use client\";\n\nimport React, { type FC } from \"react\";\nimport { useDocumentInfo } from \"@payloadcms/ui\";\nimport type { Area, CropperProps } from \"react-easy-crop\";\n\nimport type {\n VariantRecord,\n VideoProcessingStatus,\n VideoVariantFieldConfig,\n} from \"../types\";\n\nif (typeof document !== \"undefined\") {\n void import(\"./styles.css\");\n}\n\ntype BridgeArgs = {\n mediaId: string;\n preset: string;\n crop?: Record<string, unknown>;\n};\n\ntype BridgeResult = {\n jobId: string;\n};\n\ntype RemoveVariantArgs = {\n mediaId: string;\n preset?: string;\n variantId?: string;\n variantIndex?: number;\n collection?: string;\n};\n\ntype ReplaceOriginalArgs = {\n mediaId: string;\n preset?: string;\n collection?: string;\n};\n\ntype BridgeConfig = {\n presets: string[];\n enqueueTranscode: (args: BridgeArgs) => Promise<BridgeResult>;\n removeVariant: (args: RemoveVariantArgs) => Promise<void>;\n replaceOriginal: (args: ReplaceOriginalArgs) => Promise<void>;\n};\n\ndeclare global {\n interface Window {\n __PAYLOAD_VIDEO_PLUGIN__?: BridgeConfig;\n }\n}\n\ntype JobStatus = {\n id: string | number;\n state: string;\n progress?: number;\n};\n\ntype FieldProps = {\n field: {\n label?: string;\n custom?: VideoVariantFieldConfig;\n };\n} & Partial<VideoVariantFieldConfig>;\n\ntype VideoDocument = {\n url?: string;\n variants?: VariantRecord[];\n videoProcessingStatus?: VideoProcessingStatus | null;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\n\nconst extractDocument = (payload: unknown): VideoDocument | null => {\n if (!isRecord(payload)) return null;\n const candidate = isRecord(payload.doc) ? payload.doc : payload;\n if (!isRecord(candidate)) return null;\n return candidate as VideoDocument;\n};\n\nconst isVideoVariantFieldConfig = (\n value: unknown,\n): value is VideoVariantFieldConfig => {\n if (!value || typeof value !== \"object\") return false;\n const candidate = value as Record<string, unknown>;\n return (\n typeof candidate.enqueuePath === \"string\" &&\n typeof candidate.statusPath === \"string\" &&\n typeof candidate.replaceOriginalPath === \"string\" &&\n typeof candidate.removeVariantPath === \"string\" &&\n typeof candidate.collectionSlug === \"string\" &&\n typeof candidate.queueName === \"string\" &&\n Boolean(candidate.presets) &&\n typeof candidate.presets === \"object\"\n );\n};\n\nconst DEFAULT_CROP = {\n x: 0,\n y: 0,\n width: 1,\n height: 1,\n};\n\nconst resolveApiBase = (enqueuePath: string): string =>\n enqueuePath.replace(/\\/video-queue\\/enqueue$/, \"\");\n\nconst formatProgress = (value?: number): string => {\n if (typeof value !== \"number\") return \"0%\";\n return `${Math.round(value)}%`;\n};\n\nconst isActiveJobState = (state?: string): boolean =>\n Boolean(state && state !== \"completed\" && state !== \"failed\");\n\nconst readVariantPreset = (variant: VariantRecord | null | undefined) => {\n if (!variant || typeof variant !== \"object\") return undefined;\n if (typeof variant.preset === \"string\" && variant.preset.trim().length > 0) {\n return variant.preset.trim();\n }\n return undefined;\n};\n\nconst readVariantId = (variant: VariantRecord | null | undefined) => {\n const rawId = (variant as { id?: unknown })?.id;\n if (typeof rawId === \"string\" && rawId.trim().length > 0) {\n return rawId.trim();\n }\n return undefined;\n};\n\nconst resolveVariantIdentifier = (\n variant: VariantRecord,\n fallback: string,\n): string => {\n return (\n readVariantId(variant) ??\n readVariantPreset(variant) ??\n fallback ??\n \"variant\"\n );\n};\n\nconst formatBytes = (value?: number): string => {\n if (!value || Number.isNaN(value)) return \"-\";\n const units = [\"B\", \"KB\", \"MB\", \"GB\"];\n let size = value;\n let unitIndex = 0;\n while (size >= 1024 && unitIndex < units.length - 1) {\n size /= 1024;\n unitIndex += 1;\n }\n return `${size.toFixed(1)} ${units[unitIndex]}`;\n};\n\nconst formatSeconds = (value?: number): string => {\n if (!value || Number.isNaN(value)) return \"-\";\n if (value < 60) {\n return `${value.toFixed(1)} s`;\n }\n const minutes = Math.floor(value / 60);\n const seconds = Math.round(value % 60);\n return `${minutes} min ${seconds}s`;\n};\n\nconst VideoField: FC<FieldProps> = (props) => {\n const { useEffect, useMemo, useState, useCallback, useRef } = React;\n const { field } = props;\n const { id, lastUpdateTime } = useDocumentInfo();\n const custom =\n field.custom ?? (isVideoVariantFieldConfig(props) ? props : undefined);\n const presets = custom?.presets ?? {};\n const apiBase = useMemo(\n () => (custom ? resolveApiBase(custom.enqueuePath) : \"/api\"),\n [custom],\n );\n const presetNames = useMemo(() => Object.keys(presets), [presets]);\n const docId = useMemo(() => {\n if (typeof id === \"undefined\" || id === null) return null;\n const value = String(id);\n if (!value || value === \"create\") return null;\n return value;\n }, [id]);\n\n // Lazy load react-easy-crop to avoid SSR issues\n const [EasyCrop, setEasyCrop] =\n useState<React.ComponentType<CropperProps> | null>(null);\n\n useEffect(() => {\n if (typeof window !== \"undefined\" && !EasyCrop) {\n import(\"react-easy-crop\").then((module) => {\n setEasyCrop(() => module.default);\n });\n }\n }, [EasyCrop]);\n\n const [selectedPreset, setSelectedPreset] = useState<string | undefined>(\n presetNames[0],\n );\n const [docData, setDocData] = useState<VideoDocument | null>(null);\n const [loadingDoc, setLoadingDoc] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [message, setMessage] = useState<{\n type: \"success\" | \"error\" | \"info\";\n text: string;\n } | null>(null);\n const [jobStatus, setJobStatus] = useState<JobStatus | null>(null);\n const [pollingJobId, setPollingJobId] = useState<string | null>(null);\n const [expectedPreset, setExpectedPreset] = useState<string | null>(null);\n const [processingStatus, setProcessingStatus] =\n useState<VideoProcessingStatus | null>(null);\n const [variants, setVariants] = useState<VariantRecord[]>([]);\n const [previewKey, setPreviewKey] = useState<string | null>(null);\n const [replaceLoading, setReplaceLoading] = useState<string | null>(null);\n const [deleteLoading, setDeleteLoading] = useState<string | null>(null);\n const [cropState, setCropState] = useState({ x: 0, y: 0 });\n const [zoom, setZoom] = useState(1);\n const [cropSelection, setCropSelection] = useState(DEFAULT_CROP);\n const expectedPresetRef = useRef<string | null>(null);\n const sleep = useCallback(\n (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms)),\n [],\n );\n\n useEffect(() => {\n expectedPresetRef.current = expectedPreset;\n }, [expectedPreset]);\n\n useEffect(() => {\n if (!processingStatus) return;\n const statusJobId = processingStatus.jobId.trim();\n if (!statusJobId) return;\n\n if (!jobStatus) {\n setJobStatus({\n id: statusJobId,\n state: processingStatus.state,\n progress: processingStatus.progress,\n });\n }\n\n if (isActiveJobState(processingStatus.state) && !pollingJobId) {\n setPollingJobId(statusJobId);\n if (!expectedPreset && processingStatus.preset) {\n setExpectedPreset(processingStatus.preset);\n }\n }\n }, [expectedPreset, jobStatus, pollingJobId, processingStatus]);\n\n const messageClassName =\n message?.type === \"error\"\n ? \"bg-rose-50 text-rose-700\"\n : message?.type === \"info\"\n ? \"bg-slate-50 text-slate-700\"\n : \"bg-emerald-50 text-emerald-700\";\n\n const sendEnqueueRequest = useCallback(\n async ({\n documentId,\n presetName,\n crop,\n }: {\n documentId: string;\n presetName: string;\n crop?: Record<string, unknown>;\n }): Promise<JobStatus> => {\n if (!custom) {\n throw new Error(\"Video plugin is not configured.\");\n }\n\n const response = await fetch(custom.enqueuePath, {\n method: \"POST\",\n credentials: \"include\",\n cache: \"no-store\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n collection: custom.collectionSlug,\n id: documentId,\n preset: presetName,\n crop,\n }),\n });\n\n if (!response.ok) {\n const payload = await response.json().catch(() => ({}));\n throw new Error(\n payload?.error ?? `Request failed (${response.status})`,\n );\n }\n\n return (await response.json()) as JobStatus;\n },\n [custom],\n );\n\n const sendRemoveVariantRequest = useCallback(\n async ({\n documentId,\n preset,\n variantId,\n variantIndex,\n }: {\n documentId: string;\n preset?: string;\n variantId?: string;\n variantIndex?: number;\n }) => {\n if (!custom) {\n throw new Error(\"Video plugin is not configured.\");\n }\n\n const response = await fetch(custom.removeVariantPath, {\n method: \"POST\",\n credentials: \"include\",\n cache: \"no-store\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n collection: custom.collectionSlug,\n id: documentId,\n preset,\n variantId,\n variantIndex,\n }),\n });\n\n if (!response.ok) {\n const payload = await response.json().catch(() => ({}));\n throw new Error(\n payload?.error ?? `Request failed (${response.status})`,\n );\n }\n\n return (await response.json()) as { doc?: unknown };\n },\n [custom],\n );\n\n const sendReplaceOriginalRequest = useCallback(\n async ({ documentId, preset }: { documentId: string; preset?: string }) => {\n if (!custom) {\n throw new Error(\"Video plugin is not configured.\");\n }\n\n const response = await fetch(custom.replaceOriginalPath, {\n method: \"POST\",\n credentials: \"include\",\n cache: \"no-store\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n collection: custom.collectionSlug,\n id: documentId,\n preset,\n }),\n });\n\n if (!response.ok) {\n const payload = await response.json().catch(() => ({}));\n throw new Error(\n payload?.error ?? `Request failed (${response.status})`,\n );\n }\n\n return (await response.json()) as { doc?: unknown };\n },\n [custom],\n );\n\n const bridgeEnqueue = useCallback(\n async ({ mediaId, preset, crop }: BridgeArgs): Promise<BridgeResult> => {\n if (!mediaId) {\n throw new Error(\"A media id is required to enqueue transcoding.\");\n }\n\n if (!preset) {\n throw new Error(\"A preset name is required to enqueue transcoding.\");\n }\n\n const job = await sendEnqueueRequest({\n documentId: mediaId,\n presetName: preset,\n crop,\n });\n\n const jobId =\n typeof job.id === \"string\" || typeof job.id === \"number\"\n ? String(job.id)\n : \"\";\n\n if (!jobId) {\n throw new Error(\"Unable to determine job id returned by the server.\");\n }\n\n return { jobId };\n },\n [sendEnqueueRequest],\n );\n\n const bridgeRemoveVariant = useCallback(\n async ({\n mediaId,\n preset,\n variantId,\n variantIndex,\n }: RemoveVariantArgs): Promise<void> => {\n if (!mediaId) {\n throw new Error(\"A media id is required to remove a variant.\");\n }\n\n const payload = await sendRemoveVariantRequest({\n documentId: mediaId,\n preset,\n variantId,\n variantIndex,\n });\n\n if (docId === mediaId) {\n const nextDoc = extractDocument(payload);\n if (nextDoc) {\n setDocData(nextDoc);\n const docVariants = Array.isArray(nextDoc?.variants)\n ? nextDoc.variants\n : [];\n setVariants(docVariants);\n } else {\n setVariants((current) =>\n current.filter((variant, index) => {\n if (typeof variantIndex === \"number\" && variantIndex === index) {\n return false;\n }\n if (variantId && readVariantId(variant) === variantId) {\n return false;\n }\n if (preset && readVariantPreset(variant) === preset) {\n return false;\n }\n return true;\n }),\n );\n }\n }\n\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new CustomEvent(\"payload-video-plugin:change\"));\n }\n },\n [docId, sendRemoveVariantRequest],\n );\n\n const bridgeReplaceOriginal = useCallback(\n async ({ mediaId, preset }: ReplaceOriginalArgs) => {\n if (!mediaId) {\n throw new Error(\"A media id is required to replace the original.\");\n }\n\n const payload = await sendReplaceOriginalRequest({\n documentId: mediaId,\n preset,\n });\n\n if (docId === mediaId) {\n const nextDoc = extractDocument(payload);\n if (nextDoc) {\n setDocData(nextDoc);\n const docVariants = Array.isArray(nextDoc?.variants)\n ? nextDoc.variants\n : [];\n setVariants(docVariants);\n }\n }\n\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new CustomEvent(\"payload-video-plugin:change\"));\n }\n },\n [docId, sendReplaceOriginalRequest],\n );\n useEffect(() => {\n if (typeof window === \"undefined\" || !custom) {\n return;\n }\n\n const bridge: BridgeConfig = {\n presets: presetNames,\n enqueueTranscode: async (args) => {\n const cropArg = args.crop;\n const presetConfig = presets[args.preset];\n const allowCrop = Boolean(presetConfig?.enableCrop);\n return bridgeEnqueue({\n mediaId: args.mediaId,\n preset: args.preset,\n crop: allowCrop ? cropArg : undefined,\n });\n },\n removeVariant: async (args) =>\n bridgeRemoveVariant({\n mediaId: args.mediaId,\n preset: args.preset,\n variantId: args.variantId,\n variantIndex: args.variantIndex,\n }),\n replaceOriginal: async (args) =>\n bridgeReplaceOriginal({\n mediaId: args.mediaId,\n preset: args.preset,\n }),\n };\n\n window.__PAYLOAD_VIDEO_PLUGIN__ = bridge;\n window.dispatchEvent(new CustomEvent(\"payload-video-plugin:change\"));\n\n return () => {\n if (\n window.__PAYLOAD_VIDEO_PLUGIN__?.enqueueTranscode ===\n bridge.enqueueTranscode\n ) {\n delete window.__PAYLOAD_VIDEO_PLUGIN__;\n window.dispatchEvent(new CustomEvent(\"payload-video-plugin:change\"));\n }\n };\n }, [\n bridgeEnqueue,\n bridgeRemoveVariant,\n bridgeReplaceOriginal,\n custom,\n presetNames,\n presets,\n ]);\n\n useEffect(() => {\n if (presetNames.length > 0 && !selectedPreset) {\n setSelectedPreset(presetNames[0]);\n }\n }, [presetNames, selectedPreset]);\n\n const fetchDocument = useCallback(async () => {\n if (!docId || !custom) {\n setDocData(null);\n setVariants([]);\n return null;\n }\n\n try {\n setLoadingDoc(true);\n setError(null);\n\n const response = await fetch(\n `${apiBase}/${custom.collectionSlug}/${docId}?t=${Date.now()}`,\n {\n credentials: \"include\",\n cache: \"no-store\",\n },\n );\n if (!response.ok) {\n throw new Error(`Failed to load document (${response.status})`);\n }\n\n const payload = await response.json();\n const nextDoc = extractDocument(payload);\n\n if (!nextDoc) {\n setDocData(null);\n setVariants([]);\n setProcessingStatus(null);\n return null;\n }\n\n setDocData(nextDoc);\n setProcessingStatus(nextDoc.videoProcessingStatus ?? null);\n\n const docVariants = Array.isArray(nextDoc.variants)\n ? nextDoc.variants\n : [];\n setVariants(docVariants);\n\n return { doc: nextDoc, variants: docVariants };\n } catch (fetchError) {\n setError(\n fetchError instanceof Error\n ? fetchError.message\n : \"Failed to load document data.\",\n );\n return null;\n } finally {\n setLoadingDoc(false);\n }\n }, [apiBase, custom, docId]);\n\n useEffect(() => {\n void fetchDocument();\n }, [fetchDocument, jobStatus?.state, lastUpdateTime]);\n\n const enqueue = useCallback(async () => {\n if (!custom || !docId || !selectedPreset) return;\n try {\n setError(null);\n setMessage(null);\n setExpectedPreset(selectedPreset);\n const allowCrop = Boolean(presets[selectedPreset]?.enableCrop);\n const data = await sendEnqueueRequest({\n documentId: docId,\n presetName: selectedPreset,\n crop: allowCrop ? cropSelection : undefined,\n });\n setJobStatus(data);\n setPollingJobId(String(data.id));\n } catch (enqueueError) {\n setError(\n enqueueError instanceof Error\n ? enqueueError.message\n : \"Failed to enqueue job.\",\n );\n }\n }, [\n custom,\n cropSelection,\n docId,\n presets,\n selectedPreset,\n sendEnqueueRequest,\n ]);\n\n useEffect(() => {\n if (!pollingJobId || !custom) return;\n let active = true;\n\n const refreshAfterCompletion = async (jobId: string) => {\n const presetToWaitFor = expectedPresetRef.current;\n if (!presetToWaitFor) {\n await fetchDocument();\n return;\n }\n\n const maxAttempts = 5;\n for (let attempt = 0; attempt < maxAttempts && active; attempt += 1) {\n const result = await fetchDocument();\n const hasVariant = Boolean(\n result?.variants?.some(\n (variant) => readVariantPreset(variant) === presetToWaitFor,\n ),\n );\n if (hasVariant) {\n setExpectedPreset(null);\n setJobStatus({ id: jobId, state: \"completed\", progress: 100 });\n setMessage({\n type: \"success\",\n text: `Variant \\\"${presetToWaitFor}\\\" saved.`,\n });\n return;\n }\n await sleep(1000);\n }\n\n if (active) {\n setMessage({\n type: \"info\",\n text: `Job ${jobId} finished, but the new variant isn’t visible yet. Try refreshing the page.`,\n });\n }\n };\n\n const interval = window.setInterval(async () => {\n try {\n const response = await fetch(\n `${custom.statusPath}/${pollingJobId}?t=${Date.now()}`,\n {\n credentials: \"include\",\n cache: \"no-store\",\n },\n );\n if (!response.ok) {\n if (response.status === 404) {\n if (active) {\n setJobStatus({ id: pollingJobId, state: \"unknown\" });\n setPollingJobId(null);\n setMessage({\n type: \"info\",\n text: `Job ${pollingJobId} status is no longer available. Refreshing variants…`,\n });\n void refreshAfterCompletion(pollingJobId);\n }\n return;\n }\n throw new Error(`Status request failed (${response.status})`);\n }\n const payload = (await response.json()) as JobStatus;\n if (active) {\n setJobStatus(payload);\n if (payload.state === \"completed\" || payload.state === \"failed\") {\n setPollingJobId(null);\n void refreshAfterCompletion(String(payload.id));\n }\n }\n } catch (statusError) {\n if (active) {\n setPollingJobId(null);\n setError(\n statusError instanceof Error\n ? statusError.message\n : \"Status polling failed.\",\n );\n }\n }\n }, 1500);\n\n return () => {\n active = false;\n window.clearInterval(interval);\n };\n }, [custom, fetchDocument, pollingJobId, sleep]);\n\n const preset = selectedPreset ? presets[selectedPreset] : undefined;\n const cropEnabled = Boolean(preset?.enableCrop);\n const activePresetLabel = expectedPreset\n ? (presets[expectedPreset]?.label ?? expectedPreset)\n : null;\n\n useEffect(() => {\n if (!cropEnabled) {\n setCropSelection(DEFAULT_CROP);\n setCropState({ x: 0, y: 0 });\n setZoom(1);\n }\n }, [cropEnabled]);\n\n const handleCropComplete = useCallback((area: Area) => {\n setCropSelection({\n width: area.width / 100,\n height: area.height / 100,\n x: area.x / 100,\n y: area.y / 100,\n });\n }, []);\n\n const handleTogglePreview = useCallback((key: string) => {\n setPreviewKey((current) => (current === key ? null : key));\n }, []);\n\n const handleReplaceOriginalVariant = useCallback(\n async (variant: VariantRecord) => {\n if (!docId) {\n setError(\"Document id is missing; save before replacing the original.\");\n return;\n }\n\n const preset = readVariantPreset(variant);\n const identifier = resolveVariantIdentifier(variant, preset ?? \"variant\");\n\n if (typeof window !== \"undefined\") {\n const confirmation = window.confirm(\n `Replace the original file with variant \"${identifier}\"?`,\n );\n if (!confirmation) {\n return;\n }\n }\n\n setError(null);\n setMessage(null);\n setReplaceLoading(identifier);\n\n try {\n const payload = await sendReplaceOriginalRequest({\n documentId: docId,\n preset,\n });\n const updatedDoc = extractDocument(payload);\n if (updatedDoc) {\n setDocData(updatedDoc);\n const docVariants = Array.isArray(updatedDoc?.variants)\n ? updatedDoc.variants\n : [];\n setVariants(docVariants);\n } else {\n setVariants((current) =>\n current.filter(\n (candidate) =>\n readVariantPreset(candidate) !== readVariantPreset(variant),\n ),\n );\n }\n setPreviewKey((current) => (current === identifier ? null : current));\n setMessage({ type: \"success\", text: \"Original video replaced.\" });\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new CustomEvent(\"payload-video-plugin:change\"));\n }\n } catch (replaceError) {\n setError(\n replaceError instanceof Error\n ? replaceError.message\n : \"Failed to replace the original video.\",\n );\n } finally {\n setReplaceLoading(null);\n }\n },\n [docId, sendReplaceOriginalRequest],\n );\n\n const handleRemoveVariant = useCallback(\n async (variant: VariantRecord, index: number) => {\n if (!docId) {\n setError(\"Document id is missing; save before removing variants.\");\n return;\n }\n\n const fallbackIdentifier = `variant-${index + 1}`;\n const identifier = resolveVariantIdentifier(variant, fallbackIdentifier);\n\n if (typeof window !== \"undefined\") {\n const confirmation = window.confirm(\n `Remove variant \"${identifier}\"? This cannot be undone.`,\n );\n if (!confirmation) {\n return;\n }\n }\n\n setError(null);\n setMessage(null);\n setDeleteLoading(identifier);\n\n try {\n const payload = await sendRemoveVariantRequest({\n documentId: docId,\n preset: readVariantPreset(variant),\n variantId: readVariantId(variant),\n variantIndex: index,\n });\n const updatedDoc = extractDocument(payload);\n if (updatedDoc) {\n setDocData(updatedDoc);\n const docVariants = Array.isArray(updatedDoc?.variants)\n ? updatedDoc.variants\n : [];\n setVariants(docVariants);\n } else {\n setVariants((current) =>\n current.filter(\n (_candidate, candidateIndex) => candidateIndex !== index,\n ),\n );\n }\n setPreviewKey((current) => (current === identifier ? null : current));\n setMessage({ type: \"success\", text: \"Variant removed.\" });\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new CustomEvent(\"payload-video-plugin:change\"));\n }\n } catch (removeError) {\n setError(\n removeError instanceof Error\n ? removeError.message\n : \"Failed to remove variant.\",\n );\n } finally {\n setDeleteLoading(null);\n }\n },\n [docId, sendRemoveVariantRequest],\n );\n\n return (\n <div className=\"flex flex-col gap-4 rounded-xl border border-slate-200 bg-white/60 p-4 shadow-sm\">\n <div className=\"flex flex-col gap-2\">\n <span className=\"text-sm font-semibold text-slate-700\">\n {field.label ?? \"Video processor\"}\n </span>\n {jobStatus && isActiveJobState(jobStatus.state) ? (\n <div\n className=\"rounded-lg border border-sky-200 bg-sky-50 px-3 py-2 text-xs text-sky-800\"\n role=\"status\"\n >\n Konverterar film, vanta ...{\" \"}\n {activePresetLabel ? `(${activePresetLabel}) ` : \"\"}\n {formatProgress(jobStatus.progress)}\n </div>\n ) : null}\n <div className=\"flex flex-wrap items-center gap-3\">\n <label className=\"flex flex-col text-xs font-medium text-slate-600\">\n Preset\n <select\n className=\"mt-1 w-48 rounded-lg border border-slate-300 bg-white px-2 py-1 text-sm focus:border-slate-500 focus:outline-none\"\n value={selectedPreset ?? \"\"}\n onChange={(event) => setSelectedPreset(event.target.value)}\n >\n {presetNames.map((name) => (\n <option key={name} value={name}>\n {presets[name]?.label ?? name}\n </option>\n ))}\n </select>\n </label>\n <button\n className=\"rounded-lg bg-slate-900 px-4 py-2 text-sm font-semibold disabled:cursor-not-allowed disabled:bg-slate-400\"\n type=\"button\"\n disabled={!docId || !selectedPreset}\n onClick={enqueue}\n >\n Enqueue variant\n </button>\n {jobStatus ? (\n <span className=\"text-xs text-slate-600\">\n Job {jobStatus.id}: {jobStatus.state} ·{\" \"}\n {formatProgress(jobStatus.progress)}\n </span>\n ) : null}\n {custom?.queueName ? (\n <span className=\"text-xs text-slate-400\">\n Queue: {custom.queueName}\n </span>\n ) : null}\n </div>\n {!docId ? (\n <p className=\"rounded-lg bg-amber-50 px-3 py-2 text-xs text-amber-700\">\n Save the document before enqueuing video variants.\n </p>\n ) : null}\n {error ? (\n <p className=\"rounded-lg bg-rose-50 px-3 py-2 text-xs text-rose-700\">\n {error}\n </p>\n ) : null}\n {message ? (\n <p className={`rounded-lg px-3 py-2 text-xs ${messageClassName}`}>\n {message.text}\n </p>\n ) : null}\n </div>\n\n {cropEnabled && docData?.url ? (\n <div className=\"flex flex-col gap-3\">\n <span className=\"text-xs font-medium uppercase tracking-wide text-slate-500\">\n Crop\n </span>\n <div className=\"video-crop-wrapper\">\n {EasyCrop ? (\n <EasyCrop\n video={docData.url}\n crop={cropState}\n zoom={zoom}\n rotation={0}\n aspect={4 / 3}\n minZoom={1}\n maxZoom={3}\n cropShape=\"rect\"\n zoomSpeed={1}\n restrictPosition\n mediaProps={{}}\n cropperProps={{}}\n style={{}}\n classes={{}}\n keyboardStep={1}\n onCropChange={setCropState}\n onZoomChange={setZoom}\n onCropComplete={handleCropComplete}\n objectFit=\"contain\"\n showGrid\n />\n ) : (\n <div>Loading cropper...</div>\n )}\n </div>\n <label className=\"flex items-center gap-2 text-xs text-slate-600\">\n Zoom\n <input\n type=\"range\"\n min={1}\n max={3}\n step={0.1}\n value={zoom}\n onChange={(event) => setZoom(Number(event.target.value))}\n className=\"w-48\"\n />\n </label>\n </div>\n ) : null}\n\n <div className=\"flex flex-col gap-2 text-xs text-slate-600\">\n <span className=\"font-semibold uppercase tracking-wide text-slate-500\">\n Variants\n </span>\n {loadingDoc ? (\n <span className=\"text-xs text-slate-500\">\n Loading document metadata…\n </span>\n ) : null}\n {variants.length === 0 ? (\n <p className=\"rounded-lg bg-slate-100 px-3 py-2 text-xs text-slate-600\">\n No variants available yet. Enqueue a preset to generate a new\n version of the video.\n </p>\n ) : (\n <div className=\"flex flex-col gap-3\">\n {variants.map((variant, index) => {\n const presetName =\n readVariantPreset(variant) ?? `Variant ${index + 1}`;\n const identifier = resolveVariantIdentifier(\n variant,\n `variant-${index + 1}`,\n );\n const url =\n typeof variant.url === \"string\" ? variant.url : undefined;\n const previewing = previewKey === identifier;\n const replacing = replaceLoading === identifier;\n const deleting = deleteLoading === identifier;\n\n return (\n <div\n key={`${identifier}-${index}`}\n className=\"flex flex-col gap-2 rounded-lg border border-slate-200 bg-white px-3 py-2\"\n >\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-semibold text-slate-700\">\n {presetName}\n </span>\n <span className=\"text-xs text-slate-500\">\n {formatBytes(variant.size)} ·{\" \"}\n {formatSeconds(variant.duration)}\n </span>\n </div>\n <div className=\"flex items-center gap-2\">\n {url ? (\n <button\n className=\"rounded-lg border border-slate-300 px-3 py-1 text-xs font-medium text-slate-700 transition hover:border-slate-400 hover:text-slate-900 disabled:cursor-not-allowed disabled:opacity-60\"\n type=\"button\"\n onClick={() => handleTogglePreview(identifier)}\n disabled={replacing || deleting}\n >\n {previewing ? \"Close preview\" : \"Preview\"}\n </button>\n ) : null}\n <button\n className=\"rounded-lg bg-slate-900 px-3 py-1 text-xs font-semibold disabled:cursor-not-allowed disabled:bg-slate-400\"\n type=\"button\"\n onClick={() =>\n void handleReplaceOriginalVariant(variant)\n }\n disabled={replacing || deleting}\n >\n {replacing ? \"Replacing…\" : \"Replace original\"}\n </button>\n <button\n className=\"rounded-lg border border-rose-300 px-3 py-1 text-xs font-semibold text-rose-700 transition hover:border-rose-400 hover:text-rose-900 disabled:cursor-not-allowed disabled:opacity-60\"\n type=\"button\"\n onClick={() => void handleRemoveVariant(variant, index)}\n disabled={deleting || replacing}\n >\n {deleting ? \"Deleting…\" : \"Delete\"}\n </button>\n </div>\n </div>\n {previewing && url ? (\n <div className=\"overflow-hidden rounded-lg border border-slate-200\">\n <video\n className=\"w-full bg-black\"\n controls\n preload=\"metadata\"\n src={url}\n />\n </div>\n ) : null}\n </div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default VideoField;\n"]}
@@ -1,5 +1,5 @@
1
1
  import { FC } from 'react';
2
- import { f as VideoVariantFieldConfig } from '../types-DJGPSfvi.cjs';
2
+ import { f as VideoVariantFieldConfig } from '../types-B1B4hTX_.cjs';
3
3
  import 'payload';
4
4
 
5
5
  type BridgeArgs = {
@@ -1,5 +1,5 @@
1
1
  import { FC } from 'react';
2
- import { f as VideoVariantFieldConfig } from '../types-DJGPSfvi.js';
2
+ import { f as VideoVariantFieldConfig } from '../types-B1B4hTX_.js';
3
3
  import 'payload';
4
4
 
5
5
  type BridgeArgs = {