@payloadcms/ui 3.0.0-beta.120 → 3.0.0-beta.121

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/elements/BulkUpload/ActionsBar/index.scss +4 -0
  2. package/dist/elements/BulkUpload/FileSidebar/index.d.ts.map +1 -1
  3. package/dist/elements/BulkUpload/FileSidebar/index.js +34 -25
  4. package/dist/elements/BulkUpload/FileSidebar/index.js.map +1 -1
  5. package/dist/elements/BulkUpload/FileSidebar/index.scss +40 -2
  6. package/dist/elements/BulkUpload/FormsManager/index.d.ts +1 -0
  7. package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
  8. package/dist/elements/BulkUpload/FormsManager/index.js +35 -5
  9. package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
  10. package/dist/elements/RelationshipTable/index.d.ts +1 -0
  11. package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
  12. package/dist/elements/RelationshipTable/index.js +94 -92
  13. package/dist/elements/RelationshipTable/index.js.map +1 -1
  14. package/dist/elements/Thumbnail/createThumbnail.d.ts +5 -0
  15. package/dist/elements/Thumbnail/createThumbnail.d.ts.map +1 -0
  16. package/dist/elements/Thumbnail/createThumbnail.js +50 -0
  17. package/dist/elements/Thumbnail/createThumbnail.js.map +1 -0
  18. package/dist/elements/Thumbnail/index.d.ts.map +1 -1
  19. package/dist/elements/Thumbnail/index.js.map +1 -1
  20. package/dist/exports/client/index.js +22 -22
  21. package/dist/exports/client/index.js.map +4 -4
  22. package/dist/fields/Join/index.d.ts.map +1 -1
  23. package/dist/fields/Join/index.js +2 -0
  24. package/dist/fields/Join/index.js.map +1 -1
  25. package/dist/fields/Textarea/index.d.ts.map +1 -1
  26. package/dist/fields/Textarea/index.js +1 -0
  27. package/dist/fields/Textarea/index.js.map +1 -1
  28. package/dist/providers/ListQuery/index.js +1 -1
  29. package/dist/providers/ListQuery/index.js.map +1 -1
  30. package/dist/styles.css +1 -1
  31. package/package.json +5 -5
@@ -33,6 +33,10 @@
33
33
  width: calc(var(--base) * 1.2);
34
34
  height: calc(var(--base) * 1.2);
35
35
 
36
+ svg {
37
+ max-width: 1rem;
38
+ }
39
+
36
40
  &:hover {
37
41
  background-color: var(--theme-elevation-200);
38
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/BulkUpload/FileSidebar/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,OAAO,CAAA;AAgBzB,OAAO,cAAc,CAAA;AASrB,wBAAgB,WAAW,sBA+J1B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/BulkUpload/FileSidebar/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,OAAO,CAAA;AAgBzB,OAAO,cAAc,CAAA;AASrB,wBAAgB,WAAW,sBAsK1B"}
@@ -25,7 +25,7 @@ const AnimateHeight = AnimateHeightImport.default || AnimateHeightImport;
25
25
  const addMoreFilesDrawerSlug = 'bulk-upload-drawer--add-more-files';
26
26
  const baseClass = 'file-selections';
27
27
  export function FileSidebar() {
28
- const $ = _c(34);
28
+ const $ = _c(36);
29
29
  const {
30
30
  activeIndex,
31
31
  addFiles,
@@ -33,6 +33,7 @@ export function FileSidebar() {
33
33
  isInitializing,
34
34
  removeFile,
35
35
  setActiveIndex,
36
+ thumbnailUrls,
36
37
  totalErrorCount
37
38
  } = useFormsManager();
38
39
  const {
@@ -88,24 +89,24 @@ export function FileSidebar() {
88
89
  }
89
90
  const t4 = t3.join(" ");
90
91
  let t5;
91
- if ($[7] !== breakpoints.m || $[8] !== showFiles || $[9] !== totalErrorCount || $[10] !== i18n || $[11] !== totalFileCount || $[12] !== t || $[13] !== maxFiles || $[14] !== openModal || $[15] !== closeModal || $[16] !== handleAddFiles || $[17] !== isInitializing || $[18] !== forms || $[19] !== initialFiles || $[20] !== activeIndex || $[21] !== setActiveIndex || $[22] !== handleRemoveFile || $[23] !== t4) {
92
+ if ($[7] !== breakpoints.m || $[8] !== showFiles || $[9] !== totalErrorCount || $[10] !== i18n || $[11] !== totalFileCount || $[12] !== t || $[13] !== maxFiles || $[14] !== openModal || $[15] !== closeModal || $[16] !== handleAddFiles || $[17] !== isInitializing || $[18] !== forms || $[19] !== initialFiles || $[20] !== activeIndex || $[21] !== setActiveIndex || $[22] !== thumbnailUrls || $[23] !== handleRemoveFile || $[24] !== t4) {
92
93
  let t6;
93
- if ($[25] === Symbol.for("react.memo_cache_sentinel")) {
94
+ if ($[26] === Symbol.for("react.memo_cache_sentinel")) {
94
95
  t6 = () => setShowFiles(prev => !prev);
95
- $[25] = t6;
96
+ $[26] = t6;
96
97
  } else {
97
- t6 = $[25];
98
+ t6 = $[26];
98
99
  }
99
100
  let t7;
100
- if ($[26] !== closeModal) {
101
+ if ($[27] !== closeModal) {
101
102
  t7 = () => closeModal(addMoreFilesDrawerSlug);
102
- $[26] = closeModal;
103
- $[27] = t7;
103
+ $[27] = closeModal;
104
+ $[28] = t7;
104
105
  } else {
105
- t7 = $[27];
106
+ t7 = $[28];
106
107
  }
107
108
  let t8;
108
- if ($[28] !== activeIndex || $[29] !== setActiveIndex || $[30] !== i18n || $[31] !== t || $[32] !== handleRemoveFile) {
109
+ if ($[29] !== activeIndex || $[30] !== setActiveIndex || $[31] !== thumbnailUrls || $[32] !== i18n || $[33] !== t || $[34] !== handleRemoveFile) {
109
110
  t8 = (t9, index_0) => {
110
111
  const {
111
112
  errorCount,
@@ -120,7 +121,7 @@ export function FileSidebar() {
120
121
  type: "button",
121
122
  children: [_jsx(Thumbnail, {
122
123
  className: `${baseClass}__thumbnail`,
123
- fileSrc: isImage(currentFile.type) ? URL.createObjectURL(currentFile) : undefined
124
+ fileSrc: isImage(currentFile.type) ? thumbnailUrls[index_0] : undefined
124
125
  }), _jsx("div", {
125
126
  className: `${baseClass}__fileDetails`,
126
127
  children: _jsx("p", {
@@ -148,14 +149,15 @@ export function FileSidebar() {
148
149
  })]
149
150
  }, index_0);
150
151
  };
151
- $[28] = activeIndex;
152
- $[29] = setActiveIndex;
153
- $[30] = i18n;
154
- $[31] = t;
155
- $[32] = handleRemoveFile;
156
- $[33] = t8;
152
+ $[29] = activeIndex;
153
+ $[30] = setActiveIndex;
154
+ $[31] = thumbnailUrls;
155
+ $[32] = i18n;
156
+ $[33] = t;
157
+ $[34] = handleRemoveFile;
158
+ $[35] = t8;
157
159
  } else {
158
- t8 = $[33];
160
+ t8 = $[35];
159
161
  }
160
162
  t5 = _jsxs("div", {
161
163
  className: t4,
@@ -182,13 +184,19 @@ export function FileSidebar() {
182
184
  children: [typeof maxFiles === "number" && totalFileCount < maxFiles ? _jsx(Pill, {
183
185
  onClick: () => openModal(addMoreFilesDrawerSlug),
184
186
  children: t("upload:addFile")
185
- }) : null, _jsx(Button, {
187
+ }) : null, _jsxs(Button, {
186
188
  buttonStyle: "transparent",
187
189
  className: `${baseClass}__toggler`,
188
190
  onClick: t6,
189
- children: _jsx(ChevronIcon, {
191
+ children: [_jsx("span", {
192
+ className: `${baseClass}__toggler__label`,
193
+ children: _jsxs("strong", {
194
+ title: `${totalFileCount} ${t(totalFileCount > 1 ? "upload:filesToUpload" : "upload:fileToUpload")}`,
195
+ children: [totalFileCount, " ", t(totalFileCount > 1 ? "upload:filesToUpload" : "upload:fileToUpload")]
196
+ })
197
+ }), _jsx(ChevronIcon, {
190
198
  direction: showFiles ? "down" : "up"
191
- })
199
+ })]
192
200
  }), _jsx(Drawer, {
193
201
  gutter: false,
194
202
  Header: null,
@@ -230,11 +238,12 @@ export function FileSidebar() {
230
238
  $[19] = initialFiles;
231
239
  $[20] = activeIndex;
232
240
  $[21] = setActiveIndex;
233
- $[22] = handleRemoveFile;
234
- $[23] = t4;
235
- $[24] = t5;
241
+ $[22] = thumbnailUrls;
242
+ $[23] = handleRemoveFile;
243
+ $[24] = t4;
244
+ $[25] = t5;
236
245
  } else {
237
- t5 = $[24];
246
+ t5 = $[25];
238
247
  }
239
248
  return t5;
240
249
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useModal","useWindowInfo","isImage","React","AnimateHeightImport","ChevronIcon","XIcon","useTranslation","Button","Drawer","ErrorPill","Pill","ShimmerEffect","Thumbnail","Actions","AddFilesView","useFormsManager","useBulkUpload","AnimateHeight","default","addMoreFilesDrawerSlug","baseClass","FileSidebar","$","activeIndex","addFiles","forms","isInitializing","removeFile","setActiveIndex","totalErrorCount","initialFiles","maxFiles","i18n","t","closeModal","openModal","showFiles","setShowFiles","useState","breakpoints","t0","indexToRemove","handleRemoveFile","t1","filelist","handleAddFiles","getFileSize","_temp","totalFileCount","length","t2","t3","filter","Boolean","t4","join","t5","m","t6","Symbol","for","prev","t7","t8","t9","index_0","errorCount","formState","currentFile","file","value","_jsxs","className","index","children","onClick","type","_jsx","fileSrc","URL","createObjectURL","undefined","title","name","count","withMessage","buttonStyle","direction","gutter","Header","slug","onCancel","onDrop","duration","height","Array","from","map","_temp2","file_0","animationDelay","size","i","Math","floor","log","decimals","formattedSize","pow","toFixed"],"sources":["../../../../src/elements/BulkUpload/FileSidebar/index.tsx"],"sourcesContent":["'use client'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { useWindowInfo } from '@faceless-ui/window-info'\nimport { isImage } from 'payload/shared'\nimport React from 'react'\nimport AnimateHeightImport from 'react-animate-height'\n\nimport { ChevronIcon } from '../../../icons/Chevron/index.js'\nimport { XIcon } from '../../../icons/X/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { Button } from '../../Button/index.js'\nimport { Drawer } from '../../Drawer/index.js'\nimport { ErrorPill } from '../../ErrorPill/index.js'\nimport { Pill } from '../../Pill/index.js'\nimport { ShimmerEffect } from '../../ShimmerEffect/index.js'\nimport { Thumbnail } from '../../Thumbnail/index.js'\nimport { Actions } from '../ActionsBar/index.js'\nimport { AddFilesView } from '../AddFilesView/index.js'\nimport { useFormsManager } from '../FormsManager/index.js'\nimport { useBulkUpload } from '../index.js'\nimport './index.scss'\n\nconst AnimateHeight = (AnimateHeightImport.default ||\n AnimateHeightImport) as typeof AnimateHeightImport.default\n\nconst addMoreFilesDrawerSlug = 'bulk-upload-drawer--add-more-files'\n\nconst baseClass = 'file-selections'\n\nexport function FileSidebar() {\n const {\n activeIndex,\n addFiles,\n forms,\n isInitializing,\n removeFile,\n setActiveIndex,\n totalErrorCount,\n } = useFormsManager()\n const { initialFiles, maxFiles } = useBulkUpload()\n const { i18n, t } = useTranslation()\n const { closeModal, openModal } = useModal()\n const [showFiles, setShowFiles] = React.useState(false)\n const { breakpoints } = useWindowInfo()\n\n const handleRemoveFile = React.useCallback(\n (indexToRemove: number) => {\n removeFile(indexToRemove)\n },\n [removeFile],\n )\n\n const handleAddFiles = React.useCallback(\n (filelist: FileList) => {\n void addFiles(filelist)\n closeModal(addMoreFilesDrawerSlug)\n },\n [addFiles, closeModal],\n )\n\n const getFileSize = React.useCallback((file: File) => {\n const size = file.size\n const i = size === 0 ? 0 : Math.floor(Math.log(size) / Math.log(1024))\n const decimals = i > 1 ? 1 : 0\n const formattedSize =\n (size / Math.pow(1024, i)).toFixed(decimals) + ' ' + ['B', 'kB', 'MB', 'GB', 'TB'][i]\n return formattedSize\n }, [])\n\n const totalFileCount = isInitializing ? initialFiles.length : forms.length\n\n return (\n <div\n className={[baseClass, showFiles && `${baseClass}__showingFiles`].filter(Boolean).join(' ')}\n >\n {breakpoints.m && showFiles ? <div className={`${baseClass}__mobileBlur`} /> : null}\n <div className={`${baseClass}__header`}>\n <div className={`${baseClass}__headerTopRow`}>\n <div className={`${baseClass}__header__text`}>\n <ErrorPill count={totalErrorCount} i18n={i18n} withMessage />\n <p>\n <strong\n title={`${totalFileCount} ${t(totalFileCount > 1 ? 'upload:filesToUpload' : 'upload:fileToUpload')}`}\n >\n {totalFileCount}{' '}\n {t(totalFileCount > 1 ? 'upload:filesToUpload' : 'upload:fileToUpload')}\n </strong>\n </p>\n </div>\n\n <div className={`${baseClass}__header__actions`}>\n {typeof maxFiles === 'number' && totalFileCount < maxFiles ? (\n <Pill onClick={() => openModal(addMoreFilesDrawerSlug)}>{t('upload:addFile')}</Pill>\n ) : null}\n <Button\n buttonStyle=\"transparent\"\n className={`${baseClass}__toggler`}\n onClick={() => setShowFiles((prev) => !prev)}\n >\n <ChevronIcon direction={showFiles ? 'down' : 'up'} />\n </Button>\n\n <Drawer gutter={false} Header={null} slug={addMoreFilesDrawerSlug}>\n <AddFilesView\n onCancel={() => closeModal(addMoreFilesDrawerSlug)}\n onDrop={handleAddFiles}\n />\n </Drawer>\n </div>\n </div>\n\n <div className={`${baseClass}__header__mobileDocActions`}>\n <Actions />\n </div>\n </div>\n\n <div className={`${baseClass}__animateWrapper`}>\n <AnimateHeight duration={200} height={!breakpoints.m || showFiles ? 'auto' : 0}>\n <div className={`${baseClass}__filesContainer`}>\n {isInitializing && forms.length === 0 && initialFiles.length > 0\n ? Array.from(initialFiles).map((file, index) => (\n <ShimmerEffect\n animationDelay={`calc(${index} * ${60}ms)`}\n height=\"35px\"\n key={index}\n />\n ))\n : null}\n {forms.map(({ errorCount, formState }, index) => {\n const currentFile = formState.file.value as File\n\n return (\n <div\n className={[\n `${baseClass}__fileRowContainer`,\n index === activeIndex && `${baseClass}__fileRowContainer--active`,\n errorCount && errorCount > 0 && `${baseClass}__fileRowContainer--error`,\n ]\n .filter(Boolean)\n .join(' ')}\n key={index}\n >\n <button\n className={`${baseClass}__fileRow`}\n onClick={() => setActiveIndex(index)}\n type=\"button\"\n >\n <Thumbnail\n className={`${baseClass}__thumbnail`}\n fileSrc={\n isImage(currentFile.type) ? URL.createObjectURL(currentFile) : undefined\n }\n />\n <div className={`${baseClass}__fileDetails`}>\n <p className={`${baseClass}__fileName`} title={currentFile.name}>\n {currentFile.name}\n </p>\n </div>\n <p className={`${baseClass}__fileSize`}>{getFileSize(currentFile)}</p>\n <div className={`${baseClass}__remove ${baseClass}__remove--underlay`}>\n <XIcon />\n </div>\n\n {errorCount ? (\n <ErrorPill\n className={`${baseClass}__errorCount`}\n count={errorCount}\n i18n={i18n}\n />\n ) : null}\n </button>\n\n <button\n aria-label={t('general:remove')}\n className={`${baseClass}__remove ${baseClass}__remove--overlay`}\n onClick={() => handleRemoveFile(index)}\n type=\"button\"\n >\n <XIcon />\n </button>\n </div>\n )\n })}\n </div>\n </AnimateHeight>\n </div>\n </div>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAEA,SAASC,QAAQ,QAAQ;AACzB,SAASC,aAAa,QAAQ;AAC9B,SAASC,OAAO,QAAQ;AACxB,OAAOC,KAAA,MAAW;AAClB,OAAOC,mBAAA,MAAyB;AAEhC,SAASC,WAAW,QAAQ;AAC5B,SAASC,KAAK,QAAQ;AACtB,SAASC,cAAc,QAAQ;AAC/B,SAASC,MAAM,QAAQ;AACvB,SAASC,MAAM,QAAQ;AACvB,SAASC,SAAS,QAAQ;AAC1B,SAASC,IAAI,QAAQ;AACrB,SAASC,aAAa,QAAQ;AAC9B,SAASC,SAAS,QAAQ;AAC1B,SAASC,OAAO,QAAQ;AACxB,SAASC,YAAY,QAAQ;AAC7B,SAASC,eAAe,QAAQ;AAChC,SAASC,aAAa,QAAQ;AAC9B,OAAO;AAEP,MAAMC,aAAA,GAAiBd,mBAAA,CAAoBe,OAAO,IAChDf,mBAAA;AAEF,MAAMgB,sBAAA,GAAyB;AAE/B,MAAMC,SAAA,GAAY;AAElB,OAAO,SAAAC,YAAA;EAAA,MAAAC,CAAA,GAAAxB,EAAA;EACL;IAAAyB,WAAA;IAAAC,QAAA;IAAAC,KAAA;IAAAC,cAAA;IAAAC,UAAA;IAAAC,cAAA;IAAAC;EAAA,IAQId,eAAA;EACJ;IAAAe,YAAA;IAAAC;EAAA,IAAmCf,aAAA;EACnC;IAAAgB,IAAA;IAAAC;EAAA,IAAoB3B,cAAA;EACpB;IAAA4B,UAAA;IAAAC;EAAA,IAAkCpC,QAAA;EAClC,OAAAqC,SAAA,EAAAC,YAAA,IAAkCnC,KAAA,CAAAoC,QAAA,MAAe;EACjD;IAAAC;EAAA,IAAwBvC,aAAA;EAAA,IAAAwC,EAAA;EAAA,IAAAlB,CAAA,QAAAK,UAAA;IAGtBa,EAAA,GAAAC,aAAA;MACEd,UAAA,CAAWc,aAAA;IAAA;IACbnB,CAAA,MAAAK,UAAA;IAAAL,CAAA,MAAAkB,EAAA;EAAA;IAAAA,EAAA,GAAAlB,CAAA;EAAA;EAHF,MAAAoB,gBAAA,GAAyBF,EAIX;EAAA,IAAAG,EAAA;EAAA,IAAArB,CAAA,QAAAE,QAAA,IAAAF,CAAA,QAAAY,UAAA;IAIZS,EAAA,GAAAC,QAAA;MACOpB,QAAA,CAASoB,QAAA;MACdV,UAAA,CAAAf,sBAAW;IAAA;IACbG,CAAA,MAAAE,QAAA;IAAAF,CAAA,MAAAY,UAAA;IAAAZ,CAAA,MAAAqB,EAAA;EAAA;IAAAA,EAAA,GAAArB,CAAA;EAAA;EAJF,MAAAuB,cAAA,GAAuBF,EAKC;EAGxB,MAAAG,WAAA,GAAAC,KAAA;EASA,MAAAC,cAAA,GAAuBtB,cAAA,GAAiBI,YAAA,CAAAmB,MAAA,GAAsBxB,KAAA,CAAAwB,MAAY;EAI/C,MAAAC,EAAA,GAAAd,SAAA,IAAa,GAAAhB,SAAA,gBAA4B;EAAA,IAAA+B,EAAA;EAAA,IAAA7B,CAAA,QAAA4B,EAAA;IAArDC,EAAA,IAAA/B,SAAA,EAAY8B,EAAyC,EAAAE,MAAA,CAAAC,OAAS;IAAA/B,CAAA,MAAA4B,EAAA;IAAA5B,CAAA,MAAA6B,EAAA;EAAA;IAAAA,EAAA,GAAA7B,CAAA;EAAA;EAA9D,MAAAgC,EAAA,GAAAH,EAA8D,CAAAI,IAAA,CAAc;EAAA,IAAAC,EAAA;EAAA,IAAAlC,CAAA,QAAAiB,WAAA,CAAAkB,CAAA,IAAAnC,CAAA,QAAAc,SAAA,IAAAd,CAAA,QAAAO,eAAA,IAAAP,CAAA,SAAAU,IAAA,IAAAV,CAAA,SAAA0B,cAAA,IAAA1B,CAAA,SAAAW,CAAA,IAAAX,CAAA,SAAAS,QAAA,IAAAT,CAAA,SAAAa,SAAA,IAAAb,CAAA,SAAAY,UAAA,IAAAZ,CAAA,SAAAuB,cAAA,IAAAvB,CAAA,SAAAI,cAAA,IAAAJ,CAAA,SAAAG,KAAA,IAAAH,CAAA,SAAAQ,YAAA,IAAAR,CAAA,SAAAC,WAAA,IAAAD,CAAA,SAAAM,cAAA,IAAAN,CAAA,SAAAoB,gBAAA,IAAApB,CAAA,SAAAgC,EAAA;IAAA,IAAAI,EAAA;IAAA,IAAApC,CAAA,SAAAqC,MAAA,CAAAC,GAAA;MAwBtEF,EAAA,GAAAA,CAAA,KAAMrB,YAAA,CAAAwB,IAAA,KAAwBA,IAAA;MAAAvC,CAAA,OAAAoC,EAAA;IAAA;MAAAA,EAAA,GAAApC,CAAA;IAAA;IAAA,IAAAwC,EAAA;IAAA,IAAAxC,CAAA,SAAAY,UAAA;MAO3B4B,EAAA,GAAAA,CAAA,KAAM5B,UAAA,CAAAf,sBAAW;MAAAG,CAAA,OAAAY,UAAA;MAAAZ,CAAA,OAAAwC,EAAA;IAAA;MAAAA,EAAA,GAAAxC,CAAA;IAAA;IAAA,IAAAyC,EAAA;IAAA,IAAAzC,CAAA,SAAAC,WAAA,IAAAD,CAAA,SAAAM,cAAA,IAAAN,CAAA,SAAAU,IAAA,IAAAV,CAAA,SAAAW,CAAA,IAAAX,CAAA,SAAAoB,gBAAA;MAwBpBqB,EAAA,GAAAA,CAAAC,EAAA,EAAAC,OAAA;QAAC;UAAAC,UAAA;UAAAC;QAAA,IAAAH,EAAyB;QACnC,MAAAI,WAAA,GAAoBD,SAAA,CAAAE,IAAA,CAAAC,KAAA;QAAoB,OAGtCC,KAAA,CAAC;UAAAC,SAAA,EACY,CACT,GAAApD,SAAA,oBAAgC,EAChCqD,OAAA,KAAUlD,WAAA,IAAe,GAAAH,SAAA,4BAAwC,EACjE8C,UAAA,IAAcA,UAAA,IAAa,IAAK,GAAA9C,SAAA,2BAAuC,EAAAgC,MAAA,CAAAC,OAE/D,EAAAE,IAAA,CACF;UAAAmB,QAAA,GAGRH,KAAA,CAAC;YAAAC,SAAA,EACY,GAAApD,SAAA,WAAuB;YAAAuD,OAAA,EAAAA,CAAA,KACnB/C,cAAA,CAAe6C,OAAA;YAAAG,IAAA,EACzB;YAAAF,QAAA,GAELG,IAAA,CAAAjE,SAAA;cAAA4D,SAAA,EACa,GAAApD,SAAA,aAAyB;cAAA0D,OAAA,EAElC7E,OAAA,CAAQmE,WAAA,CAAAQ,IAAgB,IAAIG,GAAA,CAAAC,eAAA,CAAoBZ,WAAA,IAAAa;YAAe,C,GAGnEJ,IAAA,CAAC;cAAAL,SAAA,EAAe,GAAApD,SAAA,eAA2B;cAAAsD,QAAA,EACzCG,IAAA,CAAC;gBAAAL,SAAA,EAAa,GAAApD,SAAA,YAAwB;gBAAA8D,KAAA,EAASd,WAAA,CAAAe,IAAA;gBAAAT,QAAA,EAC5CN,WAAA,CAAAe;cAAA,C;gBAGLN,IAAA,CAAC;cAAAL,SAAA,EAAa,GAAApD,SAAA,YAAwB;cAAAsD,QAAA,EAAG5B,WAAA,CAAYsB,WAAA;YAAA,C,GACrDS,IAAA,CAAC;cAAAL,SAAA,EAAe,GAAApD,SAAA,YAAAA,SAAA,oBAAqD;cAAAsD,QAAA,EACnEG,IAAA,CAAAxE,KAAA,IAAC;YAAA,C,GAGF6D,UAAA,GACCW,IAAA,CAAApE,SAAA;cAAA+D,SAAA,EACa,GAAApD,SAAA,cAA0B;cAAAgE,KAAA,EAC9BlB,UAAA;cAAAlC;YAAA,C,QAGP;UAAA,C,GAGN6C,IAAA,CAAC;YAAA,cACa5C,CAAA,CAAE;YAAAuC,SAAA,EACH,GAAApD,SAAA,YAAAA,SAAA,mBAAoD;YAAAuD,OAAA,EAAAA,CAAA,KAChDjC,gBAAA,CAAiB+B,OAAA;YAAAG,IAAA,EAC3B;YAAAF,QAAA,EAELG,IAAA,CAAAxE,KAAA,IAAC;UAAA,C;WAtCEoE,OAAA;MAAA;MA0CXnD,CAAA,OAAAC,WAAA;MAAAD,CAAA,OAAAM,cAAA;MAAAN,CAAA,OAAAU,IAAA;MAAAV,CAAA,OAAAW,CAAA;MAAAX,CAAA,OAAAoB,gBAAA;MAAApB,CAAA,OAAAyC,EAAA;IAAA;MAAAA,EAAA,GAAAzC,CAAA;IAAA;IA9GRkC,EAAA,GAAAe,KAAA,CAAC;MAAAC,SAAA,EACYlB,EAA4E;MAAAoB,QAAA,GAEtFnC,WAAA,CAAAkB,CAAA,IAAiBrB,SAAA,GAAYyC,IAAA,CAAC;QAAAL,SAAA,EAAe,GAAApD,SAAA;MAA0B,C,QAAO,EAC/EmD,KAAA,CAAC;QAAAC,SAAA,EAAe,GAAApD,SAAA,UAAsB;QAAAsD,QAAA,GACpCH,KAAA,CAAC;UAAAC,SAAA,EAAe,GAAApD,SAAA,gBAA4B;UAAAsD,QAAA,GAC1CH,KAAA,CAAC;YAAAC,SAAA,EAAe,GAAApD,SAAA,gBAA4B;YAAAsD,QAAA,GAC1CG,IAAA,CAAApE,SAAA;cAAA2E,KAAA,EAAkBvD,eAAA;cAAAG,IAAA;cAAAqD,WAAA;YAAA,C,GAClBR,IAAA,CAAC;cAAAH,QAAA,EACCH,KAAA,CAAC;gBAAAW,KAAA,EACQ,GAAGlC,cAAA,IAAkBf,CAAA,CAAEe,cAAA,IAAiB,GAAI,yBAAyB,wBAAwB;gBAAA0B,QAAA,GAEnG1B,cAAA,EAAgB,KAChBf,CAAA,CAAEe,cAAA,IAAiB,GAAI,yBAAyB;cAAA,C;;cAKvDuB,KAAA,CAAC;YAAAC,SAAA,EAAe,GAAApD,SAAA,mBAA+B;YAAAsD,QAAA,GAC5C,OAAO3C,QAAA,KAAa,YAAYiB,cAAA,GAAiBjB,QAAA,GAChD8C,IAAA,CAAAnE,IAAA;cAAAiE,OAAA,EAAAA,CAAA,KAAqBxC,SAAA,CAAAhB,sBAAU;cAAAuD,QAAA,EAA0BzC,CAAA,CAAE;YAAA,C,QACzD,EACJ4C,IAAA,CAAAtE,MAAA;cAAA+E,WAAA,EACc;cAAAd,SAAA,EACD,GAAApD,SAAA,WAAuB;cAAAuD,OAAA,EACzBjB,EAA8B;cAAAgB,QAAA,EAEvCG,IAAA,CAAAzE,WAAA;gBAAAmF,SAAA,EAAwBnD,SAAA,GAAY,SAAS;cAAA,C;gBAG/CyC,IAAA,CAAArE,MAAA;cAAAgF,MAAA;cAAAC,MAAA;cAAAC,IAAA,EAAAvE,sBAAA;cAAAuD,QAAA,EACEG,IAAA,CAAA/D,YAAA;gBAAA6E,QAAA,EACY7B,EAAiB;gBAAA8B,MAAA,EACnB/C;cAAA,C;;;YAMhBgC,IAAA,CAAC;UAAAL,SAAA,EAAe,GAAApD,SAAA,4BAAwC;UAAAsD,QAAA,EACtDG,IAAA,CAAAhE,OAAA,IAAC;QAAA,C;UAILgE,IAAA,CAAC;QAAAL,SAAA,EAAe,GAAApD,SAAA,kBAA8B;QAAAsD,QAAA,EAC5CG,IAAA,CAAA5D,aAAA;UAAA4E,QAAA;UAAAC,MAAA,EAAsC,CAACvD,WAAA,CAAAkB,CAAA,IAAiBrB,SAAA,GAAY,UAAS;UAAAsC,QAAA,EAC3EH,KAAA,CAAC;YAAAC,SAAA,EAAe,GAAApD,SAAA,kBAA8B;YAAAsD,QAAA,GAC3ChD,cAAA,IAAkBD,KAAA,CAAAwB,MAAA,MAAiB,IAAKnB,YAAA,CAAAmB,MAAA,IAAsB,GAC3D8C,KAAA,CAAAC,IAAA,CAAWlE,YAAA,EAAAmE,GAAA,CAAAC,MAIF,QAGT,EACHzE,KAAA,CAAAwE,GAAA,CAAUlC,EAsDX;UAAA,C;;;;;;;;;;;;;;;;;;;;;;;;;SA9GRP,E;;AA3CG,SAAA0C,OAAAC,MAAA,EAAA1B,KAAA;EAAA,OA4FWI,IAAA,CAAAlE,aAAA;IAAAyF,cAAA,EACkB,QAAQ3B,KAAA,aAAkB;IAAAqB,MAAA,EACnC;EAAA,GACFrB,KAAA;AAAA;AA/FlB,SAAA1B,MAAAsB,IAAA;EAgCH,MAAAgC,IAAA,GAAahC,IAAA,CAAAgC,IAAA;EACb,MAAAC,CAAA,GAAUD,IAAA,MAAS,OAAQE,IAAA,CAAAC,KAAA,CAAWD,IAAA,CAAAE,GAAA,CAASJ,IAAA,IAAQE,IAAA,CAAAE,GAAA,KAAS;EAChE,MAAAC,QAAA,GAAiBJ,CAAA,IAAI,QAAQ;EAC7B,MAAAK,aAAA,GACE,CAACN,IAAA,GAAOE,IAAA,CAAAK,GAAA,OAAeN,CAAA,CAAC,EAAAO,OAAA,CAAWH,QAAA,IAAY,OAAO,KAAK,MAAM,MAAM,MAAM,MAAMJ,CAAA,CAAE;EAAA,OAChFK,aAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useModal","useWindowInfo","isImage","React","AnimateHeightImport","ChevronIcon","XIcon","useTranslation","Button","Drawer","ErrorPill","Pill","ShimmerEffect","Thumbnail","Actions","AddFilesView","useFormsManager","useBulkUpload","AnimateHeight","default","addMoreFilesDrawerSlug","baseClass","FileSidebar","$","activeIndex","addFiles","forms","isInitializing","removeFile","setActiveIndex","thumbnailUrls","totalErrorCount","initialFiles","maxFiles","i18n","t","closeModal","openModal","showFiles","setShowFiles","useState","breakpoints","t0","indexToRemove","handleRemoveFile","t1","filelist","handleAddFiles","getFileSize","_temp","totalFileCount","length","t2","t3","filter","Boolean","t4","join","t5","m","t6","Symbol","for","prev","t7","t8","t9","index_0","errorCount","formState","currentFile","file","value","_jsxs","className","index","children","onClick","type","_jsx","fileSrc","undefined","title","name","count","withMessage","buttonStyle","direction","gutter","Header","slug","onCancel","onDrop","duration","height","Array","from","map","_temp2","file_0","animationDelay","size","i","Math","floor","log","decimals","formattedSize","pow","toFixed"],"sources":["../../../../src/elements/BulkUpload/FileSidebar/index.tsx"],"sourcesContent":["'use client'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { useWindowInfo } from '@faceless-ui/window-info'\nimport { isImage } from 'payload/shared'\nimport React from 'react'\nimport AnimateHeightImport from 'react-animate-height'\n\nimport { ChevronIcon } from '../../../icons/Chevron/index.js'\nimport { XIcon } from '../../../icons/X/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { Button } from '../../Button/index.js'\nimport { Drawer } from '../../Drawer/index.js'\nimport { ErrorPill } from '../../ErrorPill/index.js'\nimport { Pill } from '../../Pill/index.js'\nimport { ShimmerEffect } from '../../ShimmerEffect/index.js'\nimport { Thumbnail } from '../../Thumbnail/index.js'\nimport { Actions } from '../ActionsBar/index.js'\nimport { AddFilesView } from '../AddFilesView/index.js'\nimport { useFormsManager } from '../FormsManager/index.js'\nimport { useBulkUpload } from '../index.js'\nimport './index.scss'\n\nconst AnimateHeight = (AnimateHeightImport.default ||\n AnimateHeightImport) as typeof AnimateHeightImport.default\n\nconst addMoreFilesDrawerSlug = 'bulk-upload-drawer--add-more-files'\n\nconst baseClass = 'file-selections'\n\nexport function FileSidebar() {\n const {\n activeIndex,\n addFiles,\n forms,\n isInitializing,\n removeFile,\n setActiveIndex,\n thumbnailUrls,\n totalErrorCount,\n } = useFormsManager()\n const { initialFiles, maxFiles } = useBulkUpload()\n const { i18n, t } = useTranslation()\n const { closeModal, openModal } = useModal()\n const [showFiles, setShowFiles] = React.useState(false)\n const { breakpoints } = useWindowInfo()\n\n const handleRemoveFile = React.useCallback(\n (indexToRemove: number) => {\n removeFile(indexToRemove)\n },\n [removeFile],\n )\n\n const handleAddFiles = React.useCallback(\n (filelist: FileList) => {\n void addFiles(filelist)\n closeModal(addMoreFilesDrawerSlug)\n },\n [addFiles, closeModal],\n )\n\n const getFileSize = React.useCallback((file: File) => {\n const size = file.size\n const i = size === 0 ? 0 : Math.floor(Math.log(size) / Math.log(1024))\n const decimals = i > 1 ? 1 : 0\n const formattedSize =\n (size / Math.pow(1024, i)).toFixed(decimals) + ' ' + ['B', 'kB', 'MB', 'GB', 'TB'][i]\n return formattedSize\n }, [])\n\n const totalFileCount = isInitializing ? initialFiles.length : forms.length\n\n return (\n <div\n className={[baseClass, showFiles && `${baseClass}__showingFiles`].filter(Boolean).join(' ')}\n >\n {breakpoints.m && showFiles ? <div className={`${baseClass}__mobileBlur`} /> : null}\n <div className={`${baseClass}__header`}>\n <div className={`${baseClass}__headerTopRow`}>\n <div className={`${baseClass}__header__text`}>\n <ErrorPill count={totalErrorCount} i18n={i18n} withMessage />\n <p>\n <strong\n title={`${totalFileCount} ${t(totalFileCount > 1 ? 'upload:filesToUpload' : 'upload:fileToUpload')}`}\n >\n {totalFileCount}{' '}\n {t(totalFileCount > 1 ? 'upload:filesToUpload' : 'upload:fileToUpload')}\n </strong>\n </p>\n </div>\n\n <div className={`${baseClass}__header__actions`}>\n {typeof maxFiles === 'number' && totalFileCount < maxFiles ? (\n <Pill onClick={() => openModal(addMoreFilesDrawerSlug)}>{t('upload:addFile')}</Pill>\n ) : null}\n <Button\n buttonStyle=\"transparent\"\n className={`${baseClass}__toggler`}\n onClick={() => setShowFiles((prev) => !prev)}\n >\n <span className={`${baseClass}__toggler__label`}>\n <strong\n title={`${totalFileCount} ${t(totalFileCount > 1 ? 'upload:filesToUpload' : 'upload:fileToUpload')}`}\n >\n {totalFileCount}{' '}\n {t(totalFileCount > 1 ? 'upload:filesToUpload' : 'upload:fileToUpload')}\n </strong>\n </span>\n <ChevronIcon direction={showFiles ? 'down' : 'up'} />\n </Button>\n\n <Drawer gutter={false} Header={null} slug={addMoreFilesDrawerSlug}>\n <AddFilesView\n onCancel={() => closeModal(addMoreFilesDrawerSlug)}\n onDrop={handleAddFiles}\n />\n </Drawer>\n </div>\n </div>\n\n <div className={`${baseClass}__header__mobileDocActions`}>\n <Actions />\n </div>\n </div>\n\n <div className={`${baseClass}__animateWrapper`}>\n <AnimateHeight duration={200} height={!breakpoints.m || showFiles ? 'auto' : 0}>\n <div className={`${baseClass}__filesContainer`}>\n {isInitializing && forms.length === 0 && initialFiles.length > 0\n ? Array.from(initialFiles).map((file, index) => (\n <ShimmerEffect\n animationDelay={`calc(${index} * ${60}ms)`}\n height=\"35px\"\n key={index}\n />\n ))\n : null}\n {forms.map(({ errorCount, formState }, index) => {\n const currentFile = formState.file.value as File\n\n return (\n <div\n className={[\n `${baseClass}__fileRowContainer`,\n index === activeIndex && `${baseClass}__fileRowContainer--active`,\n errorCount && errorCount > 0 && `${baseClass}__fileRowContainer--error`,\n ]\n .filter(Boolean)\n .join(' ')}\n key={index}\n >\n <button\n className={`${baseClass}__fileRow`}\n onClick={() => setActiveIndex(index)}\n type=\"button\"\n >\n <Thumbnail\n className={`${baseClass}__thumbnail`}\n fileSrc={isImage(currentFile.type) ? thumbnailUrls[index] : undefined}\n />\n <div className={`${baseClass}__fileDetails`}>\n <p className={`${baseClass}__fileName`} title={currentFile.name}>\n {currentFile.name}\n </p>\n </div>\n <p className={`${baseClass}__fileSize`}>{getFileSize(currentFile)}</p>\n <div className={`${baseClass}__remove ${baseClass}__remove--underlay`}>\n <XIcon />\n </div>\n\n {errorCount ? (\n <ErrorPill\n className={`${baseClass}__errorCount`}\n count={errorCount}\n i18n={i18n}\n />\n ) : null}\n </button>\n\n <button\n aria-label={t('general:remove')}\n className={`${baseClass}__remove ${baseClass}__remove--overlay`}\n onClick={() => handleRemoveFile(index)}\n type=\"button\"\n >\n <XIcon />\n </button>\n </div>\n )\n })}\n </div>\n </AnimateHeight>\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -192,6 +192,10 @@
192
192
  display: none;
193
193
  margin: 0;
194
194
  padding-block: 0;
195
+
196
+ &__text {
197
+ display: none;
198
+ }
195
199
  }
196
200
 
197
201
  &__header__mobileDocActions {
@@ -245,7 +249,17 @@
245
249
 
246
250
  &__headerTopRow {
247
251
  border-top: 1px solid var(--theme-border-color);
248
- padding-block: calc(var(--base) * 0.8);
252
+ padding-block: 0 calc(var(--base) * 0.8) 0;
253
+ }
254
+
255
+ &__header__text {
256
+ display: none;
257
+ }
258
+
259
+ &__header__actions {
260
+ flex-grow: 2;
261
+ display: flex;
262
+ justify-content: flex-end;
249
263
  }
250
264
 
251
265
  &__header__mobileDocActions {
@@ -268,7 +282,31 @@
268
282
 
269
283
  &__toggler {
270
284
  padding-right: 0;
271
- display: block;
285
+ padding-left: 0;
286
+ padding-top: calc(var(--base) * 0.8);
287
+ padding-bottom: calc(var(--base) * 0.8);
288
+ display: flex;
289
+ justify-content: flex-end;
290
+ flex-grow: 1;
291
+
292
+ .btn__label {
293
+ width: 100%;
294
+ display: flex;
295
+ align-items: center;
296
+ justify-content: space-between;
297
+ }
298
+
299
+ &__text {
300
+ display: flex;
301
+ }
302
+
303
+ svg {
304
+ max-width: 1.5rem;
305
+ }
306
+
307
+ .btn__content {
308
+ width: 100%;
309
+ }
272
310
  }
273
311
 
274
312
  .btn {
@@ -21,6 +21,7 @@ type FormsManagerContext = {
21
21
  errorCount: number;
22
22
  index: number;
23
23
  }) => void;
24
+ readonly thumbnailUrls: string[];
24
25
  readonly totalErrorCount?: number;
25
26
  };
26
27
  type FormsManagerProps = {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/BulkUpload/FormsManager/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAa,MAAM,SAAS,CAAA;AAInE,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAazC,KAAK,mBAAmB,GAAG;IACzB,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC,CAAA;IAC1C,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,cAAc,CAAC,EAAE,mBAAmB,CAAA;IAC7C,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAC9B,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,CAAA;IAC3C,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAA;IACnC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5C,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAChG,QAAQ,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAChD,QAAQ,CAAC,sBAAsB,EAAE,CAAC,EAChC,UAAU,EACV,KAAK,GACN,EAAE;QACD,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EAAE,MAAM,CAAA;KACd,KAAK,IAAI,CAAA;IACV,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAClC,CAAA;AA0BD,KAAK,iBAAiB,GAAG;IACvB,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CACnC,CAAA;AACD,wBAAgB,oBAAoB,CAAC,EAAE,QAAQ,EAAE,EAAE,iBAAiB,qBAyTnE;AAED,wBAAgB,eAAe,wBAE9B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/BulkUpload/FormsManager/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAa,MAAM,SAAS,CAAA;AAInE,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAczC,KAAK,mBAAmB,GAAG;IACzB,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC,CAAA;IAC1C,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,cAAc,CAAC,EAAE,mBAAmB,CAAA;IAC7C,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAC9B,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,CAAA;IAC3C,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAA;IACnC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5C,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAChG,QAAQ,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAChD,QAAQ,CAAC,sBAAsB,EAAE,CAAC,EAChC,UAAU,EACV,KAAK,GACN,EAAE;QACD,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EAAE,MAAM,CAAA;KACd,KAAK,IAAI,CAAA;IACV,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,CAAA;IAChC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAClC,CAAA;AA2BD,KAAK,iBAAiB,GAAG;IACvB,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CACnC,CAAA;AACD,wBAAgB,oBAAoB,CAAC,EAAE,QAAQ,EAAE,EAAE,iBAAiB,qBA4VnE;AAED,wBAAgB,eAAe,wBAE9B"}
@@ -12,6 +12,7 @@ import { useTranslation } from '../../../providers/Translation/index.js';
12
12
  import { getFormState } from '../../../utilities/getFormState.js';
13
13
  import { hasSavePermission as getHasSavePermission } from '../../../utilities/hasSavePermission.js';
14
14
  import { useLoadingOverlay } from '../../LoadingOverlay/index.js';
15
+ import { createThumbnail } from '../../Thumbnail/createThumbnail.js';
15
16
  import { useBulkUpload } from '../index.js';
16
17
  import { createFormData } from './createFormData.js';
17
18
  import { formsManagementReducer } from './reducer.js';
@@ -32,6 +33,7 @@ const Context = /*#__PURE__*/React.createContext({
32
33
  saveAllDocs: () => Promise.resolve(),
33
34
  setActiveIndex: () => 0,
34
35
  setFormTotalErrorCount: () => {},
36
+ thumbnailUrls: [],
35
37
  totalErrorCount: 0
36
38
  });
37
39
  const initialState = {
@@ -71,6 +73,33 @@ export function FormsManagerProvider({
71
73
  forms,
72
74
  totalErrorCount
73
75
  } = state;
76
+ const formsRef = React.useRef(forms);
77
+ formsRef.current = forms;
78
+ const formsCount = forms.length;
79
+ const thumbnailUrlsRef = React.useRef([]);
80
+ const processedFiles = React.useRef(new Set()) // Track already-processed files
81
+ ;
82
+ const [renderedThumbnails, setRenderedThumbnails] = React.useState([]);
83
+ React.useEffect(() => {
84
+ (async () => {
85
+ const newThumbnails = [...thumbnailUrlsRef.current];
86
+ for (let i = 0; i < formsCount; i++) {
87
+ const file = formsRef.current[i].formState.file.value;
88
+ // Skip if already processed
89
+ if (processedFiles.current.has(file) || !file) {
90
+ continue;
91
+ }
92
+ processedFiles.current.add(file);
93
+ // Generate thumbnail and update ref
94
+ const thumbnailUrl = await createThumbnail(file);
95
+ newThumbnails[i] = thumbnailUrl;
96
+ thumbnailUrlsRef.current = newThumbnails;
97
+ // Trigger re-render in batches
98
+ setRenderedThumbnails([...newThumbnails]);
99
+ await new Promise(resolve => setTimeout(resolve, 100));
100
+ }
101
+ })();
102
+ }, [formsCount, createThumbnail]);
74
103
  const {
75
104
  toggleLoadingOverlay
76
105
  } = useLoadingOverlay();
@@ -152,8 +181,8 @@ export function FormsManagerProvider({
152
181
  type: 'REPLACE',
153
182
  state: {
154
183
  activeIndex: index,
155
- forms: forms.map((form, i) => {
156
- if (i === activeIndex) {
184
+ forms: forms.map((form, i_0) => {
185
+ if (i_0 === activeIndex) {
157
186
  return {
158
187
  errorCount: form.errorCount,
159
188
  formState: currentFormsData
@@ -208,7 +237,7 @@ export function FormsManagerProvider({
208
237
  formState: currentFormsData_0
209
238
  };
210
239
  const newDocs = [];
211
- const promises = currentForms.map(async (form_0, i_0) => {
240
+ const promises = currentForms.map(async (form_0, i_1) => {
212
241
  try {
213
242
  toggleLoadingOverlay({
214
243
  isLoading: true,
@@ -242,9 +271,9 @@ export function FormsManagerProvider({
242
271
  }
243
272
  return [[...fieldErrs, ...newFieldErrs], [...nonFieldErrs, ...newNonFieldErrs]];
244
273
  }, [[], []]);
245
- currentForms[i_0] = {
274
+ currentForms[i_1] = {
246
275
  errorCount: fieldErrors.length,
247
- formState: fieldReducer(currentForms[i_0].formState, {
276
+ formState: fieldReducer(currentForms[i_1].formState, {
248
277
  type: 'ADD_SERVER_ERRORS',
249
278
  errors: fieldErrors
250
279
  })
@@ -327,6 +356,7 @@ export function FormsManagerProvider({
327
356
  saveAllDocs,
328
357
  setActiveIndex,
329
358
  setFormTotalErrorCount,
359
+ thumbnailUrls: renderedThumbnails,
330
360
  totalErrorCount
331
361
  },
332
362
  children: children
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useModal","qs","React","toast","fieldReducer","useConfig","useLocale","useTranslation","getFormState","hasSavePermission","getHasSavePermission","useLoadingOverlay","useBulkUpload","createFormData","formsManagementReducer","Context","createContext","activeIndex","addFiles","Promise","resolve","collectionSlug","docPermissions","undefined","forms","getFormDataRef","current","hasPublishPermission","hasSubmitted","isInitializing","removeFile","saveAllDocs","setActiveIndex","setFormTotalErrorCount","totalErrorCount","initialState","FormsManagerProvider","children","config","routes","api","serverURL","code","i18n","t","setHasSubmitted","useState","setDocPermissions","setHasSavePermission","setHasPublishPermission","hasInitializedState","setHasInitializedState","hasInitializedDocPermissions","setHasInitializedDocPermissions","setIsInitializing","state","dispatch","useReducer","toggleLoadingOverlay","closeModal","drawerSlug","initialFiles","onSuccess","hasInitializedWithFiles","useRef","initialStateRef","actionURL","initilizeSharedDocPermissions","useCallback","params","locale","docAccessURL","res","fetch","stringify","credentials","headers","language","method","json","publishedAccessJSON","body","JSON","_status","then","isEditing","update","permission","initializeSharedFormState","abortController","signal","abort","formStateWithoutFiles","apiRoute","operation","schemaPath","error","index","currentFormsData","type","map","form","i","errorCount","formState","files","isLoading","key","count","overrides","currentForms","newDocs","promises","loadingText","req","status","doc","push","errors","length","fieldErrors","nonFieldErrors","reduce","fieldErrs","nonFieldErrs","err","newFieldErrs","newNonFieldErrs","message","Array","isArray","data","forEach","dataError","field","all","remainingForms","filter","successCount","Math","max","success","acc","useEffect","_jsx","Provider","value","useFormsManager","useContext"],"sources":["../../../../src/elements/BulkUpload/FormsManager/index.tsx"],"sourcesContent":["'use client'\n\nimport type { Data, DocumentPermissions, FormState } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport * as qs from 'qs-esm'\nimport React from 'react'\nimport { toast } from 'sonner'\n\nimport type { State } from './reducer.js'\n\nimport { fieldReducer } from '../../../forms/Form/fieldReducer.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useLocale } from '../../../providers/Locale/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { getFormState } from '../../../utilities/getFormState.js'\nimport { hasSavePermission as getHasSavePermission } from '../../../utilities/hasSavePermission.js'\nimport { useLoadingOverlay } from '../../LoadingOverlay/index.js'\nimport { useBulkUpload } from '../index.js'\nimport { createFormData } from './createFormData.js'\nimport { formsManagementReducer } from './reducer.js'\n\ntype FormsManagerContext = {\n readonly activeIndex: State['activeIndex']\n readonly addFiles: (filelist: FileList) => Promise<void>\n readonly collectionSlug: string\n readonly docPermissions?: DocumentPermissions\n readonly forms: State['forms']\n getFormDataRef: React.RefObject<() => Data>\n readonly hasPublishPermission: boolean\n readonly hasSavePermission: boolean\n readonly hasSubmitted: boolean\n readonly isInitializing: boolean\n readonly removeFile: (index: number) => void\n readonly saveAllDocs: ({ overrides }?: { overrides?: Record<string, unknown> }) => Promise<void>\n readonly setActiveIndex: (index: number) => void\n readonly setFormTotalErrorCount: ({\n errorCount,\n index,\n }: {\n errorCount: number\n index: number\n }) => void\n readonly totalErrorCount?: number\n}\n\nconst Context = React.createContext<FormsManagerContext>({\n activeIndex: 0,\n addFiles: () => Promise.resolve(),\n collectionSlug: '',\n docPermissions: undefined,\n forms: [],\n getFormDataRef: { current: () => ({}) },\n hasPublishPermission: false,\n hasSavePermission: false,\n hasSubmitted: false,\n isInitializing: false,\n removeFile: () => {},\n saveAllDocs: () => Promise.resolve(),\n setActiveIndex: () => 0,\n setFormTotalErrorCount: () => {},\n totalErrorCount: 0,\n})\n\nconst initialState: State = {\n activeIndex: 0,\n forms: [],\n totalErrorCount: 0,\n}\n\ntype FormsManagerProps = {\n readonly children: React.ReactNode\n}\nexport function FormsManagerProvider({ children }: FormsManagerProps) {\n const { config } = useConfig()\n const {\n routes: { api },\n serverURL,\n } = config\n const { code } = useLocale()\n const { i18n, t } = useTranslation()\n\n const [hasSubmitted, setHasSubmitted] = React.useState(false)\n const [docPermissions, setDocPermissions] = React.useState<DocumentPermissions>()\n const [hasSavePermission, setHasSavePermission] = React.useState(false)\n const [hasPublishPermission, setHasPublishPermission] = React.useState(false)\n const [hasInitializedState, setHasInitializedState] = React.useState(false)\n const [hasInitializedDocPermissions, setHasInitializedDocPermissions] = React.useState(false)\n const [isInitializing, setIsInitializing] = React.useState(false)\n const [state, dispatch] = React.useReducer(formsManagementReducer, initialState)\n const { activeIndex, forms, totalErrorCount } = state\n\n const { toggleLoadingOverlay } = useLoadingOverlay()\n const { closeModal } = useModal()\n const { collectionSlug, drawerSlug, initialFiles, onSuccess } = useBulkUpload()\n\n const hasInitializedWithFiles = React.useRef(false)\n const initialStateRef = React.useRef<FormState>(null)\n const getFormDataRef = React.useRef<() => Data>(() => ({}))\n\n const actionURL = `${api}/${collectionSlug}`\n\n const initilizeSharedDocPermissions = React.useCallback(async () => {\n const params = {\n locale: code || undefined,\n }\n\n const docAccessURL = `/${collectionSlug}/access`\n const res = await fetch(`${serverURL}${api}${docAccessURL}?${qs.stringify(params)}`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method: 'post',\n })\n\n const json: DocumentPermissions = await res.json()\n const publishedAccessJSON = await fetch(\n `${serverURL}${api}${docAccessURL}?${qs.stringify(params)}`,\n {\n body: JSON.stringify({\n _status: 'published',\n }),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n },\n ).then((res) => res.json())\n\n setDocPermissions(json)\n\n setHasSavePermission(\n getHasSavePermission({\n collectionSlug,\n docPermissions: json,\n isEditing: false,\n }),\n )\n\n setHasPublishPermission(publishedAccessJSON?.update?.permission)\n setHasInitializedDocPermissions(true)\n }, [api, code, collectionSlug, i18n.language, serverURL])\n\n const initializeSharedFormState = React.useCallback(\n async (abortController?: AbortController) => {\n if (abortController?.signal) {\n abortController.abort('aborting previous fetch for initial form state without files')\n }\n\n try {\n const { state: formStateWithoutFiles } = await getFormState({\n apiRoute: config.routes.api,\n body: {\n collectionSlug,\n locale: code,\n operation: 'create',\n schemaPath: collectionSlug,\n },\n // onError: onLoadError,\n serverURL: config.serverURL,\n signal: abortController?.signal,\n })\n initialStateRef.current = formStateWithoutFiles\n setHasInitializedState(true)\n } catch (error) {\n // swallow error\n }\n },\n [code, collectionSlug, config.routes.api, config.serverURL],\n )\n\n const setActiveIndex: FormsManagerContext['setActiveIndex'] = React.useCallback(\n (index: number) => {\n const currentFormsData = getFormDataRef.current()\n dispatch({\n type: 'REPLACE',\n state: {\n activeIndex: index,\n forms: forms.map((form, i) => {\n if (i === activeIndex) {\n return {\n errorCount: form.errorCount,\n formState: currentFormsData,\n }\n }\n return form\n }),\n },\n })\n },\n [forms, activeIndex],\n )\n\n const addFiles = React.useCallback(\n async (files: FileList) => {\n toggleLoadingOverlay({ isLoading: true, key: 'addingDocs' })\n if (!hasInitializedState) {\n await initializeSharedFormState()\n }\n dispatch({ type: 'ADD_FORMS', files, initialState: initialStateRef.current })\n toggleLoadingOverlay({ isLoading: false, key: 'addingDocs' })\n },\n [initializeSharedFormState, hasInitializedState, toggleLoadingOverlay],\n )\n\n const removeFile: FormsManagerContext['removeFile'] = React.useCallback((index) => {\n dispatch({ type: 'REMOVE_FORM', index })\n }, [])\n\n const setFormTotalErrorCount: FormsManagerContext['setFormTotalErrorCount'] = React.useCallback(\n ({ errorCount, index }) => {\n dispatch({\n type: 'UPDATE_ERROR_COUNT',\n count: errorCount,\n index,\n })\n },\n [],\n )\n\n const saveAllDocs: FormsManagerContext['saveAllDocs'] = React.useCallback(\n async ({ overrides } = {}) => {\n const currentFormsData = getFormDataRef.current()\n const currentForms = [...forms]\n currentForms[activeIndex] = {\n errorCount: currentForms[activeIndex].errorCount,\n formState: currentFormsData,\n }\n const newDocs = []\n const promises = currentForms.map(async (form, i) => {\n try {\n toggleLoadingOverlay({\n isLoading: true,\n key: 'saveAllDocs',\n loadingText: t('general:uploading'),\n })\n const req = await fetch(actionURL, {\n body: createFormData(form.formState, overrides),\n method: 'POST',\n })\n\n const json = await req.json()\n\n if (req.status === 201 && json?.doc) {\n newDocs.push(json.doc)\n }\n\n // should expose some sort of helper for this\n if (json?.errors?.length) {\n const [fieldErrors, nonFieldErrors] = json.errors.reduce(\n ([fieldErrs, nonFieldErrs], err) => {\n const newFieldErrs: any[] = []\n const newNonFieldErrs: any[] = []\n\n if (err?.message) {\n newNonFieldErrs.push(err)\n }\n\n if (Array.isArray(err?.data?.errors)) {\n err.data?.errors.forEach((dataError) => {\n if (dataError?.field) {\n newFieldErrs.push(dataError)\n } else {\n newNonFieldErrs.push(dataError)\n }\n })\n }\n\n return [\n [...fieldErrs, ...newFieldErrs],\n [...nonFieldErrs, ...newNonFieldErrs],\n ]\n },\n [[], []],\n )\n\n currentForms[i] = {\n errorCount: fieldErrors.length,\n formState: fieldReducer(currentForms[i].formState, {\n type: 'ADD_SERVER_ERRORS',\n errors: fieldErrors,\n }),\n }\n }\n } catch (error) {\n // swallow error\n } finally {\n setHasSubmitted(true)\n toggleLoadingOverlay({ isLoading: false, key: 'saveAllDocs' })\n }\n })\n\n await Promise.all(promises)\n\n const remainingForms = currentForms.filter(({ errorCount }) => errorCount > 0)\n const successCount = Math.max(0, currentForms.length - remainingForms.length)\n const errorCount = currentForms.length - successCount\n\n if (successCount) {\n toast.success(`Successfully saved ${successCount} files`)\n\n if (typeof onSuccess === 'function') {\n onSuccess(newDocs, errorCount)\n }\n }\n\n if (errorCount) {\n toast.error(`Failed to save ${errorCount} files`)\n } else {\n closeModal(drawerSlug)\n }\n\n dispatch({\n type: 'REPLACE',\n state: {\n activeIndex: 0,\n forms: remainingForms,\n totalErrorCount: remainingForms.reduce((acc, { errorCount }) => acc + errorCount, 0),\n },\n })\n },\n [actionURL, activeIndex, forms, onSuccess, t, toggleLoadingOverlay, closeModal, drawerSlug],\n )\n\n React.useEffect(() => {\n if (!collectionSlug) {\n return\n }\n if (!hasInitializedState) {\n void initializeSharedFormState()\n }\n\n if (!hasInitializedDocPermissions) {\n void initilizeSharedDocPermissions()\n }\n\n if (initialFiles) {\n if (!hasInitializedState || !hasInitializedDocPermissions) {\n setIsInitializing(true)\n } else {\n setIsInitializing(false)\n }\n }\n\n if (hasInitializedState && initialFiles && !hasInitializedWithFiles.current) {\n void addFiles(initialFiles)\n hasInitializedWithFiles.current = true\n }\n return\n }, [\n addFiles,\n initialFiles,\n initializeSharedFormState,\n initilizeSharedDocPermissions,\n collectionSlug,\n hasInitializedState,\n hasInitializedDocPermissions,\n ])\n\n return (\n <Context.Provider\n value={{\n activeIndex: state.activeIndex,\n addFiles,\n collectionSlug,\n docPermissions,\n forms,\n getFormDataRef,\n hasPublishPermission,\n hasSavePermission,\n hasSubmitted,\n isInitializing,\n removeFile,\n saveAllDocs,\n setActiveIndex,\n setFormTotalErrorCount,\n totalErrorCount,\n }}\n >\n {children}\n </Context.Provider>\n )\n}\n\nexport function useFormsManager() {\n return React.useContext(Context)\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useModal","qs","React","toast","fieldReducer","useConfig","useLocale","useTranslation","getFormState","hasSavePermission","getHasSavePermission","useLoadingOverlay","createThumbnail","useBulkUpload","createFormData","formsManagementReducer","Context","createContext","activeIndex","addFiles","Promise","resolve","collectionSlug","docPermissions","undefined","forms","getFormDataRef","current","hasPublishPermission","hasSubmitted","isInitializing","removeFile","saveAllDocs","setActiveIndex","setFormTotalErrorCount","thumbnailUrls","totalErrorCount","initialState","FormsManagerProvider","children","config","routes","api","serverURL","code","i18n","t","setHasSubmitted","useState","setDocPermissions","setHasSavePermission","setHasPublishPermission","hasInitializedState","setHasInitializedState","hasInitializedDocPermissions","setHasInitializedDocPermissions","setIsInitializing","state","dispatch","useReducer","formsRef","useRef","formsCount","length","thumbnailUrlsRef","processedFiles","Set","renderedThumbnails","setRenderedThumbnails","useEffect","newThumbnails","i","file","formState","value","has","add","thumbnailUrl","setTimeout","toggleLoadingOverlay","closeModal","drawerSlug","initialFiles","onSuccess","hasInitializedWithFiles","initialStateRef","actionURL","initilizeSharedDocPermissions","useCallback","params","locale","docAccessURL","res","fetch","stringify","credentials","headers","language","method","json","publishedAccessJSON","body","JSON","_status","then","isEditing","update","permission","initializeSharedFormState","abortController","signal","abort","formStateWithoutFiles","apiRoute","operation","schemaPath","error","index","currentFormsData","type","map","form","errorCount","files","isLoading","key","count","overrides","currentForms","newDocs","promises","loadingText","req","status","doc","push","errors","fieldErrors","nonFieldErrors","reduce","fieldErrs","nonFieldErrs","err","newFieldErrs","newNonFieldErrs","message","Array","isArray","data","forEach","dataError","field","all","remainingForms","filter","successCount","Math","max","success","acc","_jsx","Provider","useFormsManager","useContext"],"sources":["../../../../src/elements/BulkUpload/FormsManager/index.tsx"],"sourcesContent":["'use client'\n\nimport type { Data, DocumentPermissions, FormState } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport * as qs from 'qs-esm'\nimport React from 'react'\nimport { toast } from 'sonner'\n\nimport type { State } from './reducer.js'\n\nimport { fieldReducer } from '../../../forms/Form/fieldReducer.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useLocale } from '../../../providers/Locale/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { getFormState } from '../../../utilities/getFormState.js'\nimport { hasSavePermission as getHasSavePermission } from '../../../utilities/hasSavePermission.js'\nimport { useLoadingOverlay } from '../../LoadingOverlay/index.js'\nimport { createThumbnail } from '../../Thumbnail/createThumbnail.js'\nimport { useBulkUpload } from '../index.js'\nimport { createFormData } from './createFormData.js'\nimport { formsManagementReducer } from './reducer.js'\n\ntype FormsManagerContext = {\n readonly activeIndex: State['activeIndex']\n readonly addFiles: (filelist: FileList) => Promise<void>\n readonly collectionSlug: string\n readonly docPermissions?: DocumentPermissions\n readonly forms: State['forms']\n getFormDataRef: React.RefObject<() => Data>\n readonly hasPublishPermission: boolean\n readonly hasSavePermission: boolean\n readonly hasSubmitted: boolean\n readonly isInitializing: boolean\n readonly removeFile: (index: number) => void\n readonly saveAllDocs: ({ overrides }?: { overrides?: Record<string, unknown> }) => Promise<void>\n readonly setActiveIndex: (index: number) => void\n readonly setFormTotalErrorCount: ({\n errorCount,\n index,\n }: {\n errorCount: number\n index: number\n }) => void\n readonly thumbnailUrls: string[]\n readonly totalErrorCount?: number\n}\n\nconst Context = React.createContext<FormsManagerContext>({\n activeIndex: 0,\n addFiles: () => Promise.resolve(),\n collectionSlug: '',\n docPermissions: undefined,\n forms: [],\n getFormDataRef: { current: () => ({}) },\n hasPublishPermission: false,\n hasSavePermission: false,\n hasSubmitted: false,\n isInitializing: false,\n removeFile: () => {},\n saveAllDocs: () => Promise.resolve(),\n setActiveIndex: () => 0,\n setFormTotalErrorCount: () => {},\n thumbnailUrls: [],\n totalErrorCount: 0,\n})\n\nconst initialState: State = {\n activeIndex: 0,\n forms: [],\n totalErrorCount: 0,\n}\n\ntype FormsManagerProps = {\n readonly children: React.ReactNode\n}\nexport function FormsManagerProvider({ children }: FormsManagerProps) {\n const { config } = useConfig()\n const {\n routes: { api },\n serverURL,\n } = config\n const { code } = useLocale()\n const { i18n, t } = useTranslation()\n\n const [hasSubmitted, setHasSubmitted] = React.useState(false)\n const [docPermissions, setDocPermissions] = React.useState<DocumentPermissions>()\n const [hasSavePermission, setHasSavePermission] = React.useState(false)\n const [hasPublishPermission, setHasPublishPermission] = React.useState(false)\n const [hasInitializedState, setHasInitializedState] = React.useState(false)\n const [hasInitializedDocPermissions, setHasInitializedDocPermissions] = React.useState(false)\n const [isInitializing, setIsInitializing] = React.useState(false)\n const [state, dispatch] = React.useReducer(formsManagementReducer, initialState)\n const { activeIndex, forms, totalErrorCount } = state\n\n const formsRef = React.useRef(forms)\n formsRef.current = forms\n const formsCount = forms.length\n\n const thumbnailUrlsRef = React.useRef<string[]>([])\n const processedFiles = React.useRef(new Set()) // Track already-processed files\n const [renderedThumbnails, setRenderedThumbnails] = React.useState<string[]>([])\n\n React.useEffect(() => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n ;(async () => {\n const newThumbnails = [...thumbnailUrlsRef.current]\n\n for (let i = 0; i < formsCount; i++) {\n const file = formsRef.current[i].formState.file.value as File\n\n // Skip if already processed\n if (processedFiles.current.has(file) || !file) {\n continue\n }\n processedFiles.current.add(file)\n\n // Generate thumbnail and update ref\n const thumbnailUrl = await createThumbnail(file)\n newThumbnails[i] = thumbnailUrl\n thumbnailUrlsRef.current = newThumbnails\n\n // Trigger re-render in batches\n setRenderedThumbnails([...newThumbnails])\n await new Promise((resolve) => setTimeout(resolve, 100))\n }\n })()\n }, [formsCount, createThumbnail])\n\n const { toggleLoadingOverlay } = useLoadingOverlay()\n const { closeModal } = useModal()\n const { collectionSlug, drawerSlug, initialFiles, onSuccess } = useBulkUpload()\n\n const hasInitializedWithFiles = React.useRef(false)\n const initialStateRef = React.useRef<FormState>(null)\n const getFormDataRef = React.useRef<() => Data>(() => ({}))\n\n const actionURL = `${api}/${collectionSlug}`\n\n const initilizeSharedDocPermissions = React.useCallback(async () => {\n const params = {\n locale: code || undefined,\n }\n\n const docAccessURL = `/${collectionSlug}/access`\n const res = await fetch(`${serverURL}${api}${docAccessURL}?${qs.stringify(params)}`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method: 'post',\n })\n\n const json: DocumentPermissions = await res.json()\n const publishedAccessJSON = await fetch(\n `${serverURL}${api}${docAccessURL}?${qs.stringify(params)}`,\n {\n body: JSON.stringify({\n _status: 'published',\n }),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n },\n ).then((res) => res.json())\n\n setDocPermissions(json)\n\n setHasSavePermission(\n getHasSavePermission({\n collectionSlug,\n docPermissions: json,\n isEditing: false,\n }),\n )\n\n setHasPublishPermission(publishedAccessJSON?.update?.permission)\n setHasInitializedDocPermissions(true)\n }, [api, code, collectionSlug, i18n.language, serverURL])\n\n const initializeSharedFormState = React.useCallback(\n async (abortController?: AbortController) => {\n if (abortController?.signal) {\n abortController.abort('aborting previous fetch for initial form state without files')\n }\n\n try {\n const { state: formStateWithoutFiles } = await getFormState({\n apiRoute: config.routes.api,\n body: {\n collectionSlug,\n locale: code,\n operation: 'create',\n schemaPath: collectionSlug,\n },\n // onError: onLoadError,\n serverURL: config.serverURL,\n signal: abortController?.signal,\n })\n initialStateRef.current = formStateWithoutFiles\n setHasInitializedState(true)\n } catch (error) {\n // swallow error\n }\n },\n [code, collectionSlug, config.routes.api, config.serverURL],\n )\n\n const setActiveIndex: FormsManagerContext['setActiveIndex'] = React.useCallback(\n (index: number) => {\n const currentFormsData = getFormDataRef.current()\n dispatch({\n type: 'REPLACE',\n state: {\n activeIndex: index,\n forms: forms.map((form, i) => {\n if (i === activeIndex) {\n return {\n errorCount: form.errorCount,\n formState: currentFormsData,\n }\n }\n return form\n }),\n },\n })\n },\n [forms, activeIndex],\n )\n\n const addFiles = React.useCallback(\n async (files: FileList) => {\n toggleLoadingOverlay({ isLoading: true, key: 'addingDocs' })\n if (!hasInitializedState) {\n await initializeSharedFormState()\n }\n dispatch({ type: 'ADD_FORMS', files, initialState: initialStateRef.current })\n toggleLoadingOverlay({ isLoading: false, key: 'addingDocs' })\n },\n [initializeSharedFormState, hasInitializedState, toggleLoadingOverlay],\n )\n\n const removeFile: FormsManagerContext['removeFile'] = React.useCallback((index) => {\n dispatch({ type: 'REMOVE_FORM', index })\n }, [])\n\n const setFormTotalErrorCount: FormsManagerContext['setFormTotalErrorCount'] = React.useCallback(\n ({ errorCount, index }) => {\n dispatch({\n type: 'UPDATE_ERROR_COUNT',\n count: errorCount,\n index,\n })\n },\n [],\n )\n\n const saveAllDocs: FormsManagerContext['saveAllDocs'] = React.useCallback(\n async ({ overrides } = {}) => {\n const currentFormsData = getFormDataRef.current()\n const currentForms = [...forms]\n currentForms[activeIndex] = {\n errorCount: currentForms[activeIndex].errorCount,\n formState: currentFormsData,\n }\n const newDocs = []\n const promises = currentForms.map(async (form, i) => {\n try {\n toggleLoadingOverlay({\n isLoading: true,\n key: 'saveAllDocs',\n loadingText: t('general:uploading'),\n })\n const req = await fetch(actionURL, {\n body: createFormData(form.formState, overrides),\n method: 'POST',\n })\n\n const json = await req.json()\n\n if (req.status === 201 && json?.doc) {\n newDocs.push(json.doc)\n }\n\n // should expose some sort of helper for this\n if (json?.errors?.length) {\n const [fieldErrors, nonFieldErrors] = json.errors.reduce(\n ([fieldErrs, nonFieldErrs], err) => {\n const newFieldErrs: any[] = []\n const newNonFieldErrs: any[] = []\n\n if (err?.message) {\n newNonFieldErrs.push(err)\n }\n\n if (Array.isArray(err?.data?.errors)) {\n err.data?.errors.forEach((dataError) => {\n if (dataError?.field) {\n newFieldErrs.push(dataError)\n } else {\n newNonFieldErrs.push(dataError)\n }\n })\n }\n\n return [\n [...fieldErrs, ...newFieldErrs],\n [...nonFieldErrs, ...newNonFieldErrs],\n ]\n },\n [[], []],\n )\n\n currentForms[i] = {\n errorCount: fieldErrors.length,\n formState: fieldReducer(currentForms[i].formState, {\n type: 'ADD_SERVER_ERRORS',\n errors: fieldErrors,\n }),\n }\n }\n } catch (error) {\n // swallow error\n } finally {\n setHasSubmitted(true)\n toggleLoadingOverlay({ isLoading: false, key: 'saveAllDocs' })\n }\n })\n\n await Promise.all(promises)\n\n const remainingForms = currentForms.filter(({ errorCount }) => errorCount > 0)\n const successCount = Math.max(0, currentForms.length - remainingForms.length)\n const errorCount = currentForms.length - successCount\n\n if (successCount) {\n toast.success(`Successfully saved ${successCount} files`)\n\n if (typeof onSuccess === 'function') {\n onSuccess(newDocs, errorCount)\n }\n }\n\n if (errorCount) {\n toast.error(`Failed to save ${errorCount} files`)\n } else {\n closeModal(drawerSlug)\n }\n\n dispatch({\n type: 'REPLACE',\n state: {\n activeIndex: 0,\n forms: remainingForms,\n totalErrorCount: remainingForms.reduce((acc, { errorCount }) => acc + errorCount, 0),\n },\n })\n },\n [actionURL, activeIndex, forms, onSuccess, t, toggleLoadingOverlay, closeModal, drawerSlug],\n )\n\n React.useEffect(() => {\n if (!collectionSlug) {\n return\n }\n if (!hasInitializedState) {\n void initializeSharedFormState()\n }\n\n if (!hasInitializedDocPermissions) {\n void initilizeSharedDocPermissions()\n }\n\n if (initialFiles) {\n if (!hasInitializedState || !hasInitializedDocPermissions) {\n setIsInitializing(true)\n } else {\n setIsInitializing(false)\n }\n }\n\n if (hasInitializedState && initialFiles && !hasInitializedWithFiles.current) {\n void addFiles(initialFiles)\n hasInitializedWithFiles.current = true\n }\n return\n }, [\n addFiles,\n initialFiles,\n initializeSharedFormState,\n initilizeSharedDocPermissions,\n collectionSlug,\n hasInitializedState,\n hasInitializedDocPermissions,\n ])\n\n return (\n <Context.Provider\n value={{\n activeIndex: state.activeIndex,\n addFiles,\n collectionSlug,\n docPermissions,\n forms,\n getFormDataRef,\n hasPublishPermission,\n hasSavePermission,\n hasSubmitted,\n isInitializing,\n removeFile,\n saveAllDocs,\n setActiveIndex,\n setFormTotalErrorCount,\n thumbnailUrls: renderedThumbnails,\n totalErrorCount,\n }}\n >\n {children}\n </Context.Provider>\n )\n}\n\nexport function useFormsManager() {\n return React.useContext(Context)\n}\n"],"mappings":"AAAA;;;AAIA,SAASA,QAAQ,QAAQ;AACzB,YAAYC,EAAA,MAAQ;AACpB,OAAOC,KAAA,MAAW;AAClB,SAASC,KAAK,QAAQ;AAItB,SAASC,YAAY,QAAQ;AAC7B,SAASC,SAAS,QAAQ;AAC1B,SAASC,SAAS,QAAQ;AAC1B,SAASC,cAAc,QAAQ;AAC/B,SAASC,YAAY,QAAQ;AAC7B,SAASC,iBAAA,IAAqBC,oBAAoB,QAAQ;AAC1D,SAASC,iBAAiB,QAAQ;AAClC,SAASC,eAAe,QAAQ;AAChC,SAASC,aAAa,QAAQ;AAC9B,SAASC,cAAc,QAAQ;AAC/B,SAASC,sBAAsB,QAAQ;AA2BvC,MAAMC,OAAA,gBAAUd,KAAA,CAAMe,aAAa,CAAsB;EACvDC,WAAA,EAAa;EACbC,QAAA,EAAUA,CAAA,KAAMC,OAAA,CAAQC,OAAO;EAC/BC,cAAA,EAAgB;EAChBC,cAAA,EAAgBC,SAAA;EAChBC,KAAA,EAAO,EAAE;EACTC,cAAA,EAAgB;IAAEC,OAAA,EAASA,CAAA,MAAO,CAAC;EAAG;EACtCC,oBAAA,EAAsB;EACtBnB,iBAAA,EAAmB;EACnBoB,YAAA,EAAc;EACdC,cAAA,EAAgB;EAChBC,UAAA,EAAYA,CAAA,MAAO;EACnBC,WAAA,EAAaA,CAAA,KAAMZ,OAAA,CAAQC,OAAO;EAClCY,cAAA,EAAgBA,CAAA,KAAM;EACtBC,sBAAA,EAAwBA,CAAA,MAAO;EAC/BC,aAAA,EAAe,EAAE;EACjBC,eAAA,EAAiB;AACnB;AAEA,MAAMC,YAAA,GAAsB;EAC1BnB,WAAA,EAAa;EACbO,KAAA,EAAO,EAAE;EACTW,eAAA,EAAiB;AACnB;AAKA,OAAO,SAASE,qBAAqB;EAAEC;AAAQ,CAAqB;EAClE,MAAM;IAAEC;EAAM,CAAE,GAAGnC,SAAA;EACnB,MAAM;IACJoC,MAAA,EAAQ;MAAEC;IAAG,CAAE;IACfC;EAAS,CACV,GAAGH,MAAA;EACJ,MAAM;IAAEI;EAAI,CAAE,GAAGtC,SAAA;EACjB,MAAM;IAAEuC,IAAI;IAAEC;EAAC,CAAE,GAAGvC,cAAA;EAEpB,MAAM,CAACsB,YAAA,EAAckB,eAAA,CAAgB,GAAG7C,KAAA,CAAM8C,QAAQ,CAAC;EACvD,MAAM,CAACzB,cAAA,EAAgB0B,iBAAA,CAAkB,GAAG/C,KAAA,CAAM8C,QAAQ;EAC1D,MAAM,CAACvC,iBAAA,EAAmByC,oBAAA,CAAqB,GAAGhD,KAAA,CAAM8C,QAAQ,CAAC;EACjE,MAAM,CAACpB,oBAAA,EAAsBuB,uBAAA,CAAwB,GAAGjD,KAAA,CAAM8C,QAAQ,CAAC;EACvE,MAAM,CAACI,mBAAA,EAAqBC,sBAAA,CAAuB,GAAGnD,KAAA,CAAM8C,QAAQ,CAAC;EACrE,MAAM,CAACM,4BAAA,EAA8BC,+BAAA,CAAgC,GAAGrD,KAAA,CAAM8C,QAAQ,CAAC;EACvF,MAAM,CAAClB,cAAA,EAAgB0B,iBAAA,CAAkB,GAAGtD,KAAA,CAAM8C,QAAQ,CAAC;EAC3D,MAAM,CAACS,KAAA,EAAOC,QAAA,CAAS,GAAGxD,KAAA,CAAMyD,UAAU,CAAC5C,sBAAA,EAAwBsB,YAAA;EACnE,MAAM;IAAEnB,WAAW;IAAEO,KAAK;IAAEW;EAAe,CAAE,GAAGqB,KAAA;EAEhD,MAAMG,QAAA,GAAW1D,KAAA,CAAM2D,MAAM,CAACpC,KAAA;EAC9BmC,QAAA,CAASjC,OAAO,GAAGF,KAAA;EACnB,MAAMqC,UAAA,GAAarC,KAAA,CAAMsC,MAAM;EAE/B,MAAMC,gBAAA,GAAmB9D,KAAA,CAAM2D,MAAM,CAAW,EAAE;EAClD,MAAMI,cAAA,GAAiB/D,KAAA,CAAM2D,MAAM,CAAC,IAAIK,GAAA,IAAO;EAAA;EAC/C,MAAM,CAACC,kBAAA,EAAoBC,qBAAA,CAAsB,GAAGlE,KAAA,CAAM8C,QAAQ,CAAW,EAAE;EAE/E9C,KAAA,CAAMmE,SAAS,CAAC;IAEZ;MACA,MAAMC,aAAA,GAAgB,C,GAAIN,gBAAA,CAAiBrC,OAAO,CAAC;MAEnD,KAAK,IAAI4C,CAAA,GAAI,GAAGA,CAAA,GAAIT,UAAA,EAAYS,CAAA,IAAK;QACnC,MAAMC,IAAA,GAAOZ,QAAA,CAASjC,OAAO,CAAC4C,CAAA,CAAE,CAACE,SAAS,CAACD,IAAI,CAACE,KAAK;QAErD;QACA,IAAIT,cAAA,CAAetC,OAAO,CAACgD,GAAG,CAACH,IAAA,KAAS,CAACA,IAAA,EAAM;UAC7C;QACF;QACAP,cAAA,CAAetC,OAAO,CAACiD,GAAG,CAACJ,IAAA;QAE3B;QACA,MAAMK,YAAA,GAAe,MAAMjE,eAAA,CAAgB4D,IAAA;QAC3CF,aAAa,CAACC,CAAA,CAAE,GAAGM,YAAA;QACnBb,gBAAA,CAAiBrC,OAAO,GAAG2C,aAAA;QAE3B;QACAF,qBAAA,CAAsB,C,GAAIE,aAAA,CAAc;QACxC,MAAM,IAAIlD,OAAA,CAASC,OAAA,IAAYyD,UAAA,CAAWzD,OAAA,EAAS;MACrD;IACF;EACF,GAAG,CAACyC,UAAA,EAAYlD,eAAA,CAAgB;EAEhC,MAAM;IAAEmE;EAAoB,CAAE,GAAGpE,iBAAA;EACjC,MAAM;IAAEqE;EAAU,CAAE,GAAGhF,QAAA;EACvB,MAAM;IAAEsB,cAAc;IAAE2D,UAAU;IAAEC,YAAY;IAAEC;EAAS,CAAE,GAAGtE,aAAA;EAEhE,MAAMuE,uBAAA,GAA0BlF,KAAA,CAAM2D,MAAM,CAAC;EAC7C,MAAMwB,eAAA,GAAkBnF,KAAA,CAAM2D,MAAM,CAAY;EAChD,MAAMnC,cAAA,GAAiBxB,KAAA,CAAM2D,MAAM,CAAa,OAAO,CAAC;EAExD,MAAMyB,SAAA,GAAY,GAAG5C,GAAA,IAAOpB,cAAA,EAAgB;EAE5C,MAAMiE,6BAAA,GAAgCrF,KAAA,CAAMsF,WAAW,CAAC;IACtD,MAAMC,MAAA,GAAS;MACbC,MAAA,EAAQ9C,IAAA,IAAQpB;IAClB;IAEA,MAAMmE,YAAA,GAAe,IAAIrE,cAAA,SAAuB;IAChD,MAAMsE,GAAA,GAAM,MAAMC,KAAA,CAAM,GAAGlD,SAAA,GAAYD,GAAA,GAAMiD,YAAA,IAAgB1F,EAAA,CAAG6F,SAAS,CAACL,MAAA,GAAS,EAAE;MACnFM,WAAA,EAAa;MACbC,OAAA,EAAS;QACP,mBAAmBnD,IAAA,CAAKoD,QAAQ;QAChC,gBAAgB;MAClB;MACAC,MAAA,EAAQ;IACV;IAEA,MAAMC,IAAA,GAA4B,MAAMP,GAAA,CAAIO,IAAI;IAChD,MAAMC,mBAAA,GAAsB,MAAMP,KAAA,CAChC,GAAGlD,SAAA,GAAYD,GAAA,GAAMiD,YAAA,IAAgB1F,EAAA,CAAG6F,SAAS,CAACL,MAAA,GAAS,EAC3D;MACEY,IAAA,EAAMC,IAAA,CAAKR,SAAS,CAAC;QACnBS,OAAA,EAAS;MACX;MACAR,WAAA,EAAa;MACbC,OAAA,EAAS;QACP,mBAAmBnD,IAAA,CAAKoD,QAAQ;QAChC,gBAAgB;MAClB;MACAC,MAAA,EAAQ;IACV,GACAM,IAAI,CAAEZ,KAAA,IAAQA,KAAA,CAAIO,IAAI;IAExBlD,iBAAA,CAAkBkD,IAAA;IAElBjD,oBAAA,CACExC,oBAAA,CAAqB;MACnBY,cAAA;MACAC,cAAA,EAAgB4E,IAAA;MAChBM,SAAA,EAAW;IACb;IAGFtD,uBAAA,CAAwBiD,mBAAA,EAAqBM,MAAA,EAAQC,UAAA;IACrDpD,+BAAA,CAAgC;EAClC,GAAG,CAACb,GAAA,EAAKE,IAAA,EAAMtB,cAAA,EAAgBuB,IAAA,CAAKoD,QAAQ,EAAEtD,SAAA,CAAU;EAExD,MAAMiE,yBAAA,GAA4B1G,KAAA,CAAMsF,WAAW,CACjD,MAAOqB,eAAA;IACL,IAAIA,eAAA,EAAiBC,MAAA,EAAQ;MAC3BD,eAAA,CAAgBE,KAAK,CAAC;IACxB;IAEA,IAAI;MACF,MAAM;QAAEtD,KAAA,EAAOuD;MAAqB,CAAE,GAAG,MAAMxG,YAAA,CAAa;QAC1DyG,QAAA,EAAUzE,MAAA,CAAOC,MAAM,CAACC,GAAG;QAC3B2D,IAAA,EAAM;UACJ/E,cAAA;UACAoE,MAAA,EAAQ9C,IAAA;UACRsE,SAAA,EAAW;UACXC,UAAA,EAAY7F;QACd;QACA;QACAqB,SAAA,EAAWH,MAAA,CAAOG,SAAS;QAC3BmE,MAAA,EAAQD,eAAA,EAAiBC;MAC3B;MACAzB,eAAA,CAAgB1D,OAAO,GAAGqF,qBAAA;MAC1B3D,sBAAA,CAAuB;IACzB,EAAE,OAAO+D,KAAA,EAAO;MACd;IAAA;EAEJ,GACA,CAACxE,IAAA,EAAMtB,cAAA,EAAgBkB,MAAA,CAAOC,MAAM,CAACC,GAAG,EAAEF,MAAA,CAAOG,SAAS,CAAC;EAG7D,MAAMV,cAAA,GAAwD/B,KAAA,CAAMsF,WAAW,CAC5E6B,KAAA;IACC,MAAMC,gBAAA,GAAmB5F,cAAA,CAAeC,OAAO;IAC/C+B,QAAA,CAAS;MACP6D,IAAA,EAAM;MACN9D,KAAA,EAAO;QACLvC,WAAA,EAAamG,KAAA;QACb5F,KAAA,EAAOA,KAAA,CAAM+F,GAAG,CAAC,CAACC,IAAA,EAAMlD,GAAA;UACtB,IAAIA,GAAA,KAAMrD,WAAA,EAAa;YACrB,OAAO;cACLwG,UAAA,EAAYD,IAAA,CAAKC,UAAU;cAC3BjD,SAAA,EAAW6C;YACb;UACF;UACA,OAAOG,IAAA;QACT;MACF;IACF;EACF,GACA,CAAChG,KAAA,EAAOP,WAAA,CAAY;EAGtB,MAAMC,QAAA,GAAWjB,KAAA,CAAMsF,WAAW,CAChC,MAAOmC,KAAA;IACL5C,oBAAA,CAAqB;MAAE6C,SAAA,EAAW;MAAMC,GAAA,EAAK;IAAa;IAC1D,IAAI,CAACzE,mBAAA,EAAqB;MACxB,MAAMwD,yBAAA;IACR;IACAlD,QAAA,CAAS;MAAE6D,IAAA,EAAM;MAAaI,KAAA;MAAOtF,YAAA,EAAcgD,eAAA,CAAgB1D;IAAQ;IAC3EoD,oBAAA,CAAqB;MAAE6C,SAAA,EAAW;MAAOC,GAAA,EAAK;IAAa;EAC7D,GACA,CAACjB,yBAAA,EAA2BxD,mBAAA,EAAqB2B,oBAAA,CAAqB;EAGxE,MAAMhD,UAAA,GAAgD7B,KAAA,CAAMsF,WAAW,CAAE6B,OAAA;IACvE3D,QAAA,CAAS;MAAE6D,IAAA,EAAM;MAAeF,KAAA,EAAAA;IAAM;EACxC,GAAG,EAAE;EAEL,MAAMnF,sBAAA,GAAwEhC,KAAA,CAAMsF,WAAW,CAC7F,CAAC;IAAEkC,UAAU;IAAEL,KAAK,EAALA;EAAK,CAAE;IACpB3D,QAAA,CAAS;MACP6D,IAAA,EAAM;MACNO,KAAA,EAAOJ,UAAA;MACPL,KAAA,EAAAA;IACF;EACF,GACA,EAAE;EAGJ,MAAMrF,WAAA,GAAkD9B,KAAA,CAAMsF,WAAW,CACvE,OAAO;IAAEuC;EAAS,CAAE,GAAG,CAAC,CAAC;IACvB,MAAMT,kBAAA,GAAmB5F,cAAA,CAAeC,OAAO;IAC/C,MAAMqG,YAAA,GAAe,C,GAAIvG,KAAA,CAAM;IAC/BuG,YAAY,CAAC9G,WAAA,CAAY,GAAG;MAC1BwG,UAAA,EAAYM,YAAY,CAAC9G,WAAA,CAAY,CAACwG,UAAU;MAChDjD,SAAA,EAAW6C;IACb;IACA,MAAMW,OAAA,GAAU,EAAE;IAClB,MAAMC,QAAA,GAAWF,YAAA,CAAaR,GAAG,CAAC,OAAOC,MAAA,EAAMlD,GAAA;MAC7C,IAAI;QACFQ,oBAAA,CAAqB;UACnB6C,SAAA,EAAW;UACXC,GAAA,EAAK;UACLM,WAAA,EAAarF,CAAA,CAAE;QACjB;QACA,MAAMsF,GAAA,GAAM,MAAMvC,KAAA,CAAMP,SAAA,EAAW;UACjCe,IAAA,EAAMvF,cAAA,CAAe2G,MAAA,CAAKhD,SAAS,EAAEsD,SAAA;UACrC7B,MAAA,EAAQ;QACV;QAEA,MAAMC,MAAA,GAAO,MAAMiC,GAAA,CAAIjC,IAAI;QAE3B,IAAIiC,GAAA,CAAIC,MAAM,KAAK,OAAOlC,MAAA,EAAMmC,GAAA,EAAK;UACnCL,OAAA,CAAQM,IAAI,CAACpC,MAAA,CAAKmC,GAAG;QACvB;QAEA;QACA,IAAInC,MAAA,EAAMqC,MAAA,EAAQzE,MAAA,EAAQ;UACxB,MAAM,CAAC0E,WAAA,EAAaC,cAAA,CAAe,GAAGvC,MAAA,CAAKqC,MAAM,CAACG,MAAM,CACtD,CAAC,CAACC,SAAA,EAAWC,YAAA,CAAa,EAAEC,GAAA;YAC1B,MAAMC,YAAA,GAAsB,EAAE;YAC9B,MAAMC,eAAA,GAAyB,EAAE;YAEjC,IAAIF,GAAA,EAAKG,OAAA,EAAS;cAChBD,eAAA,CAAgBT,IAAI,CAACO,GAAA;YACvB;YAEA,IAAII,KAAA,CAAMC,OAAO,CAACL,GAAA,EAAKM,IAAA,EAAMZ,MAAA,GAAS;cACpCM,GAAA,CAAIM,IAAI,EAAEZ,MAAA,CAAOa,OAAA,CAASC,SAAA;gBACxB,IAAIA,SAAA,EAAWC,KAAA,EAAO;kBACpBR,YAAA,CAAaR,IAAI,CAACe,SAAA;gBACpB,OAAO;kBACLN,eAAA,CAAgBT,IAAI,CAACe,SAAA;gBACvB;cACF;YACF;YAEA,OAAO,CACL,C,GAAIV,SAAA,E,GAAcG,YAAA,CAAa,EAC/B,C,GAAIF,YAAA,E,GAAiBG,eAAA,CAAgB,CACtC;UACH,GACA,CAAC,EAAE,EAAE,EAAE,CAAC;UAGVhB,YAAY,CAACzD,GAAA,CAAE,GAAG;YAChBmD,UAAA,EAAYe,WAAA,CAAY1E,MAAM;YAC9BU,SAAA,EAAWrE,YAAA,CAAa4H,YAAY,CAACzD,GAAA,CAAE,CAACE,SAAS,EAAE;cACjD8C,IAAA,EAAM;cACNiB,MAAA,EAAQC;YACV;UACF;QACF;MACF,EAAE,OAAOrB,OAAA,EAAO;QACd;MAAA,CACF,SAAU;QACRrE,eAAA,CAAgB;QAChBgC,oBAAA,CAAqB;UAAE6C,SAAA,EAAW;UAAOC,GAAA,EAAK;QAAc;MAC9D;IACF;IAEA,MAAMzG,OAAA,CAAQoI,GAAG,CAACtB,QAAA;IAElB,MAAMuB,cAAA,GAAiBzB,YAAA,CAAa0B,MAAM,CAAC,CAAC;MAAEhC,UAAU,EAAVA;IAAU,CAAE,KAAKA,YAAA,GAAa;IAC5E,MAAMiC,YAAA,GAAeC,IAAA,CAAKC,GAAG,CAAC,GAAG7B,YAAA,CAAajE,MAAM,GAAG0F,cAAA,CAAe1F,MAAM;IAC5E,MAAM2D,YAAA,GAAaM,YAAA,CAAajE,MAAM,GAAG4F,YAAA;IAEzC,IAAIA,YAAA,EAAc;MAChBxJ,KAAA,CAAM2J,OAAO,CAAC,sBAAsBH,YAAA,QAAoB;MAExD,IAAI,OAAOxE,SAAA,KAAc,YAAY;QACnCA,SAAA,CAAU8C,OAAA,EAASP,YAAA;MACrB;IACF;IAEA,IAAIA,YAAA,EAAY;MACdvH,KAAA,CAAMiH,KAAK,CAAC,kBAAkBM,YAAA,QAAkB;IAClD,OAAO;MACL1C,UAAA,CAAWC,UAAA;IACb;IAEAvB,QAAA,CAAS;MACP6D,IAAA,EAAM;MACN9D,KAAA,EAAO;QACLvC,WAAA,EAAa;QACbO,KAAA,EAAOgI,cAAA;QACPrH,eAAA,EAAiBqH,cAAA,CAAed,MAAM,CAAC,CAACoB,GAAA,EAAK;UAAErC,UAAU,EAAVA;QAAU,CAAE,KAAKqC,GAAA,GAAMrC,YAAA,EAAY;MACpF;IACF;EACF,GACA,CAACpC,SAAA,EAAWpE,WAAA,EAAaO,KAAA,EAAO0D,SAAA,EAAWrC,CAAA,EAAGiC,oBAAA,EAAsBC,UAAA,EAAYC,UAAA,CAAW;EAG7F/E,KAAA,CAAMmE,SAAS,CAAC;IACd,IAAI,CAAC/C,cAAA,EAAgB;MACnB;IACF;IACA,IAAI,CAAC8B,mBAAA,EAAqB;MACxB,KAAKwD,yBAAA;IACP;IAEA,IAAI,CAACtD,4BAAA,EAA8B;MACjC,KAAKiC,6BAAA;IACP;IAEA,IAAIL,YAAA,EAAc;MAChB,IAAI,CAAC9B,mBAAA,IAAuB,CAACE,4BAAA,EAA8B;QACzDE,iBAAA,CAAkB;MACpB,OAAO;QACLA,iBAAA,CAAkB;MACpB;IACF;IAEA,IAAIJ,mBAAA,IAAuB8B,YAAA,IAAgB,CAACE,uBAAA,CAAwBzD,OAAO,EAAE;MAC3E,KAAKR,QAAA,CAAS+D,YAAA;MACdE,uBAAA,CAAwBzD,OAAO,GAAG;IACpC;IACA;EACF,GAAG,CACDR,QAAA,EACA+D,YAAA,EACA0B,yBAAA,EACArB,6BAAA,EACAjE,cAAA,EACA8B,mBAAA,EACAE,4BAAA,CACD;EAED,oBACE0G,IAAA,CAAChJ,OAAA,CAAQiJ,QAAQ;IACfvF,KAAA,EAAO;MACLxD,WAAA,EAAauC,KAAA,CAAMvC,WAAW;MAC9BC,QAAA;MACAG,cAAA;MACAC,cAAA;MACAE,KAAA;MACAC,cAAA;MACAE,oBAAA;MACAnB,iBAAA;MACAoB,YAAA;MACAC,cAAA;MACAC,UAAA;MACAC,WAAA;MACAC,cAAA;MACAC,sBAAA;MACAC,aAAA,EAAegC,kBAAA;MACf/B;IACF;cAECG;;AAGP;AAEA,OAAO,SAAA2H,gBAAA;EAAA,OACEhK,KAAA,CAAAiK,UAAA,CAAAnJ,OAAiB;AAAA","ignoreList":[]}
@@ -3,6 +3,7 @@ import React from 'react';
3
3
  import type { DocumentDrawerProps } from '../DocumentDrawer/types.js';
4
4
  import './index.scss';
5
5
  type RelationshipTableComponentProps = {
6
+ readonly allowCreate?: boolean;
6
7
  readonly field: JoinFieldClient;
7
8
  readonly filterOptions?: boolean | Where;
8
9
  readonly initialData?: PaginatedDocs;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/RelationshipTable/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,eAAe,EACf,aAAa,EACb,KAAK,EACN,MAAM,SAAS,CAAA;AAEhB,OAAO,KAA2C,MAAM,OAAO,CAAA;AAO/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAiBrE,OAAO,cAAc,CAAA;AAKrB,KAAK,+BAA+B,GAAG;IACrC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,GAAG,KAAK,CAAA;IACxC,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAA;IACpC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,mBAAmB,CAAC,cAAc,CAAC,CAAA;IACjE,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,+BAA+B,CA0RvE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/RelationshipTable/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,eAAe,EACf,aAAa,EACb,KAAK,EACN,MAAM,SAAS,CAAA;AAEhB,OAAO,KAA2C,MAAM,OAAO,CAAA;AAO/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAiBrE,OAAO,cAAc,CAAA;AAKrB,KAAK,+BAA+B,GAAG;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,GAAG,KAAK,CAAA;IACxC,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAA;IACpC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,mBAAmB,CAAC,cAAc,CAAC,CAAA;IACjE,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,+BAA+B,CA0RvE,CAAA"}