@payloadcms/ui 3.53.0-canary.2 → 3.53.0-canary.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/CopyToClipboard/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAA2B,MAAM,OAAO,CAAA;AAK/C,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,KAAK,GAAG;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAuC3C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/CopyToClipboard/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAKvC,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,KAAK,GAAG;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAiC3C,CAAA"}
@@ -1,54 +1,99 @@
1
1
  'use client';
2
2
 
3
+ import { c as _c } from "react/compiler-runtime";
3
4
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
- import React, { useRef, useState } from 'react';
5
+ import React, { useState } from 'react';
5
6
  import { CopyIcon } from '../../icons/Copy/index.js';
6
7
  import { useTranslation } from '../../providers/Translation/index.js';
7
8
  import { Tooltip } from '../Tooltip/index.js';
8
9
  import './index.scss';
9
10
  const baseClass = 'copy-to-clipboard';
10
- export const CopyToClipboard = ({
11
- defaultMessage,
12
- successMessage,
13
- value
14
- }) => {
15
- const ref = useRef(null);
11
+ export const CopyToClipboard = t0 => {
12
+ const $ = _c(19);
13
+ const {
14
+ defaultMessage,
15
+ successMessage,
16
+ value
17
+ } = t0;
16
18
  const [copied, setCopied] = useState(false);
17
19
  const [hovered, setHovered] = useState(false);
18
20
  const {
19
21
  t
20
22
  } = useTranslation();
21
23
  if (value) {
22
- return /*#__PURE__*/_jsxs("button", {
23
- className: baseClass,
24
- onClick: () => {
25
- if (ref && ref.current) {
26
- ref.current.select();
27
- ref.current.setSelectionRange(0, value.length + 1);
28
- document.execCommand('copy');
29
- setCopied(true);
30
- }
31
- },
32
- onMouseEnter: () => {
24
+ let t1;
25
+ if ($[0] !== value) {
26
+ t1 = async () => {
27
+ await navigator.clipboard.writeText(value);
28
+ setCopied(true);
29
+ };
30
+ $[0] = value;
31
+ $[1] = t1;
32
+ } else {
33
+ t1 = $[1];
34
+ }
35
+ let t2;
36
+ let t3;
37
+ if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
38
+ t2 = () => {
33
39
  setHovered(true);
34
40
  setCopied(false);
35
- },
36
- onMouseLeave: () => {
41
+ };
42
+ t3 = () => {
37
43
  setHovered(false);
38
44
  setCopied(false);
39
- },
40
- type: "button",
41
- children: [/*#__PURE__*/_jsx(CopyIcon, {}), /*#__PURE__*/_jsxs(Tooltip, {
42
- delay: copied ? 0 : undefined,
43
- show: hovered || copied,
44
- children: [copied && (successMessage ?? t('general:copied')), !copied && (defaultMessage ?? t('general:copy'))]
45
- }), /*#__PURE__*/_jsx("textarea", {
46
- readOnly: true,
47
- ref: ref,
48
- tabIndex: -1,
49
- value: value
50
- })]
51
- });
45
+ };
46
+ $[2] = t2;
47
+ $[3] = t3;
48
+ } else {
49
+ t2 = $[2];
50
+ t3 = $[3];
51
+ }
52
+ let t4;
53
+ if ($[4] !== copied || $[5] !== defaultMessage || $[6] !== hovered || $[7] !== successMessage || $[8] !== t || $[9] !== t1) {
54
+ let t5;
55
+ if ($[11] !== copied || $[12] !== successMessage || $[13] !== t) {
56
+ t5 = copied && (successMessage ?? t("general:copied"));
57
+ $[11] = copied;
58
+ $[12] = successMessage;
59
+ $[13] = t;
60
+ $[14] = t5;
61
+ } else {
62
+ t5 = $[14];
63
+ }
64
+ let t6;
65
+ if ($[15] !== copied || $[16] !== defaultMessage || $[17] !== t) {
66
+ t6 = !copied && (defaultMessage ?? t("general:copy"));
67
+ $[15] = copied;
68
+ $[16] = defaultMessage;
69
+ $[17] = t;
70
+ $[18] = t6;
71
+ } else {
72
+ t6 = $[18];
73
+ }
74
+ t4 = _jsxs("button", {
75
+ className: baseClass,
76
+ onClick: t1,
77
+ onMouseEnter: t2,
78
+ onMouseLeave: t3,
79
+ type: "button",
80
+ children: [_jsx(CopyIcon, {}), _jsxs(Tooltip, {
81
+ delay: copied ? 0 : undefined,
82
+ show: hovered || copied,
83
+ children: [t5, t6]
84
+ })]
85
+ });
86
+ $[4] = copied;
87
+ $[5] = defaultMessage;
88
+ $[6] = hovered;
89
+ $[7] = successMessage;
90
+ $[8] = t;
91
+ $[9] = t1;
92
+ $[10] = t4;
93
+ } else {
94
+ t4 = $[10];
95
+ }
96
+ return t4;
52
97
  }
53
98
  return null;
54
99
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","useRef","useState","CopyIcon","useTranslation","Tooltip","baseClass","CopyToClipboard","defaultMessage","successMessage","value","ref","copied","setCopied","hovered","setHovered","t","_jsxs","className","onClick","current","select","setSelectionRange","length","document","execCommand","onMouseEnter","onMouseLeave","type","_jsx","delay","undefined","show","readOnly","tabIndex"],"sources":["../../../src/elements/CopyToClipboard/index.tsx"],"sourcesContent":["'use client'\nimport React, { useRef, useState } from 'react'\n\nimport { CopyIcon } from '../../icons/Copy/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Tooltip } from '../Tooltip/index.js'\nimport './index.scss'\n\nconst baseClass = 'copy-to-clipboard'\n\nexport type Props = {\n defaultMessage?: string\n successMessage?: string\n value?: string\n}\n\nexport const CopyToClipboard: React.FC<Props> = ({ defaultMessage, successMessage, value }) => {\n const ref = useRef(null)\n const [copied, setCopied] = useState(false)\n const [hovered, setHovered] = useState(false)\n const { t } = useTranslation()\n\n if (value) {\n return (\n <button\n className={baseClass}\n onClick={() => {\n if (ref && ref.current) {\n ref.current.select()\n ref.current.setSelectionRange(0, value.length + 1)\n document.execCommand('copy')\n setCopied(true)\n }\n }}\n onMouseEnter={() => {\n setHovered(true)\n setCopied(false)\n }}\n onMouseLeave={() => {\n setHovered(false)\n setCopied(false)\n }}\n type=\"button\"\n >\n <CopyIcon />\n <Tooltip delay={copied ? 0 : undefined} show={hovered || copied}>\n {copied && (successMessage ?? t('general:copied'))}\n {!copied && (defaultMessage ?? t('general:copy'))}\n </Tooltip>\n <textarea readOnly ref={ref} tabIndex={-1} value={value} />\n </button>\n )\n }\n\n return null\n}\n"],"mappings":"AAAA;;;AACA,OAAOA,KAAA,IAASC,MAAM,EAAEC,QAAQ,QAAQ;AAExC,SAASC,QAAQ,QAAQ;AACzB,SAASC,cAAc,QAAQ;AAC/B,SAASC,OAAO,QAAQ;AACxB,OAAO;AAEP,MAAMC,SAAA,GAAY;AAQlB,OAAO,MAAMC,eAAA,GAAmCA,CAAC;EAAEC,cAAc;EAAEC,cAAc;EAAEC;AAAK,CAAE;EACxF,MAAMC,GAAA,GAAMV,MAAA,CAAO;EACnB,MAAM,CAACW,MAAA,EAAQC,SAAA,CAAU,GAAGX,QAAA,CAAS;EACrC,MAAM,CAACY,OAAA,EAASC,UAAA,CAAW,GAAGb,QAAA,CAAS;EACvC,MAAM;IAAEc;EAAC,CAAE,GAAGZ,cAAA;EAEd,IAAIM,KAAA,EAAO;IACT,oBACEO,KAAA,CAAC;MACCC,SAAA,EAAWZ,SAAA;MACXa,OAAA,EAASA,CAAA;QACP,IAAIR,GAAA,IAAOA,GAAA,CAAIS,OAAO,EAAE;UACtBT,GAAA,CAAIS,OAAO,CAACC,MAAM;UAClBV,GAAA,CAAIS,OAAO,CAACE,iBAAiB,CAAC,GAAGZ,KAAA,CAAMa,MAAM,GAAG;UAChDC,QAAA,CAASC,WAAW,CAAC;UACrBZ,SAAA,CAAU;QACZ;MACF;MACAa,YAAA,EAAcA,CAAA;QACZX,UAAA,CAAW;QACXF,SAAA,CAAU;MACZ;MACAc,YAAA,EAAcA,CAAA;QACZZ,UAAA,CAAW;QACXF,SAAA,CAAU;MACZ;MACAe,IAAA,EAAK;8BAELC,IAAA,CAAC1B,QAAA,O,aACDc,KAAA,CAACZ,OAAA;QAAQyB,KAAA,EAAOlB,MAAA,GAAS,IAAImB,SAAA;QAAWC,IAAA,EAAMlB,OAAA,IAAWF,MAAA;mBACtDA,MAAA,KAAWH,cAAA,IAAkBO,CAAA,CAAE,iBAAgB,GAC/C,CAACJ,MAAA,KAAWJ,cAAA,IAAkBQ,CAAA,CAAE,eAAc;uBAEjDa,IAAA,CAAC;QAASI,QAAQ;QAACtB,GAAA,EAAKA,GAAA;QAAKuB,QAAA,EAAU,CAAC;QAAGxB,KAAA,EAAOA;;;EAGxD;EAEA,OAAO;AACT","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","React","useState","CopyIcon","useTranslation","Tooltip","baseClass","CopyToClipboard","t0","$","defaultMessage","successMessage","value","copied","setCopied","hovered","setHovered","t","t1","navigator","clipboard","writeText","t2","t3","Symbol","for","t4","t5","t6","_jsxs","className","onClick","onMouseEnter","onMouseLeave","type","children","_jsx","delay","undefined","show"],"sources":["../../../src/elements/CopyToClipboard/index.tsx"],"sourcesContent":["'use client'\nimport React, { useState } from 'react'\n\nimport { CopyIcon } from '../../icons/Copy/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Tooltip } from '../Tooltip/index.js'\nimport './index.scss'\n\nconst baseClass = 'copy-to-clipboard'\n\nexport type Props = {\n defaultMessage?: string\n successMessage?: string\n value?: string\n}\n\nexport const CopyToClipboard: React.FC<Props> = ({ defaultMessage, successMessage, value }) => {\n const [copied, setCopied] = useState(false)\n const [hovered, setHovered] = useState(false)\n const { t } = useTranslation()\n\n if (value) {\n return (\n <button\n className={baseClass}\n onClick={async () => {\n await navigator.clipboard.writeText(value)\n setCopied(true)\n }}\n onMouseEnter={() => {\n setHovered(true)\n setCopied(false)\n }}\n onMouseLeave={() => {\n setHovered(false)\n setCopied(false)\n }}\n type=\"button\"\n >\n <CopyIcon />\n <Tooltip delay={copied ? 0 : undefined} show={hovered || copied}>\n {copied && (successMessage ?? t('general:copied'))}\n {!copied && (defaultMessage ?? t('general:copy'))}\n </Tooltip>\n </button>\n )\n }\n\n return null\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AACA,OAAOC,KAAA,IAASC,QAAQ,QAAQ;AAEhC,SAASC,QAAQ,QAAQ;AACzB,SAASC,cAAc,QAAQ;AAC/B,SAASC,OAAO,QAAQ;AACxB,OAAO;AAEP,MAAMC,SAAA,GAAY;AAQlB,OAAO,MAAMC,eAAA,GAAmCC,EAAA;EAAA,MAAAC,CAAA,GAAAT,EAAA;EAAC;IAAAU,cAAA;IAAAC,cAAA;IAAAC;EAAA,IAAAJ,EAAyC;EACxF,OAAAK,MAAA,EAAAC,SAAA,IAA4BZ,QAAA,MAAS;EACrC,OAAAa,OAAA,EAAAC,UAAA,IAA8Bd,QAAA,MAAS;EACvC;IAAAe;EAAA,IAAcb,cAAA;EAAA,IAEVQ,KAAA;IAAA,IAAAM,EAAA;IAAA,IAAAT,CAAA,QAAAG,KAAA;MAIWM,EAAA,SAAAA,CAAA;QAAA,MACDC,SAAA,CAAAC,SAAA,CAAAC,SAAA,CAA8BT,KAAA;QACpCE,SAAA,KAAU;MAAA;MACZL,CAAA,MAAAG,KAAA;MAAAH,CAAA,MAAAS,EAAA;IAAA;MAAAA,EAAA,GAAAT,CAAA;IAAA;IAAA,IAAAa,EAAA;IAAA,IAAAC,EAAA;IAAA,IAAAd,CAAA,QAAAe,MAAA,CAAAC,GAAA;MACcH,EAAA,GAAAA,CAAA;QACZN,UAAA,KAAW;QACXF,SAAA,MAAU;MAAA;MAEES,EAAA,GAAAA,CAAA;QACZP,UAAA,MAAW;QACXF,SAAA,MAAU;MAAA;MACZL,CAAA,MAAAa,EAAA;MAAAb,CAAA,MAAAc,EAAA;IAAA;MAAAD,EAAA,GAAAb,CAAA;MAAAc,EAAA,GAAAd,CAAA;IAAA;IAAA,IAAAiB,EAAA;IAAA,IAAAjB,CAAA,QAAAI,MAAA,IAAAJ,CAAA,QAAAC,cAAA,IAAAD,CAAA,QAAAM,OAAA,IAAAN,CAAA,QAAAE,cAAA,IAAAF,CAAA,QAAAQ,CAAA,IAAAR,CAAA,QAAAS,EAAA;MAAA,IAAAS,EAAA;MAAA,IAAAlB,CAAA,SAAAI,MAAA,IAAAJ,CAAA,SAAAE,cAAA,IAAAF,CAAA,SAAAQ,CAAA;QAKGU,EAAA,GAAAd,MAAA,KAAWF,cAAA,IAAkBM,CAAA,CAAE,iBAAgB;QAAAR,CAAA,OAAAI,MAAA;QAAAJ,CAAA,OAAAE,cAAA;QAAAF,CAAA,OAAAQ,CAAA;QAAAR,CAAA,OAAAkB,EAAA;MAAA;QAAAA,EAAA,GAAAlB,CAAA;MAAA;MAAA,IAAAmB,EAAA;MAAA,IAAAnB,CAAA,SAAAI,MAAA,IAAAJ,CAAA,SAAAC,cAAA,IAAAD,CAAA,SAAAQ,CAAA;QAC/CW,EAAA,IAACf,MAAA,KAAWH,cAAA,IAAkBO,CAAA,CAAE,eAAc;QAAAR,CAAA,OAAAI,MAAA;QAAAJ,CAAA,OAAAC,cAAA;QAAAD,CAAA,OAAAQ,CAAA;QAAAR,CAAA,OAAAmB,EAAA;MAAA;QAAAA,EAAA,GAAAnB,CAAA;MAAA;MAnBnDiB,EAAA,GAAAG,KAAA,CAAC;QAAAC,SAAA,EAAAxB,SAAA;QAAAyB,OAAA,EAEUb,EAGT;QAAAc,YAAA,EACcV,EAGd;QAAAW,YAAA,EACcV,EAGd;QAAAW,IAAA,EACK;QAAAC,QAAA,GAELC,IAAA,CAAAjC,QAAA,IAAC,GACD0B,KAAA,CAAAxB,OAAA;UAAAgC,KAAA,EAAgBxB,MAAA,OAAAyB,SAAa;UAAAC,IAAA,EAAiBxB,OAAA,IAAWF,MAAA;UAAAsB,QAAA,GACtDR,EAA+C,EAC/CC,EAA8C;QAAA,C;;;;;;;;;;;;WAnBnDF,E;;;CA0BN","ignoreList":[]}
@@ -8,14 +8,6 @@
8
8
  vertical-align: middle;
9
9
  border-radius: 100%;
10
10
 
11
- textarea {
12
- position: absolute;
13
- opacity: 0;
14
- z-index: -1;
15
- height: 0px;
16
- width: 0px;
17
- }
18
-
19
11
  &:focus,
20
12
  &:active {
21
13
  outline: none;
@@ -195,41 +195,51 @@ export const Upload_v4 = props => {
195
195
  const urlInputRef = useRef(null);
196
196
  const inputRef = useRef(null);
197
197
  const useServerSideFetch = typeof uploadConfig?.pasteURL === 'object' && uploadConfig.pasteURL.allowList?.length > 0;
198
- const handleFileChange = useCallback(newFile => {
199
- if (newFile instanceof File) {
200
- setFileSrc(URL.createObjectURL(newFile));
198
+ const handleFileChange = useCallback(({
199
+ file,
200
+ isNewFile = true
201
+ }) => {
202
+ if (isNewFile && file instanceof File) {
203
+ setFileSrc(URL.createObjectURL(file));
201
204
  }
202
- setValue(newFile);
205
+ setValue(file);
203
206
  setShowUrlInput(false);
204
207
  setUploadControlFileUrl('');
205
208
  setUploadControlFileName(null);
206
209
  setUploadControlFile(null);
207
210
  if (typeof onChange === 'function') {
208
- onChange(newFile);
211
+ onChange(file);
209
212
  }
210
213
  }, [onChange, setValue, setUploadControlFile, setUploadControlFileName, setUploadControlFileUrl]);
211
214
  const renameFile = (fileToChange, newName) => {
212
215
  // Creating a new File object with updated properties
213
- const newFile_0 = new File([fileToChange], newName, {
216
+ const newFile = new File([fileToChange], newName, {
214
217
  type: fileToChange.type,
215
218
  lastModified: fileToChange.lastModified
216
219
  });
217
- return newFile_0;
220
+ return newFile;
218
221
  };
219
222
  const handleFileNameChange = React.useCallback(e => {
220
223
  const updatedFileName = e.target.value;
221
224
  if (value) {
222
- handleFileChange(renameFile(value, updatedFileName));
225
+ handleFileChange({
226
+ file: renameFile(value, updatedFileName),
227
+ isNewFile: false
228
+ });
223
229
  setFilename(updatedFileName);
224
230
  }
225
231
  }, [handleFileChange, value]);
226
232
  const handleFileSelection = useCallback(files => {
227
233
  const fileToUpload = files?.[0];
228
- handleFileChange(fileToUpload);
234
+ handleFileChange({
235
+ file: fileToUpload
236
+ });
229
237
  }, [handleFileChange]);
230
238
  const handleFileRemoval = useCallback(() => {
231
239
  setRemovedFile(true);
232
- handleFileChange(null);
240
+ handleFileChange({
241
+ file: null
242
+ });
233
243
  setFileSrc('');
234
244
  setFileUrl('');
235
245
  resetUploadEdits();
@@ -255,10 +265,12 @@ export const Upload_v4 = props => {
255
265
  }
256
266
  const blob = await clientResponse.blob();
257
267
  const fileName = uploadControlFileName || decodeURIComponent(fileUrl.split('/').pop() || '');
258
- const file = new File([blob], fileName, {
268
+ const file_0 = new File([blob], fileName, {
259
269
  type: blob.type
260
270
  });
261
- handleFileChange(file);
271
+ handleFileChange({
272
+ file: file_0
273
+ });
262
274
  setUploadStatus('idle');
263
275
  return; // Exit if client-side fetch succeeds
264
276
  } catch (_clientError) {
@@ -278,10 +290,12 @@ export const Upload_v4 = props => {
278
290
  }
279
291
  const blob_0 = await serverResponse.blob();
280
292
  const fileName_0 = decodeURIComponent(fileUrl.split('/').pop() || '');
281
- const file_0 = new File([blob_0], fileName_0, {
293
+ const file_1 = new File([blob_0], fileName_0, {
282
294
  type: blob_0.type
283
295
  });
284
- handleFileChange(file_0);
296
+ handleFileChange({
297
+ file: file_1
298
+ });
285
299
  setUploadStatus('idle');
286
300
  } catch (_serverError) {
287
301
  toast.error('The provided URL is not allowed.');
@@ -328,7 +342,9 @@ export const Upload_v4 = props => {
328
342
  useEffect(() => {
329
343
  const handleControlFile = () => {
330
344
  if (uploadControlFile) {
331
- handleFileChange(uploadControlFile);
345
+ handleFileChange({
346
+ file: uploadControlFile
347
+ });
332
348
  }
333
349
  };
334
350
  void handleControlFile();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useModal","isImage","React","Fragment","useCallback","useEffect","useRef","useState","toast","FieldError","fieldBaseClass","useForm","useFormProcessing","useField","useConfig","useDocumentInfo","EditDepthProvider","useTranslation","UploadControlsProvider","useUploadControls","useUploadEdits","Button","Drawer","Dropzone","EditUpload","FileDetails","PreviewSizes","Thumbnail","baseClass","editDrawerSlug","sizePreviewSlug","validate","value","undefined","name","UploadActions","t0","$","customActions","enableAdjustments","enablePreviewSizes","mimeType","t","openModal","t1","t2","Symbol","for","bb0","fileTypeIsAdjustable","length","t3","map","_temp","_jsxs","className","children","_jsx","buttonStyle","margin","onClick","size","Upload","props","resetUploadEdits","updateUploadEdits","uploadEdits","Upload_v4","collectionSlug","initialState","onChange","uploadConfig","UploadControls","setUploadControlFile","setUploadControlFileName","setUploadControlFileUrl","uploadControlFile","uploadControlFileName","uploadControlFileUrl","config","routes","api","serverURL","setModified","id","data","docPermissions","setUploadStatus","isFormSubmitting","errorMessage","setValue","showError","path","fileSrc","setFileSrc","removedFile","setRemovedFile","filename","setFilename","showUrlInput","setShowUrlInput","fileUrl","setFileUrl","urlInputRef","inputRef","useServerSideFetch","pasteURL","allowList","handleFileChange","newFile","File","URL","createObjectURL","renameFile","fileToChange","newName","type","lastModified","handleFileNameChange","e","updatedFileName","target","handleFileSelection","files","fileToUpload","handleFileRemoval","onEditsSave","args","handleUrlSubmit","clientResponse","fetch","ok","Error","status","blob","fileName","decodeURIComponent","split","pop","file","_clientError","error","encodeURIComponent","serverResponse","_serverError","current","canRemoveUpload","update","hasImageSizes","imageSizes","hasResizeOptions","Boolean","resizeOptions","focalPointEnabled","focalPoint","crop","showCrop","showFocalPoint","acceptMimeTypes","mimeTypes","join","imageCacheTag","cacheTags","updatedAt","handleControlFileUrl","handleControlFile","filter","message","customUploadActions","doc","handleRemove","hideRemoveFile","hideFileInputOnCreate","click","accept","hidden","ref","title","icon","iconStyle","round","tooltip","Header","slug","url","initialCrop","initialFocalPoint","x","focalX","y","focalY","onSave","hoverTitle","label","CustomAction","i"],"sources":["../../../src/elements/Upload/index.tsx"],"sourcesContent":["'use client'\nimport type { FormState, SanitizedCollectionConfig, UploadEdits } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { isImage } from 'payload/shared'\nimport React, { Fragment, useCallback, useEffect, useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { fieldBaseClass } from '../../fields/shared/index.js'\nimport { useForm, useFormProcessing } from '../../forms/Form/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { EditDepthProvider } from '../../providers/EditDepth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { UploadControlsProvider, useUploadControls } from '../../providers/UploadControls/index.js'\nimport { useUploadEdits } from '../../providers/UploadEdits/index.js'\nimport { Button } from '../Button/index.js'\nimport { Drawer } from '../Drawer/index.js'\nimport { Dropzone } from '../Dropzone/index.js'\nimport { EditUpload } from '../EditUpload/index.js'\nimport './index.scss'\nimport { FileDetails } from '../FileDetails/index.js'\nimport { PreviewSizes } from '../PreviewSizes/index.js'\nimport { Thumbnail } from '../Thumbnail/index.js'\n\nconst baseClass = 'file-field'\nexport const editDrawerSlug = 'edit-upload'\nexport const sizePreviewSlug = 'preview-sizes'\n\nconst validate = (value) => {\n if (!value && value !== undefined) {\n return 'A file is required.'\n }\n\n if (value && (!value.name || value.name === '')) {\n return 'A file name is required.'\n }\n\n return true\n}\n\ntype UploadActionsArgs = {\n readonly customActions?: React.ReactNode[]\n readonly enableAdjustments: boolean\n readonly enablePreviewSizes: boolean\n readonly mimeType: string\n}\n\nexport const UploadActions = ({\n customActions,\n enableAdjustments,\n enablePreviewSizes,\n mimeType,\n}: UploadActionsArgs) => {\n const { t } = useTranslation()\n const { openModal } = useModal()\n\n const fileTypeIsAdjustable =\n isImage(mimeType) && mimeType !== 'image/svg+xml' && mimeType !== 'image/jxl'\n\n if (!fileTypeIsAdjustable && (!customActions || customActions.length === 0)) {\n return null\n }\n\n return (\n <div className={`${baseClass}__upload-actions`}>\n {fileTypeIsAdjustable && (\n <React.Fragment>\n {enablePreviewSizes && (\n <Button\n buttonStyle=\"pill\"\n className={`${baseClass}__previewSizes`}\n margin={false}\n onClick={() => {\n openModal(sizePreviewSlug)\n }}\n size=\"small\"\n >\n {t('upload:previewSizes')}\n </Button>\n )}\n {enableAdjustments && (\n <Button\n buttonStyle=\"pill\"\n className={`${baseClass}__edit`}\n margin={false}\n onClick={() => {\n openModal(editDrawerSlug)\n }}\n size=\"small\"\n >\n {t('upload:editImage')}\n </Button>\n )}\n </React.Fragment>\n )}\n\n {customActions &&\n customActions.map((CustomAction, i) => {\n return <React.Fragment key={i}>{CustomAction}</React.Fragment>\n })}\n </div>\n )\n}\n\nexport type UploadProps = {\n readonly collectionSlug: string\n readonly customActions?: React.ReactNode[]\n readonly initialState?: FormState\n readonly onChange?: (file?: File) => void\n readonly uploadConfig: SanitizedCollectionConfig['upload']\n readonly UploadControls?: React.ReactNode\n}\n\nexport const Upload: React.FC<UploadProps> = (props) => {\n const { resetUploadEdits, updateUploadEdits, uploadEdits } = useUploadEdits()\n return (\n <UploadControlsProvider>\n <Upload_v4\n {...props}\n resetUploadEdits={resetUploadEdits}\n updateUploadEdits={updateUploadEdits}\n uploadEdits={uploadEdits}\n />\n </UploadControlsProvider>\n )\n}\n\nexport type UploadProps_v4 = {\n readonly resetUploadEdits?: () => void\n readonly updateUploadEdits?: (args: UploadEdits) => void\n readonly uploadEdits?: UploadEdits\n} & UploadProps\n\nexport const Upload_v4: React.FC<UploadProps_v4> = (props) => {\n const {\n collectionSlug,\n customActions,\n initialState,\n onChange,\n resetUploadEdits,\n updateUploadEdits,\n uploadConfig,\n UploadControls,\n uploadEdits,\n } = props\n\n const {\n setUploadControlFile,\n setUploadControlFileName,\n setUploadControlFileUrl,\n uploadControlFile,\n uploadControlFileName,\n uploadControlFileUrl,\n } = useUploadControls()\n\n const {\n config: {\n routes: { api },\n serverURL,\n },\n } = useConfig()\n\n const { t } = useTranslation()\n const { setModified } = useForm()\n const { id, data, docPermissions, setUploadStatus } = useDocumentInfo()\n const isFormSubmitting = useFormProcessing()\n const { errorMessage, setValue, showError, value } = useField<File>({\n path: 'file',\n validate,\n })\n\n const [fileSrc, setFileSrc] = useState<null | string>(null)\n const [removedFile, setRemovedFile] = useState(false)\n const [filename, setFilename] = useState<string>(value?.name || '')\n const [showUrlInput, setShowUrlInput] = useState(false)\n const [fileUrl, setFileUrl] = useState<string>('')\n\n const urlInputRef = useRef<HTMLInputElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const useServerSideFetch =\n typeof uploadConfig?.pasteURL === 'object' && uploadConfig.pasteURL.allowList?.length > 0\n\n const handleFileChange = useCallback(\n (newFile: File) => {\n if (newFile instanceof File) {\n setFileSrc(URL.createObjectURL(newFile))\n }\n\n setValue(newFile)\n setShowUrlInput(false)\n setUploadControlFileUrl('')\n setUploadControlFileName(null)\n setUploadControlFile(null)\n\n if (typeof onChange === 'function') {\n onChange(newFile)\n }\n },\n [onChange, setValue, setUploadControlFile, setUploadControlFileName, setUploadControlFileUrl],\n )\n\n const renameFile = (fileToChange: File, newName: string): File => {\n // Creating a new File object with updated properties\n const newFile = new File([fileToChange], newName, {\n type: fileToChange.type,\n lastModified: fileToChange.lastModified,\n })\n return newFile\n }\n\n const handleFileNameChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const updatedFileName = e.target.value\n\n if (value) {\n handleFileChange(renameFile(value, updatedFileName))\n setFilename(updatedFileName)\n }\n },\n [handleFileChange, value],\n )\n\n const handleFileSelection = useCallback(\n (files: FileList) => {\n const fileToUpload = files?.[0]\n handleFileChange(fileToUpload)\n },\n [handleFileChange],\n )\n\n const handleFileRemoval = useCallback(() => {\n setRemovedFile(true)\n handleFileChange(null)\n setFileSrc('')\n setFileUrl('')\n resetUploadEdits()\n setShowUrlInput(false)\n setUploadControlFileUrl('')\n setUploadControlFileName(null)\n setUploadControlFile(null)\n }, [\n handleFileChange,\n resetUploadEdits,\n setUploadControlFile,\n setUploadControlFileName,\n setUploadControlFileUrl,\n ])\n\n const onEditsSave = useCallback(\n (args: UploadEdits) => {\n setModified(true)\n updateUploadEdits(args)\n },\n [setModified, updateUploadEdits],\n )\n\n const handleUrlSubmit = useCallback(async () => {\n if (!fileUrl || uploadConfig?.pasteURL === false) {\n return\n }\n\n setUploadStatus('uploading')\n try {\n // Attempt client-side fetch\n const clientResponse = await fetch(fileUrl)\n\n if (!clientResponse.ok) {\n throw new Error(`Fetch failed with status: ${clientResponse.status}`)\n }\n\n const blob = await clientResponse.blob()\n const fileName = uploadControlFileName || decodeURIComponent(fileUrl.split('/').pop() || '')\n const file = new File([blob], fileName, { type: blob.type })\n\n handleFileChange(file)\n setUploadStatus('idle')\n return // Exit if client-side fetch succeeds\n } catch (_clientError) {\n if (!useServerSideFetch) {\n // If server-side fetch is not enabled, show client-side error\n toast.error('Failed to fetch the file.')\n setUploadStatus('failed')\n return\n }\n }\n\n // Attempt server-side fetch if client-side fetch fails and useServerSideFetch is true\n try {\n const pasteURL = `/${collectionSlug}/paste-url${id ? `/${id}?` : '?'}src=${encodeURIComponent(fileUrl)}`\n const serverResponse = await fetch(`${serverURL}${api}${pasteURL}`)\n\n if (!serverResponse.ok) {\n throw new Error(`Fetch failed with status: ${serverResponse.status}`)\n }\n\n const blob = await serverResponse.blob()\n const fileName = decodeURIComponent(fileUrl.split('/').pop() || '')\n const file = new File([blob], fileName, { type: blob.type })\n\n handleFileChange(file)\n setUploadStatus('idle')\n } catch (_serverError) {\n toast.error('The provided URL is not allowed.')\n setUploadStatus('failed')\n }\n }, [\n api,\n collectionSlug,\n fileUrl,\n handleFileChange,\n id,\n serverURL,\n setUploadStatus,\n uploadConfig,\n uploadControlFileName,\n useServerSideFetch,\n ])\n\n useEffect(() => {\n if (initialState?.file?.value instanceof File) {\n setFileSrc(URL.createObjectURL(initialState.file.value))\n setRemovedFile(false)\n }\n }, [initialState])\n\n useEffect(() => {\n if (showUrlInput && urlInputRef.current) {\n // urlInputRef.current.focus() // Focus on the remote-url input field when showUrlInput is true\n }\n }, [showUrlInput])\n\n useEffect(() => {\n if (isFormSubmitting) {\n setRemovedFile(false)\n }\n }, [isFormSubmitting])\n\n const canRemoveUpload = docPermissions?.update\n\n const hasImageSizes = uploadConfig?.imageSizes?.length > 0\n const hasResizeOptions = Boolean(uploadConfig?.resizeOptions)\n // Explicity check if set to true, default is undefined\n const focalPointEnabled = uploadConfig?.focalPoint === true\n\n const { crop: showCrop = true, focalPoint = true } = uploadConfig\n\n const showFocalPoint = focalPoint && (hasImageSizes || hasResizeOptions || focalPointEnabled)\n\n const acceptMimeTypes = uploadConfig.mimeTypes?.join(', ')\n\n const imageCacheTag = uploadConfig?.cacheTags && data?.updatedAt\n\n useEffect(() => {\n const handleControlFileUrl = async () => {\n if (uploadControlFileUrl) {\n setFileUrl(uploadControlFileUrl)\n await handleUrlSubmit()\n }\n }\n\n void handleControlFileUrl()\n }, [uploadControlFileUrl, handleUrlSubmit])\n\n useEffect(() => {\n const handleControlFile = () => {\n if (uploadControlFile) {\n handleFileChange(uploadControlFile)\n }\n }\n\n void handleControlFile()\n }, [uploadControlFile, handleFileChange])\n\n return (\n <div className={[fieldBaseClass, baseClass].filter(Boolean).join(' ')}>\n <FieldError message={errorMessage} showError={showError} />\n {data && data.filename && !removedFile && (\n <FileDetails\n collectionSlug={collectionSlug}\n customUploadActions={customActions}\n doc={data}\n enableAdjustments={showCrop || showFocalPoint}\n handleRemove={canRemoveUpload ? handleFileRemoval : undefined}\n hasImageSizes={hasImageSizes}\n hideRemoveFile={uploadConfig.hideRemoveFile}\n imageCacheTag={imageCacheTag}\n uploadConfig={uploadConfig}\n />\n )}\n {((!uploadConfig.hideFileInputOnCreate && !data?.filename) || removedFile) && (\n <div className={`${baseClass}__upload`}>\n {!value && !showUrlInput && (\n <Dropzone onChange={handleFileSelection}>\n <div className={`${baseClass}__dropzoneContent`}>\n <div className={`${baseClass}__dropzoneButtons`}>\n <Button\n buttonStyle=\"pill\"\n onClick={() => {\n if (inputRef.current) {\n inputRef.current.click()\n }\n }}\n size=\"small\"\n >\n {t('upload:selectFile')}\n </Button>\n <input\n accept={acceptMimeTypes}\n aria-hidden=\"true\"\n className={`${baseClass}__hidden-input`}\n hidden\n onChange={(e) => {\n if (e.target.files && e.target.files.length > 0) {\n handleFileSelection(e.target.files)\n }\n }}\n ref={inputRef}\n type=\"file\"\n />\n {uploadConfig?.pasteURL !== false && (\n <Fragment>\n <span className={`${baseClass}__orText`}>{t('general:or')}</span>\n <Button\n buttonStyle=\"pill\"\n onClick={() => {\n setShowUrlInput(true)\n setUploadControlFileUrl('')\n setUploadControlFile(null)\n setUploadControlFileName(null)\n }}\n size=\"small\"\n >\n {t('upload:pasteURL')}\n </Button>\n </Fragment>\n )}\n\n {UploadControls ? UploadControls : null}\n </div>\n <p className={`${baseClass}__dragAndDropText`}>\n {t('general:or')} {t('upload:dragAndDrop')}\n </p>\n </div>\n </Dropzone>\n )}\n {showUrlInput && (\n <React.Fragment>\n <div className={`${baseClass}__remote-file-wrap`}>\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <input\n className={`${baseClass}__remote-file`}\n onChange={(e) => {\n setFileUrl(e.target.value)\n }}\n ref={urlInputRef}\n title={fileUrl}\n type=\"text\"\n value={fileUrl}\n />\n <div className={`${baseClass}__add-file-wrap`}>\n <button\n className={`${baseClass}__add-file`}\n onClick={() => {\n void handleUrlSubmit()\n }}\n type=\"button\"\n >\n {t('upload:addFile')}\n </button>\n </div>\n </div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={() => {\n setShowUrlInput(false)\n setUploadControlFileUrl('')\n setUploadControlFile(null)\n setUploadControlFileName(null)\n }}\n round\n tooltip={t('general:cancel')}\n />\n </React.Fragment>\n )}\n {value && fileSrc && (\n <React.Fragment>\n <div className={`${baseClass}__thumbnail-wrap`}>\n <Thumbnail\n collectionSlug={collectionSlug}\n fileSrc={isImage(value.type) ? fileSrc : null}\n />\n </div>\n <div className={`${baseClass}__file-adjustments`}>\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <input\n className={`${baseClass}__filename`}\n onChange={handleFileNameChange}\n title={filename || value.name}\n type=\"text\"\n value={filename || value.name}\n />\n <UploadActions\n customActions={customActions}\n enableAdjustments={showCrop || showFocalPoint}\n enablePreviewSizes={hasImageSizes && data?.filename && !removedFile}\n mimeType={value.type}\n />\n </div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={handleFileRemoval}\n round\n tooltip={t('general:cancel')}\n />\n </React.Fragment>\n )}\n </div>\n )}\n {(value || data?.filename) && (\n <EditDepthProvider>\n <Drawer Header={null} slug={editDrawerSlug}>\n <EditUpload\n fileName={value?.name || data?.filename}\n fileSrc={data?.url || fileSrc}\n imageCacheTag={imageCacheTag}\n initialCrop={uploadEdits?.crop ?? undefined}\n initialFocalPoint={{\n x: uploadEdits?.focalPoint?.x || data?.focalX || 50,\n y: uploadEdits?.focalPoint?.y || data?.focalY || 50,\n }}\n onSave={onEditsSave}\n showCrop={showCrop}\n showFocalPoint={showFocalPoint}\n />\n </Drawer>\n </EditDepthProvider>\n )}\n {data && hasImageSizes && (\n <Drawer\n className={`${baseClass}__previewDrawer`}\n hoverTitle\n slug={sizePreviewSlug}\n title={t('upload:sizesFor', { label: data.filename })}\n >\n <PreviewSizes doc={data} imageCacheTag={imageCacheTag} uploadConfig={uploadConfig} />\n </Drawer>\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useModal","isImage","React","Fragment","useCallback","useEffect","useRef","useState","toast","FieldError","fieldBaseClass","useForm","useFormProcessing","useField","useConfig","useDocumentInfo","EditDepthProvider","useTranslation","UploadControlsProvider","useUploadControls","useUploadEdits","Button","Drawer","Dropzone","EditUpload","FileDetails","PreviewSizes","Thumbnail","baseClass","editDrawerSlug","sizePreviewSlug","validate","value","undefined","name","UploadActions","t0","$","customActions","enableAdjustments","enablePreviewSizes","mimeType","t","openModal","t1","t2","Symbol","for","bb0","fileTypeIsAdjustable","length","t3","map","_temp","_jsxs","className","children","_jsx","buttonStyle","margin","onClick","size","Upload","props","resetUploadEdits","updateUploadEdits","uploadEdits","Upload_v4","collectionSlug","initialState","onChange","uploadConfig","UploadControls","setUploadControlFile","setUploadControlFileName","setUploadControlFileUrl","uploadControlFile","uploadControlFileName","uploadControlFileUrl","config","routes","api","serverURL","setModified","id","data","docPermissions","setUploadStatus","isFormSubmitting","errorMessage","setValue","showError","path","fileSrc","setFileSrc","removedFile","setRemovedFile","filename","setFilename","showUrlInput","setShowUrlInput","fileUrl","setFileUrl","urlInputRef","inputRef","useServerSideFetch","pasteURL","allowList","handleFileChange","file","isNewFile","File","URL","createObjectURL","renameFile","fileToChange","newName","newFile","type","lastModified","handleFileNameChange","e","updatedFileName","target","handleFileSelection","files","fileToUpload","handleFileRemoval","onEditsSave","args","handleUrlSubmit","clientResponse","fetch","ok","Error","status","blob","fileName","decodeURIComponent","split","pop","_clientError","error","encodeURIComponent","serverResponse","_serverError","current","canRemoveUpload","update","hasImageSizes","imageSizes","hasResizeOptions","Boolean","resizeOptions","focalPointEnabled","focalPoint","crop","showCrop","showFocalPoint","acceptMimeTypes","mimeTypes","join","imageCacheTag","cacheTags","updatedAt","handleControlFileUrl","handleControlFile","filter","message","customUploadActions","doc","handleRemove","hideRemoveFile","hideFileInputOnCreate","click","accept","hidden","ref","title","icon","iconStyle","round","tooltip","Header","slug","url","initialCrop","initialFocalPoint","x","focalX","y","focalY","onSave","hoverTitle","label","CustomAction","i"],"sources":["../../../src/elements/Upload/index.tsx"],"sourcesContent":["'use client'\nimport type { FormState, SanitizedCollectionConfig, UploadEdits } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { isImage } from 'payload/shared'\nimport React, { Fragment, useCallback, useEffect, useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { fieldBaseClass } from '../../fields/shared/index.js'\nimport { useForm, useFormProcessing } from '../../forms/Form/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { EditDepthProvider } from '../../providers/EditDepth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { UploadControlsProvider, useUploadControls } from '../../providers/UploadControls/index.js'\nimport { useUploadEdits } from '../../providers/UploadEdits/index.js'\nimport { Button } from '../Button/index.js'\nimport { Drawer } from '../Drawer/index.js'\nimport { Dropzone } from '../Dropzone/index.js'\nimport { EditUpload } from '../EditUpload/index.js'\nimport './index.scss'\nimport { FileDetails } from '../FileDetails/index.js'\nimport { PreviewSizes } from '../PreviewSizes/index.js'\nimport { Thumbnail } from '../Thumbnail/index.js'\n\nconst baseClass = 'file-field'\nexport const editDrawerSlug = 'edit-upload'\nexport const sizePreviewSlug = 'preview-sizes'\n\nconst validate = (value) => {\n if (!value && value !== undefined) {\n return 'A file is required.'\n }\n\n if (value && (!value.name || value.name === '')) {\n return 'A file name is required.'\n }\n\n return true\n}\n\ntype UploadActionsArgs = {\n readonly customActions?: React.ReactNode[]\n readonly enableAdjustments: boolean\n readonly enablePreviewSizes: boolean\n readonly mimeType: string\n}\n\nexport const UploadActions = ({\n customActions,\n enableAdjustments,\n enablePreviewSizes,\n mimeType,\n}: UploadActionsArgs) => {\n const { t } = useTranslation()\n const { openModal } = useModal()\n\n const fileTypeIsAdjustable =\n isImage(mimeType) && mimeType !== 'image/svg+xml' && mimeType !== 'image/jxl'\n\n if (!fileTypeIsAdjustable && (!customActions || customActions.length === 0)) {\n return null\n }\n\n return (\n <div className={`${baseClass}__upload-actions`}>\n {fileTypeIsAdjustable && (\n <React.Fragment>\n {enablePreviewSizes && (\n <Button\n buttonStyle=\"pill\"\n className={`${baseClass}__previewSizes`}\n margin={false}\n onClick={() => {\n openModal(sizePreviewSlug)\n }}\n size=\"small\"\n >\n {t('upload:previewSizes')}\n </Button>\n )}\n {enableAdjustments && (\n <Button\n buttonStyle=\"pill\"\n className={`${baseClass}__edit`}\n margin={false}\n onClick={() => {\n openModal(editDrawerSlug)\n }}\n size=\"small\"\n >\n {t('upload:editImage')}\n </Button>\n )}\n </React.Fragment>\n )}\n\n {customActions &&\n customActions.map((CustomAction, i) => {\n return <React.Fragment key={i}>{CustomAction}</React.Fragment>\n })}\n </div>\n )\n}\n\nexport type UploadProps = {\n readonly collectionSlug: string\n readonly customActions?: React.ReactNode[]\n readonly initialState?: FormState\n readonly onChange?: (file?: File) => void\n readonly uploadConfig: SanitizedCollectionConfig['upload']\n readonly UploadControls?: React.ReactNode\n}\n\nexport const Upload: React.FC<UploadProps> = (props) => {\n const { resetUploadEdits, updateUploadEdits, uploadEdits } = useUploadEdits()\n return (\n <UploadControlsProvider>\n <Upload_v4\n {...props}\n resetUploadEdits={resetUploadEdits}\n updateUploadEdits={updateUploadEdits}\n uploadEdits={uploadEdits}\n />\n </UploadControlsProvider>\n )\n}\n\nexport type UploadProps_v4 = {\n readonly resetUploadEdits?: () => void\n readonly updateUploadEdits?: (args: UploadEdits) => void\n readonly uploadEdits?: UploadEdits\n} & UploadProps\n\nexport const Upload_v4: React.FC<UploadProps_v4> = (props) => {\n const {\n collectionSlug,\n customActions,\n initialState,\n onChange,\n resetUploadEdits,\n updateUploadEdits,\n uploadConfig,\n UploadControls,\n uploadEdits,\n } = props\n\n const {\n setUploadControlFile,\n setUploadControlFileName,\n setUploadControlFileUrl,\n uploadControlFile,\n uploadControlFileName,\n uploadControlFileUrl,\n } = useUploadControls()\n\n const {\n config: {\n routes: { api },\n serverURL,\n },\n } = useConfig()\n\n const { t } = useTranslation()\n const { setModified } = useForm()\n const { id, data, docPermissions, setUploadStatus } = useDocumentInfo()\n const isFormSubmitting = useFormProcessing()\n const { errorMessage, setValue, showError, value } = useField<File>({\n path: 'file',\n validate,\n })\n\n const [fileSrc, setFileSrc] = useState<null | string>(null)\n const [removedFile, setRemovedFile] = useState(false)\n const [filename, setFilename] = useState<string>(value?.name || '')\n const [showUrlInput, setShowUrlInput] = useState(false)\n const [fileUrl, setFileUrl] = useState<string>('')\n\n const urlInputRef = useRef<HTMLInputElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const useServerSideFetch =\n typeof uploadConfig?.pasteURL === 'object' && uploadConfig.pasteURL.allowList?.length > 0\n\n const handleFileChange = useCallback(\n ({ file, isNewFile = true }: { file: File | null; isNewFile?: boolean }) => {\n if (isNewFile && file instanceof File) {\n setFileSrc(URL.createObjectURL(file))\n }\n\n setValue(file)\n setShowUrlInput(false)\n setUploadControlFileUrl('')\n setUploadControlFileName(null)\n setUploadControlFile(null)\n\n if (typeof onChange === 'function') {\n onChange(file)\n }\n },\n [onChange, setValue, setUploadControlFile, setUploadControlFileName, setUploadControlFileUrl],\n )\n\n const renameFile = (fileToChange: File, newName: string): File => {\n // Creating a new File object with updated properties\n const newFile = new File([fileToChange], newName, {\n type: fileToChange.type,\n lastModified: fileToChange.lastModified,\n })\n return newFile\n }\n\n const handleFileNameChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const updatedFileName = e.target.value\n\n if (value) {\n handleFileChange({ file: renameFile(value, updatedFileName), isNewFile: false })\n setFilename(updatedFileName)\n }\n },\n [handleFileChange, value],\n )\n\n const handleFileSelection = useCallback(\n (files: FileList) => {\n const fileToUpload = files?.[0]\n handleFileChange({ file: fileToUpload })\n },\n [handleFileChange],\n )\n\n const handleFileRemoval = useCallback(() => {\n setRemovedFile(true)\n handleFileChange({ file: null })\n setFileSrc('')\n setFileUrl('')\n resetUploadEdits()\n setShowUrlInput(false)\n setUploadControlFileUrl('')\n setUploadControlFileName(null)\n setUploadControlFile(null)\n }, [\n handleFileChange,\n resetUploadEdits,\n setUploadControlFile,\n setUploadControlFileName,\n setUploadControlFileUrl,\n ])\n\n const onEditsSave = useCallback(\n (args: UploadEdits) => {\n setModified(true)\n updateUploadEdits(args)\n },\n [setModified, updateUploadEdits],\n )\n\n const handleUrlSubmit = useCallback(async () => {\n if (!fileUrl || uploadConfig?.pasteURL === false) {\n return\n }\n\n setUploadStatus('uploading')\n try {\n // Attempt client-side fetch\n const clientResponse = await fetch(fileUrl)\n\n if (!clientResponse.ok) {\n throw new Error(`Fetch failed with status: ${clientResponse.status}`)\n }\n\n const blob = await clientResponse.blob()\n const fileName = uploadControlFileName || decodeURIComponent(fileUrl.split('/').pop() || '')\n const file = new File([blob], fileName, { type: blob.type })\n\n handleFileChange({ file })\n setUploadStatus('idle')\n return // Exit if client-side fetch succeeds\n } catch (_clientError) {\n if (!useServerSideFetch) {\n // If server-side fetch is not enabled, show client-side error\n toast.error('Failed to fetch the file.')\n setUploadStatus('failed')\n return\n }\n }\n\n // Attempt server-side fetch if client-side fetch fails and useServerSideFetch is true\n try {\n const pasteURL = `/${collectionSlug}/paste-url${id ? `/${id}?` : '?'}src=${encodeURIComponent(fileUrl)}`\n const serverResponse = await fetch(`${serverURL}${api}${pasteURL}`)\n\n if (!serverResponse.ok) {\n throw new Error(`Fetch failed with status: ${serverResponse.status}`)\n }\n\n const blob = await serverResponse.blob()\n const fileName = decodeURIComponent(fileUrl.split('/').pop() || '')\n const file = new File([blob], fileName, { type: blob.type })\n\n handleFileChange({ file })\n setUploadStatus('idle')\n } catch (_serverError) {\n toast.error('The provided URL is not allowed.')\n setUploadStatus('failed')\n }\n }, [\n api,\n collectionSlug,\n fileUrl,\n handleFileChange,\n id,\n serverURL,\n setUploadStatus,\n uploadConfig,\n uploadControlFileName,\n useServerSideFetch,\n ])\n\n useEffect(() => {\n if (initialState?.file?.value instanceof File) {\n setFileSrc(URL.createObjectURL(initialState.file.value))\n setRemovedFile(false)\n }\n }, [initialState])\n\n useEffect(() => {\n if (showUrlInput && urlInputRef.current) {\n // urlInputRef.current.focus() // Focus on the remote-url input field when showUrlInput is true\n }\n }, [showUrlInput])\n\n useEffect(() => {\n if (isFormSubmitting) {\n setRemovedFile(false)\n }\n }, [isFormSubmitting])\n\n const canRemoveUpload = docPermissions?.update\n\n const hasImageSizes = uploadConfig?.imageSizes?.length > 0\n const hasResizeOptions = Boolean(uploadConfig?.resizeOptions)\n // Explicity check if set to true, default is undefined\n const focalPointEnabled = uploadConfig?.focalPoint === true\n\n const { crop: showCrop = true, focalPoint = true } = uploadConfig\n\n const showFocalPoint = focalPoint && (hasImageSizes || hasResizeOptions || focalPointEnabled)\n\n const acceptMimeTypes = uploadConfig.mimeTypes?.join(', ')\n\n const imageCacheTag = uploadConfig?.cacheTags && data?.updatedAt\n\n useEffect(() => {\n const handleControlFileUrl = async () => {\n if (uploadControlFileUrl) {\n setFileUrl(uploadControlFileUrl)\n await handleUrlSubmit()\n }\n }\n\n void handleControlFileUrl()\n }, [uploadControlFileUrl, handleUrlSubmit])\n\n useEffect(() => {\n const handleControlFile = () => {\n if (uploadControlFile) {\n handleFileChange({ file: uploadControlFile })\n }\n }\n\n void handleControlFile()\n }, [uploadControlFile, handleFileChange])\n\n return (\n <div className={[fieldBaseClass, baseClass].filter(Boolean).join(' ')}>\n <FieldError message={errorMessage} showError={showError} />\n {data && data.filename && !removedFile && (\n <FileDetails\n collectionSlug={collectionSlug}\n customUploadActions={customActions}\n doc={data}\n enableAdjustments={showCrop || showFocalPoint}\n handleRemove={canRemoveUpload ? handleFileRemoval : undefined}\n hasImageSizes={hasImageSizes}\n hideRemoveFile={uploadConfig.hideRemoveFile}\n imageCacheTag={imageCacheTag}\n uploadConfig={uploadConfig}\n />\n )}\n {((!uploadConfig.hideFileInputOnCreate && !data?.filename) || removedFile) && (\n <div className={`${baseClass}__upload`}>\n {!value && !showUrlInput && (\n <Dropzone onChange={handleFileSelection}>\n <div className={`${baseClass}__dropzoneContent`}>\n <div className={`${baseClass}__dropzoneButtons`}>\n <Button\n buttonStyle=\"pill\"\n onClick={() => {\n if (inputRef.current) {\n inputRef.current.click()\n }\n }}\n size=\"small\"\n >\n {t('upload:selectFile')}\n </Button>\n <input\n accept={acceptMimeTypes}\n aria-hidden=\"true\"\n className={`${baseClass}__hidden-input`}\n hidden\n onChange={(e) => {\n if (e.target.files && e.target.files.length > 0) {\n handleFileSelection(e.target.files)\n }\n }}\n ref={inputRef}\n type=\"file\"\n />\n {uploadConfig?.pasteURL !== false && (\n <Fragment>\n <span className={`${baseClass}__orText`}>{t('general:or')}</span>\n <Button\n buttonStyle=\"pill\"\n onClick={() => {\n setShowUrlInput(true)\n setUploadControlFileUrl('')\n setUploadControlFile(null)\n setUploadControlFileName(null)\n }}\n size=\"small\"\n >\n {t('upload:pasteURL')}\n </Button>\n </Fragment>\n )}\n\n {UploadControls ? UploadControls : null}\n </div>\n <p className={`${baseClass}__dragAndDropText`}>\n {t('general:or')} {t('upload:dragAndDrop')}\n </p>\n </div>\n </Dropzone>\n )}\n {showUrlInput && (\n <React.Fragment>\n <div className={`${baseClass}__remote-file-wrap`}>\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <input\n className={`${baseClass}__remote-file`}\n onChange={(e) => {\n setFileUrl(e.target.value)\n }}\n ref={urlInputRef}\n title={fileUrl}\n type=\"text\"\n value={fileUrl}\n />\n <div className={`${baseClass}__add-file-wrap`}>\n <button\n className={`${baseClass}__add-file`}\n onClick={() => {\n void handleUrlSubmit()\n }}\n type=\"button\"\n >\n {t('upload:addFile')}\n </button>\n </div>\n </div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={() => {\n setShowUrlInput(false)\n setUploadControlFileUrl('')\n setUploadControlFile(null)\n setUploadControlFileName(null)\n }}\n round\n tooltip={t('general:cancel')}\n />\n </React.Fragment>\n )}\n {value && fileSrc && (\n <React.Fragment>\n <div className={`${baseClass}__thumbnail-wrap`}>\n <Thumbnail\n collectionSlug={collectionSlug}\n fileSrc={isImage(value.type) ? fileSrc : null}\n />\n </div>\n <div className={`${baseClass}__file-adjustments`}>\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <input\n className={`${baseClass}__filename`}\n onChange={handleFileNameChange}\n title={filename || value.name}\n type=\"text\"\n value={filename || value.name}\n />\n <UploadActions\n customActions={customActions}\n enableAdjustments={showCrop || showFocalPoint}\n enablePreviewSizes={hasImageSizes && data?.filename && !removedFile}\n mimeType={value.type}\n />\n </div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={handleFileRemoval}\n round\n tooltip={t('general:cancel')}\n />\n </React.Fragment>\n )}\n </div>\n )}\n {(value || data?.filename) && (\n <EditDepthProvider>\n <Drawer Header={null} slug={editDrawerSlug}>\n <EditUpload\n fileName={value?.name || data?.filename}\n fileSrc={data?.url || fileSrc}\n imageCacheTag={imageCacheTag}\n initialCrop={uploadEdits?.crop ?? undefined}\n initialFocalPoint={{\n x: uploadEdits?.focalPoint?.x || data?.focalX || 50,\n y: uploadEdits?.focalPoint?.y || data?.focalY || 50,\n }}\n onSave={onEditsSave}\n showCrop={showCrop}\n showFocalPoint={showFocalPoint}\n />\n </Drawer>\n </EditDepthProvider>\n )}\n {data && hasImageSizes && (\n <Drawer\n className={`${baseClass}__previewDrawer`}\n hoverTitle\n slug={sizePreviewSlug}\n title={t('upload:sizesFor', { label: data.filename })}\n >\n <PreviewSizes doc={data} imageCacheTag={imageCacheTag} uploadConfig={uploadConfig} />\n </Drawer>\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}