@payloadcms/ui 3.64.0-internal.deef021 → 3.64.0

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 (44) hide show
  1. package/dist/elements/Autosave/index.js +2 -2
  2. package/dist/elements/Autosave/index.js.map +1 -1
  3. package/dist/elements/DeleteMany/index.d.ts.map +1 -1
  4. package/dist/elements/DeleteMany/index.js +1 -0
  5. package/dist/elements/DeleteMany/index.js.map +1 -1
  6. package/dist/elements/EditMany/DrawerContent.d.ts.map +1 -1
  7. package/dist/elements/EditMany/DrawerContent.js +1 -0
  8. package/dist/elements/EditMany/DrawerContent.js.map +1 -1
  9. package/dist/elements/PublishMany/DrawerContent.d.ts.map +1 -1
  10. package/dist/elements/PublishMany/DrawerContent.js +1 -0
  11. package/dist/elements/PublishMany/DrawerContent.js.map +1 -1
  12. package/dist/elements/RestoreMany/index.d.ts.map +1 -1
  13. package/dist/elements/RestoreMany/index.js +1 -0
  14. package/dist/elements/RestoreMany/index.js.map +1 -1
  15. package/dist/elements/UnpublishMany/DrawerContent.d.ts.map +1 -1
  16. package/dist/elements/UnpublishMany/DrawerContent.js +1 -0
  17. package/dist/elements/UnpublishMany/DrawerContent.js.map +1 -1
  18. package/dist/exports/client/index.js +12 -12
  19. package/dist/exports/client/index.js.map +4 -4
  20. package/dist/fields/Upload/Input.d.ts.map +1 -1
  21. package/dist/fields/Upload/Input.js +54 -25
  22. package/dist/fields/Upload/Input.js.map +1 -1
  23. package/dist/forms/Form/index.d.ts.map +1 -1
  24. package/dist/forms/Form/index.js +7 -3
  25. package/dist/forms/Form/index.js.map +1 -1
  26. package/dist/providers/Auth/index.d.ts +34 -0
  27. package/dist/providers/Auth/index.d.ts.map +1 -1
  28. package/dist/providers/Auth/index.js.map +1 -1
  29. package/dist/providers/Locale/index.d.ts.map +1 -1
  30. package/dist/providers/Locale/index.js +14 -19
  31. package/dist/providers/Locale/index.js.map +1 -1
  32. package/dist/providers/TableColumns/buildColumnState/renderCell.d.ts.map +1 -1
  33. package/dist/providers/TableColumns/buildColumnState/renderCell.js +19 -1
  34. package/dist/providers/TableColumns/buildColumnState/renderCell.js.map +1 -1
  35. package/dist/utilities/normalizeRelationshipValue.d.ts +29 -0
  36. package/dist/utilities/normalizeRelationshipValue.d.ts.map +1 -0
  37. package/dist/utilities/normalizeRelationshipValue.js +59 -0
  38. package/dist/utilities/normalizeRelationshipValue.js.map +1 -0
  39. package/dist/utilities/normalizeRelationshipValue.spec.js +373 -0
  40. package/dist/utilities/normalizeRelationshipValue.spec.js.map +1 -0
  41. package/dist/views/Edit/Auth/index.d.ts.map +1 -1
  42. package/dist/views/Edit/Auth/index.js +2 -7
  43. package/dist/views/Edit/Auth/index.js.map +1 -1
  44. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/fields/Upload/Input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EAEnB,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,WAAW,IAAI,eAAe,EAC9B,iBAAiB,EAClB,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAIjD,OAAO,KAA0C,MAAM,OAAO,CAAA;AAqB9D,OAAO,cAAc,CAAA;AAErB,eAAO,MAAM,SAAS,WAAW,CAAA;AAIjC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B;;OAEG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,sBAAsB,CAAA;IAC5C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IAChD,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,iBAAiB,CAAA;IACxC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,mBAAmB,CAAA;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,qBAAqB,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAA;IACpF,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAA,KAAK,IAAI,CAAA;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC,YAAY,CAAC,CAAA;IAClD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,iBAAiB,GAAG,iBAAiB,EAAE,CAAA;CACjG,CAAA;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,qBAupBlD"}
1
+ {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/fields/Upload/Input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EAEnB,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,WAAW,IAAI,eAAe,EAC9B,iBAAiB,EAClB,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAIjD,OAAO,KAA0C,MAAM,OAAO,CAAA;AAsB9D,OAAO,cAAc,CAAA;AAErB,eAAO,MAAM,SAAS,WAAW,CAAA;AAIjC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B;;OAEG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,sBAAsB,CAAA;IAC5C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IAChD,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,iBAAiB,CAAA;IACxC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,mBAAmB,CAAA;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,qBAAqB,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAA;IACpF,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAA,KAAK,IAAI,CAAA;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC,YAAY,CAAC,CAAA;IAClD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,iBAAiB,GAAG,iBAAiB,EAAE,CAAA;CACjG,CAAA;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,qBAmsBlD"}
@@ -17,6 +17,7 @@ import { FieldLabel } from '../../fields/FieldLabel/index.js';
17
17
  import { useAuth } from '../../providers/Auth/index.js';
18
18
  import { useLocale } from '../../providers/Locale/index.js';
19
19
  import { useTranslation } from '../../providers/Translation/index.js';
20
+ import { normalizeRelationshipValue } from '../../utilities/normalizeRelationshipValue.js';
20
21
  import { fieldBaseClass } from '../shared/index.js';
21
22
  import { UploadComponentHasMany } from './HasMany/index.js';
22
23
  import { UploadComponentHasOne } from './HasOne/index.js';
@@ -170,7 +171,12 @@ export function UploadInput(props) {
170
171
  if (!grouped[relationTo_0]) {
171
172
  grouped[relationTo_0] = [];
172
173
  }
173
- grouped[relationTo_0].push(value_0);
174
+ // Ensure we extract the actual ID value, not an object
175
+ let idValue = value_0;
176
+ if (value_0 && typeof value_0 === 'object' && 'value' in value_0) {
177
+ idValue = value_0.value;
178
+ }
179
+ grouped[relationTo_0].push(idValue);
174
180
  });
175
181
  // 2. Fetch per collection
176
182
  const fetches = Object.entries(grouped).map(async ([collection_0, ids]) => {
@@ -238,6 +244,7 @@ export function UploadInput(props) {
238
244
  });
239
245
  return sortedDocs;
240
246
  }, [serverURL, api, code, i18n.language, t]);
247
+ const normalizeValue = useCallback(value_2 => normalizeRelationshipValue(value_2, relationTo), [relationTo]);
241
248
  const onUploadSuccess = useCallback(uploadedForms => {
242
249
  const isPoly_0 = Array.isArray(relationTo);
243
250
  if (hasMany) {
@@ -245,7 +252,9 @@ export function UploadInput(props) {
245
252
  relationTo: form.collectionSlug,
246
253
  value: form.doc.id
247
254
  } : form.doc.id);
248
- const mergedValue = [...(Array.isArray(value) ? value : []), ...newValues];
255
+ // Normalize existing values before merging
256
+ const normalizedExisting = Array.isArray(value) ? value.map(normalizeValue) : [];
257
+ const mergedValue = [...normalizedExisting, ...newValues];
249
258
  onChange(mergedValue);
250
259
  setPopulatedDocs(currentDocs => [...(currentDocs || []), ...uploadedForms.map(form_0 => ({
251
260
  relationTo: form_0.collectionSlug,
@@ -263,7 +272,7 @@ export function UploadInput(props) {
263
272
  value: firstDoc.doc
264
273
  }]);
265
274
  }
266
- }, [value, onChange, hasMany, relationTo]);
275
+ }, [value, onChange, hasMany, relationTo, normalizeValue]);
267
276
  const onLocalFileSelection = React.useCallback(fileList => {
268
277
  let fileListToUse = fileList;
269
278
  if (!hasMany && fileList && fileList.length > 1) {
@@ -306,9 +315,11 @@ export function UploadInput(props) {
306
315
  relationTo: activeRelationTo,
307
316
  value: id_2
308
317
  } : id_2);
309
- onChange([...(Array.isArray(value) ? value : []), ...newValues_0]);
318
+ // Normalize existing values before merging
319
+ const normalizedExisting_0 = Array.isArray(value) ? value.map(normalizeValue) : [];
320
+ onChange([...normalizedExisting_0, ...newValues_0]);
310
321
  closeListDrawer();
311
- }, [activeRelationTo, closeListDrawer, onChange, populateDocs, value, relationTo]);
322
+ }, [activeRelationTo, closeListDrawer, onChange, populateDocs, value, relationTo, normalizeValue]);
312
323
  const onDocCreate = React.useCallback(data_0 => {
313
324
  const isPoly_2 = Array.isArray(relationTo);
314
325
  if (data_0.doc) {
@@ -343,12 +354,14 @@ export function UploadInput(props) {
343
354
  }
344
355
  return currentDocs_2;
345
356
  });
346
- const newValue_2 = isPoly_3 ? {
347
- relationTo: collectionSlug,
348
- value: doc_1.id
349
- } : doc_1.id;
350
357
  if (hasMany) {
351
- const valueToUse = [...(Array.isArray(value) ? value : []), newValue_2];
358
+ const newValue_2 = isPoly_3 ? {
359
+ relationTo: collectionSlug,
360
+ value: doc_1.id
361
+ } : doc_1.id;
362
+ // Normalize existing values before merging
363
+ const normalizedExisting_1 = Array.isArray(value) ? value.map(normalizeValue) : [];
364
+ const valueToUse = [...normalizedExisting_1, newValue_2];
352
365
  onChange(valueToUse);
353
366
  } else {
354
367
  const valueToUse_0 = isPoly_3 ? {
@@ -358,7 +371,7 @@ export function UploadInput(props) {
358
371
  onChange(valueToUse_0);
359
372
  }
360
373
  closeListDrawer();
361
- }, [closeListDrawer, hasMany, populateDocs, onChange, value, relationTo]);
374
+ }, [closeListDrawer, hasMany, populateDocs, onChange, value, relationTo, normalizeValue]);
362
375
  const reloadDoc = React.useCallback(async (docID, collectionSlug_0) => {
363
376
  const docs_1 = await populateDocs([{
364
377
  relationTo: collectionSlug_0,
@@ -389,11 +402,11 @@ export function UploadInput(props) {
389
402
  const isPoly_4 = Array.isArray(relationTo);
390
403
  const newValueToSave = newValue_3.map(({
391
404
  relationTo: rel,
392
- value: value_2
405
+ value: value_3
393
406
  }) => isPoly_4 ? {
394
407
  relationTo: rel,
395
- value: value_2.id
396
- } : value_2.id);
408
+ value: value_3.id
409
+ } : value_3.id);
397
410
  onChange(newValueToSave);
398
411
  setPopulatedDocs(newValue_3);
399
412
  }, [onChange, relationTo]);
@@ -406,40 +419,56 @@ export function UploadInput(props) {
406
419
  }
407
420
  const newValueToSave_0 = newValue_4.map(({
408
421
  relationTo: rel_0,
409
- value: value_3
422
+ value: value_4
410
423
  }) => isPoly_5 ? {
411
424
  relationTo: rel_0,
412
- value: value_3.id
413
- } : value_3.id);
425
+ value: value_4.id
426
+ } : value_4.id);
414
427
  onChange(hasMany ? newValueToSave_0 : newValueToSave_0[0]);
415
428
  setPopulatedDocs(newValue_4);
416
429
  }, [onChange, hasMany, relationTo]);
417
430
  useEffect(() => {
418
431
  async function loadInitialDocs() {
419
432
  if (value) {
420
- let itemsToLoad_0;
433
+ let itemsToLoad_0 = [];
421
434
  if (Array.isArray(relationTo) && (typeof value === 'object' && 'relationTo' in value || Array.isArray(value) && value.length > 0 && typeof value[0] === 'object' && 'relationTo' in value[0])) {
422
435
  // For poly uploads, value should already be in the format { relationTo, value }
423
436
  const values_0 = Array.isArray(value) ? value : [value];
424
- itemsToLoad_0 = values_0.filter(v => typeof v === 'object' && 'relationTo' in v);
437
+ itemsToLoad_0 = values_0.filter(v => typeof v === 'object' && 'relationTo' in v).map(v_0 => {
438
+ // Ensure the value property is a simple ID, not nested
439
+ let idValue_0 = v_0.value;
440
+ while (idValue_0 && typeof idValue_0 === 'object' && idValue_0 !== null && 'value' in idValue_0) {
441
+ idValue_0 = idValue_0.value;
442
+ }
443
+ return {
444
+ relationTo: v_0.relationTo,
445
+ value: idValue_0
446
+ };
447
+ });
425
448
  } else {
426
449
  // This check is here to satisfy TypeScript that relationTo is a string
427
450
  if (!Array.isArray(relationTo)) {
428
451
  // For single collection uploads, we need to wrap the IDs
429
452
  const ids_0 = Array.isArray(value) ? value : [value];
430
453
  itemsToLoad_0 = ids_0.map(id_3 => {
431
- const idValue = typeof id_3 === 'object' && 'value' in id_3 ? id_3.value : id_3;
454
+ // Extract the actual ID, handling nested objects
455
+ let idValue_1 = id_3;
456
+ while (idValue_1 && typeof idValue_1 === 'object' && idValue_1 !== null && 'value' in idValue_1) {
457
+ idValue_1 = idValue_1.value;
458
+ }
432
459
  return {
433
460
  relationTo,
434
- value: idValue
461
+ value: idValue_1
435
462
  };
436
463
  });
437
464
  }
438
465
  }
439
- const loadedDocs_1 = await populateDocs(itemsToLoad_0);
440
- if (loadedDocs_1) {
441
- setPopulatedDocs(loadedDocs_1);
442
- loadedValueRef.current = value;
466
+ if (itemsToLoad_0.length > 0) {
467
+ const loadedDocs_1 = await populateDocs(itemsToLoad_0);
468
+ if (loadedDocs_1) {
469
+ setPopulatedDocs(loadedDocs_1);
470
+ loadedValueRef.current = value;
471
+ }
443
472
  }
444
473
  } else {
445
474
  // Clear populated docs when value is cleared
@@ -1 +1 @@
1
- {"version":3,"file":"Input.js","names":["useModal","qs","React","useCallback","useEffect","useMemo","useBulkUpload","Button","useDocumentDrawer","Dropzone","useListDrawer","RenderCustomComponent","ShimmerEffect","FieldDescription","FieldError","FieldLabel","useAuth","useLocale","useTranslation","fieldBaseClass","UploadComponentHasMany","UploadComponentHasOne","baseClass","UploadInput","props","AfterInput","allowCreate","api","BeforeInput","className","Description","description","displayPreview","Error","filterOptions","filterOptionsFromProps","hasMany","isSortable","Label","label","localized","maxRows","onChange","onChangeFromProps","path","readOnly","relationTo","required","serverURL","showError","style","value","populatedDocs","setPopulatedDocs","useState","activeRelationTo","Array","isArray","openModal","drawerSlug","setCollectionSlug","setInitialFiles","setMaxFiles","setOnSuccess","setSelectableCollections","permissions","code","i18n","t","collectionSlugsWithCreatePermission","filter","relation","collections","create","isPoly","existingIdsByRelation","values","val","push","collection","id","newFilterOptions","relations","forEach","existingIds","not_in","concat","ListDrawer","closeDrawer","closeListDrawer","openDrawer","openListDrawer","collectionSlugs","CreateDocDrawer","closeCreateDocDrawer","openCreateDocDrawer","collectionSlug","loadedValueRef","useRef","canCreate","newValue","populateDocs","items","length","grouped","fetches","Object","entries","map","ids","query","depth","draft","limit","locale","where","and","in","response","fetch","body","stringify","credentials","headers","language","method","docs","ok","data","json","docsById","reduce","acc","doc","results","Promise","all","lookup","sortedDocs","filename","isPlaceholder","onUploadSuccess","uploadedForms","newValues","form","mergedValue","currentDocs","firstDoc","onLocalFileSelection","fileList","fileListToUse","dataTransfer","DataTransfer","add","files","collectionToUse","onListBulkSelect","selectedDocIDs","isSelected","itemsToLoad","loadedDocs","onDocCreate","onListSelect","selectedDoc","valueToUse","reloadDoc","docID","updatedDocsToPropogate","existingDocIndex","findIndex","hasExisting","updatedDocs","onReorder","newValueToSave","rel","onRemove","loadInitialDocs","v","idValue","current","valueChanged","showDropzone","_jsxs","Boolean","join","replace","_jsx","CustomComponent","Fallback","_Fragment","fileDocs","readonly","showCollectionSlug","height","fileDoc","disabled","multipleFiles","buttonStyle","onClick","size","onSave","enableRowSelections","onBulkSelect","onSelect"],"sources":["../../../src/fields/Upload/Input.tsx"],"sourcesContent":["'use client'\n\nimport type {\n ClientCollectionConfig,\n FieldLabelClientProps,\n FilterOptionsResult,\n JsonObject,\n StaticDescription,\n StaticLabel,\n UploadFieldClient,\n UploadField as UploadFieldType,\n ValueWithRelation,\n} from 'payload'\nimport type { MarkOptional } from 'ts-essentials'\n\nimport { useModal } from '@faceless-ui/modal'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useMemo } from 'react'\n\nimport type { ListDrawerProps } from '../../elements/ListDrawer/types.js'\nimport type { ReloadDoc, ValueAsDataWithRelation } from './types.js'\n\nimport { type BulkUploadContext, useBulkUpload } from '../../elements/BulkUpload/index.js'\nimport { Button } from '../../elements/Button/index.js'\nimport { useDocumentDrawer } from '../../elements/DocumentDrawer/index.js'\nimport { Dropzone } from '../../elements/Dropzone/index.js'\nimport { useListDrawer } from '../../elements/ListDrawer/index.js'\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { ShimmerEffect } from '../../elements/ShimmerEffect/index.js'\nimport { FieldDescription } from '../../fields/FieldDescription/index.js'\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { FieldLabel } from '../../fields/FieldLabel/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport { UploadComponentHasMany } from './HasMany/index.js'\nimport { UploadComponentHasOne } from './HasOne/index.js'\nimport './index.scss'\n\nexport const baseClass = 'upload'\n\ntype PopulatedDocs = { relationTo: string; value: JsonObject }[]\n\nexport type UploadInputProps = {\n readonly AfterInput?: React.ReactNode\n readonly allowCreate?: boolean\n /**\n * Controls the visibility of the \"Create new collection\" button\n */\n readonly api?: string\n readonly BeforeInput?: React.ReactNode\n readonly className?: string\n readonly collection?: ClientCollectionConfig\n readonly customUploadActions?: React.ReactNode[]\n readonly Description?: React.ReactNode\n readonly description?: StaticDescription\n readonly displayPreview?: boolean\n readonly Error?: React.ReactNode\n readonly filterOptions?: FilterOptionsResult\n readonly hasMany?: boolean\n readonly hideRemoveFile?: boolean\n readonly isSortable?: boolean\n readonly Label?: React.ReactNode\n readonly label?: StaticLabel\n readonly labelProps?: FieldLabelClientProps<MarkOptional<UploadFieldClient, 'type'>>\n readonly localized?: boolean\n readonly maxRows?: number\n readonly onChange?: (e) => void\n readonly path: string\n readonly readOnly?: boolean\n readonly relationTo: UploadFieldType['relationTo']\n readonly required?: boolean\n readonly serverURL?: string\n readonly showError?: boolean\n readonly style?: React.CSSProperties\n readonly value?: (number | string)[] | number | string | ValueWithRelation | ValueWithRelation[]\n}\n\nexport function UploadInput(props: UploadInputProps) {\n const {\n AfterInput,\n allowCreate,\n api,\n BeforeInput,\n className,\n Description,\n description,\n displayPreview,\n Error,\n filterOptions: filterOptionsFromProps,\n hasMany,\n isSortable,\n Label,\n label,\n localized,\n maxRows,\n onChange: onChangeFromProps,\n path,\n readOnly,\n relationTo,\n required,\n serverURL,\n showError,\n style,\n value,\n } = props\n\n const [populatedDocs, setPopulatedDocs] = React.useState<\n {\n relationTo: string\n value: JsonObject\n }[]\n >()\n\n const [activeRelationTo] = React.useState<string>(\n Array.isArray(relationTo) ? relationTo[0] : relationTo,\n )\n\n const { openModal } = useModal()\n const {\n drawerSlug,\n setCollectionSlug,\n setInitialFiles,\n setMaxFiles,\n setOnSuccess,\n setSelectableCollections,\n } = useBulkUpload()\n const { permissions } = useAuth()\n const { code } = useLocale()\n const { i18n, t } = useTranslation()\n\n // This will be used by the bulk upload to allow you to select only collections you have create permissions for\n const collectionSlugsWithCreatePermission = useMemo(() => {\n if (Array.isArray(relationTo)) {\n return relationTo.filter(\n (relation) => permissions?.collections && permissions.collections?.[relation]?.create,\n )\n }\n return []\n }, [relationTo, permissions])\n\n const filterOptions: FilterOptionsResult = useMemo(() => {\n const isPoly = Array.isArray(relationTo)\n\n if (!value) {\n return filterOptionsFromProps\n }\n\n // Group existing IDs by relation\n const existingIdsByRelation: Record<string, (number | string)[]> = {}\n\n const values = Array.isArray(value) ? value : [value]\n\n for (const val of values) {\n if (isPoly && typeof val === 'object' && 'relationTo' in val) {\n // Poly upload - group by relationTo\n if (!existingIdsByRelation[val.relationTo]) {\n existingIdsByRelation[val.relationTo] = []\n }\n existingIdsByRelation[val.relationTo].push(val.value)\n } else if (!isPoly) {\n // Non-poly upload - all IDs belong to the single collection\n const collection = relationTo\n if (!existingIdsByRelation[collection]) {\n existingIdsByRelation[collection] = []\n }\n const id = typeof val === 'object' && 'value' in val ? val.value : val\n if (typeof id === 'string' || typeof id === 'number') {\n existingIdsByRelation[collection].push(id)\n }\n }\n }\n\n // Build filter options for each collection\n const newFilterOptions = { ...filterOptionsFromProps }\n const relations = isPoly ? relationTo : [relationTo]\n\n relations.forEach((relation) => {\n const existingIds = existingIdsByRelation[relation] || []\n\n newFilterOptions[relation] = {\n ...((filterOptionsFromProps?.[relation] as any) || {}),\n id: {\n ...((filterOptionsFromProps?.[relation] as any)?.id || {}),\n not_in: ((filterOptionsFromProps?.[relation] as any)?.id?.not_in || []).concat(\n existingIds,\n ),\n },\n }\n })\n\n return newFilterOptions\n }, [value, filterOptionsFromProps, relationTo])\n\n const [ListDrawer, , { closeDrawer: closeListDrawer, openDrawer: openListDrawer }] =\n useListDrawer({\n collectionSlugs: typeof relationTo === 'string' ? [relationTo] : relationTo,\n filterOptions,\n })\n\n const [\n CreateDocDrawer,\n ,\n { closeDrawer: closeCreateDocDrawer, openDrawer: openCreateDocDrawer },\n ] = useDocumentDrawer({\n collectionSlug: activeRelationTo,\n })\n\n /**\n * Track the last loaded value to prevent unnecessary reloads\n */\n const loadedValueRef = React.useRef<\n (number | string)[] | null | number | string | ValueWithRelation | ValueWithRelation[]\n >(null)\n\n const canCreate = useMemo(() => {\n if (!allowCreate) {\n return false\n }\n\n if (typeof activeRelationTo === 'string') {\n if (permissions?.collections && permissions.collections?.[activeRelationTo]?.create) {\n return true\n }\n }\n\n return false\n }, [activeRelationTo, permissions, allowCreate])\n\n const onChange = React.useCallback(\n (newValue) => {\n if (typeof onChangeFromProps === 'function') {\n onChangeFromProps(newValue)\n }\n },\n [onChangeFromProps],\n )\n\n const populateDocs = React.useCallback(\n async (items: ValueWithRelation[]): Promise<ValueAsDataWithRelation[]> => {\n if (!items?.length) {\n return []\n }\n\n // 1. Group IDs by collection\n const grouped: Record<string, (number | string)[]> = {}\n items.forEach(({ relationTo, value }) => {\n if (!grouped[relationTo]) {\n grouped[relationTo] = []\n }\n grouped[relationTo].push(value)\n })\n\n // 2. Fetch per collection\n const fetches = Object.entries(grouped).map(async ([collection, ids]) => {\n const query = {\n depth: 0,\n draft: true,\n limit: ids.length,\n locale: code,\n where: {\n and: [\n {\n id: {\n in: ids,\n },\n },\n ],\n },\n }\n const response = await fetch(`${serverURL}${api}/${collection}`, {\n body: qs.stringify(query),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'X-Payload-HTTP-Method-Override': 'GET',\n },\n method: 'POST',\n })\n let docs: any[] = []\n if (response.ok) {\n const data = await response.json()\n docs = data.docs\n }\n // Map docs by ID for fast lookup\n const docsById = docs.reduce((acc, doc) => {\n acc[doc.id] = doc\n return acc\n }, {})\n return { collection, docsById }\n })\n\n const results = await Promise.all(fetches)\n\n // 3. Build lookup\n const lookup: Record<string, Record<string, any>> = {}\n results.forEach(({ collection, docsById }) => {\n lookup[collection] = docsById\n })\n\n // 4. Reconstruct in input order, add placeholders if missing\n const sortedDocs = items.map(({ relationTo, value }) => {\n const doc = lookup[relationTo]?.[value] || {\n id: value,\n filename: `${t('general:untitled')} - ID: ${value}`,\n isPlaceholder: true,\n }\n return { relationTo, value: doc }\n })\n\n return sortedDocs\n },\n [serverURL, api, code, i18n.language, t],\n )\n\n const onUploadSuccess: BulkUploadContext['onSuccess'] = useCallback(\n (uploadedForms) => {\n const isPoly = Array.isArray(relationTo)\n\n if (hasMany) {\n const newValues = uploadedForms.map((form) =>\n isPoly ? { relationTo: form.collectionSlug, value: form.doc.id } : form.doc.id,\n )\n const mergedValue = [...(Array.isArray(value) ? value : []), ...newValues]\n onChange(mergedValue)\n setPopulatedDocs((currentDocs) => [\n ...(currentDocs || []),\n ...uploadedForms.map((form) => ({\n relationTo: form.collectionSlug,\n value: form.doc,\n })),\n ])\n } else {\n const firstDoc = uploadedForms[0]\n const newValue = isPoly\n ? { relationTo: firstDoc.collectionSlug, value: firstDoc.doc.id }\n : firstDoc.doc.id\n onChange(newValue)\n setPopulatedDocs([\n {\n relationTo: firstDoc.collectionSlug,\n value: firstDoc.doc,\n },\n ])\n }\n },\n [value, onChange, hasMany, relationTo],\n )\n\n const onLocalFileSelection = React.useCallback(\n (fileList?: FileList) => {\n let fileListToUse = fileList\n if (!hasMany && fileList && fileList.length > 1) {\n const dataTransfer = new DataTransfer()\n dataTransfer.items.add(fileList[0])\n fileListToUse = dataTransfer.files\n }\n if (fileListToUse) {\n setInitialFiles(fileListToUse)\n }\n // Use activeRelationTo for poly uploads, or relationTo as string for single collection\n const collectionToUse = Array.isArray(relationTo) ? activeRelationTo : relationTo\n\n setCollectionSlug(collectionToUse)\n if (Array.isArray(collectionSlugsWithCreatePermission)) {\n setSelectableCollections(collectionSlugsWithCreatePermission)\n }\n\n if (typeof maxRows === 'number') {\n setMaxFiles(maxRows)\n }\n\n openModal(drawerSlug)\n },\n [\n hasMany,\n relationTo,\n activeRelationTo,\n setCollectionSlug,\n collectionSlugsWithCreatePermission,\n maxRows,\n openModal,\n drawerSlug,\n setInitialFiles,\n setSelectableCollections,\n setMaxFiles,\n ],\n )\n\n // only hasMany can bulk select\n const onListBulkSelect = React.useCallback<NonNullable<ListDrawerProps['onBulkSelect']>>(\n async (docs) => {\n const isPoly = Array.isArray(relationTo)\n const selectedDocIDs = []\n\n for (const [id, isSelected] of docs) {\n if (isSelected) {\n selectedDocIDs.push(id)\n }\n }\n\n const itemsToLoad = selectedDocIDs.map((id) => ({\n relationTo: activeRelationTo,\n value: id,\n }))\n const loadedDocs = await populateDocs(itemsToLoad)\n if (loadedDocs) {\n setPopulatedDocs((currentDocs) => [...(currentDocs || []), ...loadedDocs])\n }\n\n const newValues = selectedDocIDs.map((id) =>\n isPoly ? { relationTo: activeRelationTo, value: id } : id,\n )\n onChange([...(Array.isArray(value) ? value : []), ...newValues])\n closeListDrawer()\n },\n [activeRelationTo, closeListDrawer, onChange, populateDocs, value, relationTo],\n )\n\n const onDocCreate = React.useCallback(\n (data) => {\n const isPoly = Array.isArray(relationTo)\n if (data.doc) {\n setPopulatedDocs((currentDocs) => [\n ...(currentDocs || []),\n {\n relationTo: activeRelationTo,\n value: data.doc,\n },\n ])\n\n const newValue = isPoly ? { relationTo: activeRelationTo, value: data.doc.id } : data.doc.id\n onChange(newValue)\n }\n closeCreateDocDrawer()\n },\n [closeCreateDocDrawer, activeRelationTo, onChange, relationTo],\n )\n\n const onListSelect = useCallback<NonNullable<ListDrawerProps['onSelect']>>(\n async ({ collectionSlug, doc }) => {\n const isPoly = Array.isArray(relationTo)\n\n const loadedDocs = await populateDocs([{ relationTo: collectionSlug, value: doc.id }])\n const selectedDoc = loadedDocs?.[0] || null\n\n setPopulatedDocs((currentDocs) => {\n if (selectedDoc) {\n if (hasMany) {\n return [...(currentDocs || []), selectedDoc]\n }\n return [selectedDoc]\n }\n return currentDocs\n })\n\n const newValue = isPoly ? { relationTo: collectionSlug, value: doc.id } : doc.id\n\n if (hasMany) {\n const valueToUse = [...(Array.isArray(value) ? value : []), newValue]\n onChange(valueToUse)\n } else {\n const valueToUse = isPoly ? { relationTo: collectionSlug, value: doc.id } : doc.id\n onChange(valueToUse)\n }\n closeListDrawer()\n },\n [closeListDrawer, hasMany, populateDocs, onChange, value, relationTo],\n )\n\n const reloadDoc = React.useCallback<ReloadDoc>(\n async (docID, collectionSlug) => {\n const docs = await populateDocs([{ relationTo: collectionSlug, value: docID }])\n\n if (docs[0]) {\n let updatedDocsToPropogate = []\n setPopulatedDocs((currentDocs) => {\n const existingDocIndex = currentDocs?.findIndex((doc) => {\n const hasExisting = doc.value?.id === docs[0].value.id || doc.value?.isPlaceholder\n return hasExisting && doc.relationTo === collectionSlug\n })\n if (existingDocIndex > -1) {\n const updatedDocs = [...currentDocs]\n updatedDocs[existingDocIndex] = docs[0]\n updatedDocsToPropogate = updatedDocs\n return updatedDocs\n }\n return currentDocs\n })\n\n if (updatedDocsToPropogate.length && hasMany) {\n onChange(updatedDocsToPropogate.map((doc) => doc.value?.id))\n }\n }\n },\n [populateDocs, onChange, hasMany],\n )\n\n // only hasMany can reorder\n const onReorder = React.useCallback(\n (newValue) => {\n const isPoly = Array.isArray(relationTo)\n const newValueToSave = newValue.map(({ relationTo: rel, value }) =>\n isPoly ? { relationTo: rel, value: value.id } : value.id,\n )\n onChange(newValueToSave)\n setPopulatedDocs(newValue)\n },\n [onChange, relationTo],\n )\n\n const onRemove = React.useCallback(\n (newValue?: PopulatedDocs) => {\n const isPoly = Array.isArray(relationTo)\n\n if (!newValue || newValue.length === 0) {\n onChange(hasMany ? [] : null)\n setPopulatedDocs(hasMany ? [] : null)\n return\n }\n\n const newValueToSave = newValue.map(({ relationTo: rel, value }) =>\n isPoly ? { relationTo: rel, value: value.id } : value.id,\n )\n\n onChange(hasMany ? newValueToSave : newValueToSave[0])\n setPopulatedDocs(newValue)\n },\n [onChange, hasMany, relationTo],\n )\n\n useEffect(() => {\n async function loadInitialDocs() {\n if (value) {\n let itemsToLoad: ValueWithRelation[]\n if (\n Array.isArray(relationTo) &&\n ((typeof value === 'object' && 'relationTo' in value) ||\n (Array.isArray(value) &&\n value.length > 0 &&\n typeof value[0] === 'object' &&\n 'relationTo' in value[0]))\n ) {\n // For poly uploads, value should already be in the format { relationTo, value }\n const values = Array.isArray(value) ? value : [value]\n itemsToLoad = values.filter(\n (v): v is ValueWithRelation => typeof v === 'object' && 'relationTo' in v,\n )\n } else {\n // This check is here to satisfy TypeScript that relationTo is a string\n if (!Array.isArray(relationTo)) {\n // For single collection uploads, we need to wrap the IDs\n const ids = Array.isArray(value) ? value : [value]\n itemsToLoad = ids.map((id): ValueWithRelation => {\n const idValue = typeof id === 'object' && 'value' in id ? id.value : id\n return {\n relationTo,\n value: idValue,\n }\n })\n }\n }\n\n const loadedDocs = await populateDocs(itemsToLoad)\n\n if (loadedDocs) {\n setPopulatedDocs(loadedDocs)\n loadedValueRef.current = value\n }\n } else {\n // Clear populated docs when value is cleared\n setPopulatedDocs([])\n loadedValueRef.current = null\n }\n }\n\n // Only load if value has changed from what we last loaded\n const valueChanged = loadedValueRef.current !== value\n if (valueChanged) {\n void loadInitialDocs()\n }\n }, [populateDocs, value, relationTo])\n\n useEffect(() => {\n setOnSuccess(onUploadSuccess)\n }, [value, path, onUploadSuccess, setOnSuccess])\n\n const showDropzone =\n !value ||\n (hasMany && Array.isArray(value) && (typeof maxRows !== 'number' || value.length < maxRows)) ||\n (!hasMany && populatedDocs?.[0] && typeof populatedDocs[0].value === 'undefined')\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n className,\n showError && 'error',\n readOnly && 'read-only',\n ]\n .filter(Boolean)\n .join(' ')}\n id={`field-${path?.replace(/\\./g, '__')}`}\n style={style}\n >\n <RenderCustomComponent\n CustomComponent={Label}\n Fallback={\n <FieldLabel label={label} localized={localized} path={path} required={required} />\n }\n />\n <div className={`${baseClass}__wrap`}>\n <RenderCustomComponent\n CustomComponent={Error}\n Fallback={<FieldError path={path} showError={showError} />}\n />\n </div>\n {BeforeInput}\n <div className={`${baseClass}__dropzoneAndUpload`}>\n {hasMany && Array.isArray(value) && value.length > 0 ? (\n <>\n {populatedDocs && populatedDocs?.length > 0 ? (\n <UploadComponentHasMany\n displayPreview={displayPreview}\n fileDocs={populatedDocs}\n isSortable={isSortable && !readOnly}\n onRemove={onRemove}\n onReorder={onReorder}\n readonly={readOnly}\n reloadDoc={reloadDoc}\n serverURL={serverURL}\n showCollectionSlug={Array.isArray(relationTo)}\n />\n ) : (\n <div className={`${baseClass}__loadingRows`}>\n {value.map((id) => (\n <ShimmerEffect height=\"40px\" key={typeof id === 'object' ? id.value : id} />\n ))}\n </div>\n )}\n </>\n ) : null}\n {!hasMany && value ? (\n <>\n {populatedDocs && populatedDocs?.length > 0 && populatedDocs[0].value ? (\n <UploadComponentHasOne\n displayPreview={displayPreview}\n fileDoc={populatedDocs[0]}\n onRemove={onRemove}\n readonly={readOnly}\n reloadDoc={reloadDoc}\n serverURL={serverURL}\n showCollectionSlug={Array.isArray(relationTo)}\n />\n ) : populatedDocs && value && !populatedDocs?.[0]?.value ? (\n <>\n {t('general:untitled')} - ID: {value}\n </>\n ) : (\n <ShimmerEffect height=\"62px\" />\n )}\n </>\n ) : null}\n {showDropzone ? (\n <Dropzone\n disabled={readOnly || !canCreate}\n multipleFiles={hasMany}\n onChange={onLocalFileSelection}\n >\n <div className={`${baseClass}__dropzoneContent`}>\n <div className={`${baseClass}__dropzoneContent__buttons`}>\n {canCreate && (\n <>\n <Button\n buttonStyle=\"pill\"\n className={`${baseClass}__createNewToggler`}\n disabled={readOnly || !canCreate}\n onClick={() => {\n if (!readOnly) {\n if (hasMany) {\n onLocalFileSelection()\n } else {\n openCreateDocDrawer()\n }\n }\n }}\n size=\"small\"\n >\n {t('general:createNew')}\n </Button>\n <span className={`${baseClass}__dropzoneContent__orText`}>\n {t('general:or')}\n </span>\n </>\n )}\n <Button\n buttonStyle=\"pill\"\n className={`${baseClass}__listToggler`}\n disabled={readOnly}\n onClick={openListDrawer}\n size=\"small\"\n >\n {t('fields:chooseFromExisting')}\n </Button>\n <CreateDocDrawer onSave={onDocCreate} />\n <ListDrawer\n allowCreate={canCreate}\n enableRowSelections={hasMany}\n onBulkSelect={onListBulkSelect}\n onSelect={onListSelect}\n />\n </div>\n\n {canCreate && !readOnly && (\n <p className={`${baseClass}__dragAndDropText`}>\n {t('general:or')} {t('upload:dragAndDrop')}\n </p>\n )}\n </div>\n </Dropzone>\n ) : (\n <>\n {!readOnly &&\n !populatedDocs &&\n (!value ||\n typeof maxRows !== 'number' ||\n (Array.isArray(value) && value.length < maxRows)) ? (\n <ShimmerEffect height=\"40px\" />\n ) : null}\n </>\n )}\n </div>\n {AfterInput}\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={<FieldDescription description={description} path={path} />}\n />\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Input.js","names":["useModal","qs","React","useCallback","useEffect","useMemo","useBulkUpload","Button","useDocumentDrawer","Dropzone","useListDrawer","RenderCustomComponent","ShimmerEffect","FieldDescription","FieldError","FieldLabel","useAuth","useLocale","useTranslation","normalizeRelationshipValue","fieldBaseClass","UploadComponentHasMany","UploadComponentHasOne","baseClass","UploadInput","props","AfterInput","allowCreate","api","BeforeInput","className","Description","description","displayPreview","Error","filterOptions","filterOptionsFromProps","hasMany","isSortable","Label","label","localized","maxRows","onChange","onChangeFromProps","path","readOnly","relationTo","required","serverURL","showError","style","value","populatedDocs","setPopulatedDocs","useState","activeRelationTo","Array","isArray","openModal","drawerSlug","setCollectionSlug","setInitialFiles","setMaxFiles","setOnSuccess","setSelectableCollections","permissions","code","i18n","t","collectionSlugsWithCreatePermission","filter","relation","collections","create","isPoly","existingIdsByRelation","values","val","push","collection","id","newFilterOptions","relations","forEach","existingIds","not_in","concat","ListDrawer","closeDrawer","closeListDrawer","openDrawer","openListDrawer","collectionSlugs","CreateDocDrawer","closeCreateDocDrawer","openCreateDocDrawer","collectionSlug","loadedValueRef","useRef","canCreate","newValue","populateDocs","items","length","grouped","idValue","fetches","Object","entries","map","ids","query","depth","draft","limit","locale","where","and","in","response","fetch","body","stringify","credentials","headers","language","method","docs","ok","data","json","docsById","reduce","acc","doc","results","Promise","all","lookup","sortedDocs","filename","isPlaceholder","normalizeValue","onUploadSuccess","uploadedForms","newValues","form","normalizedExisting","mergedValue","currentDocs","firstDoc","onLocalFileSelection","fileList","fileListToUse","dataTransfer","DataTransfer","add","files","collectionToUse","onListBulkSelect","selectedDocIDs","isSelected","itemsToLoad","loadedDocs","onDocCreate","onListSelect","selectedDoc","valueToUse","reloadDoc","docID","updatedDocsToPropogate","existingDocIndex","findIndex","hasExisting","updatedDocs","onReorder","newValueToSave","rel","onRemove","loadInitialDocs","v","current","valueChanged","showDropzone","_jsxs","Boolean","join","replace","_jsx","CustomComponent","Fallback","_Fragment","fileDocs","readonly","showCollectionSlug","height","fileDoc","disabled","multipleFiles","buttonStyle","onClick","size","onSave","enableRowSelections","onBulkSelect","onSelect"],"sources":["../../../src/fields/Upload/Input.tsx"],"sourcesContent":["'use client'\n\nimport type {\n ClientCollectionConfig,\n FieldLabelClientProps,\n FilterOptionsResult,\n JsonObject,\n StaticDescription,\n StaticLabel,\n UploadFieldClient,\n UploadField as UploadFieldType,\n ValueWithRelation,\n} from 'payload'\nimport type { MarkOptional } from 'ts-essentials'\n\nimport { useModal } from '@faceless-ui/modal'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useMemo } from 'react'\n\nimport type { ListDrawerProps } from '../../elements/ListDrawer/types.js'\nimport type { ReloadDoc, ValueAsDataWithRelation } from './types.js'\n\nimport { type BulkUploadContext, useBulkUpload } from '../../elements/BulkUpload/index.js'\nimport { Button } from '../../elements/Button/index.js'\nimport { useDocumentDrawer } from '../../elements/DocumentDrawer/index.js'\nimport { Dropzone } from '../../elements/Dropzone/index.js'\nimport { useListDrawer } from '../../elements/ListDrawer/index.js'\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { ShimmerEffect } from '../../elements/ShimmerEffect/index.js'\nimport { FieldDescription } from '../../fields/FieldDescription/index.js'\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { FieldLabel } from '../../fields/FieldLabel/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { normalizeRelationshipValue } from '../../utilities/normalizeRelationshipValue.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport { UploadComponentHasMany } from './HasMany/index.js'\nimport { UploadComponentHasOne } from './HasOne/index.js'\nimport './index.scss'\n\nexport const baseClass = 'upload'\n\ntype PopulatedDocs = { relationTo: string; value: JsonObject }[]\n\nexport type UploadInputProps = {\n readonly AfterInput?: React.ReactNode\n readonly allowCreate?: boolean\n /**\n * Controls the visibility of the \"Create new collection\" button\n */\n readonly api?: string\n readonly BeforeInput?: React.ReactNode\n readonly className?: string\n readonly collection?: ClientCollectionConfig\n readonly customUploadActions?: React.ReactNode[]\n readonly Description?: React.ReactNode\n readonly description?: StaticDescription\n readonly displayPreview?: boolean\n readonly Error?: React.ReactNode\n readonly filterOptions?: FilterOptionsResult\n readonly hasMany?: boolean\n readonly hideRemoveFile?: boolean\n readonly isSortable?: boolean\n readonly Label?: React.ReactNode\n readonly label?: StaticLabel\n readonly labelProps?: FieldLabelClientProps<MarkOptional<UploadFieldClient, 'type'>>\n readonly localized?: boolean\n readonly maxRows?: number\n readonly onChange?: (e) => void\n readonly path: string\n readonly readOnly?: boolean\n readonly relationTo: UploadFieldType['relationTo']\n readonly required?: boolean\n readonly serverURL?: string\n readonly showError?: boolean\n readonly style?: React.CSSProperties\n readonly value?: (number | string)[] | number | string | ValueWithRelation | ValueWithRelation[]\n}\n\nexport function UploadInput(props: UploadInputProps) {\n const {\n AfterInput,\n allowCreate,\n api,\n BeforeInput,\n className,\n Description,\n description,\n displayPreview,\n Error,\n filterOptions: filterOptionsFromProps,\n hasMany,\n isSortable,\n Label,\n label,\n localized,\n maxRows,\n onChange: onChangeFromProps,\n path,\n readOnly,\n relationTo,\n required,\n serverURL,\n showError,\n style,\n value,\n } = props\n\n const [populatedDocs, setPopulatedDocs] = React.useState<\n {\n relationTo: string\n value: JsonObject\n }[]\n >()\n\n const [activeRelationTo] = React.useState<string>(\n Array.isArray(relationTo) ? relationTo[0] : relationTo,\n )\n\n const { openModal } = useModal()\n const {\n drawerSlug,\n setCollectionSlug,\n setInitialFiles,\n setMaxFiles,\n setOnSuccess,\n setSelectableCollections,\n } = useBulkUpload()\n const { permissions } = useAuth()\n const { code } = useLocale()\n const { i18n, t } = useTranslation()\n\n // This will be used by the bulk upload to allow you to select only collections you have create permissions for\n const collectionSlugsWithCreatePermission = useMemo(() => {\n if (Array.isArray(relationTo)) {\n return relationTo.filter(\n (relation) => permissions?.collections && permissions.collections?.[relation]?.create,\n )\n }\n return []\n }, [relationTo, permissions])\n\n const filterOptions: FilterOptionsResult = useMemo(() => {\n const isPoly = Array.isArray(relationTo)\n\n if (!value) {\n return filterOptionsFromProps\n }\n\n // Group existing IDs by relation\n const existingIdsByRelation: Record<string, (number | string)[]> = {}\n\n const values = Array.isArray(value) ? value : [value]\n\n for (const val of values) {\n if (isPoly && typeof val === 'object' && 'relationTo' in val) {\n // Poly upload - group by relationTo\n if (!existingIdsByRelation[val.relationTo]) {\n existingIdsByRelation[val.relationTo] = []\n }\n existingIdsByRelation[val.relationTo].push(val.value)\n } else if (!isPoly) {\n // Non-poly upload - all IDs belong to the single collection\n const collection = relationTo\n if (!existingIdsByRelation[collection]) {\n existingIdsByRelation[collection] = []\n }\n const id = typeof val === 'object' && 'value' in val ? val.value : val\n if (typeof id === 'string' || typeof id === 'number') {\n existingIdsByRelation[collection].push(id)\n }\n }\n }\n\n // Build filter options for each collection\n const newFilterOptions = { ...filterOptionsFromProps }\n const relations = isPoly ? relationTo : [relationTo]\n\n relations.forEach((relation) => {\n const existingIds = existingIdsByRelation[relation] || []\n\n newFilterOptions[relation] = {\n ...((filterOptionsFromProps?.[relation] as any) || {}),\n id: {\n ...((filterOptionsFromProps?.[relation] as any)?.id || {}),\n not_in: ((filterOptionsFromProps?.[relation] as any)?.id?.not_in || []).concat(\n existingIds,\n ),\n },\n }\n })\n\n return newFilterOptions\n }, [value, filterOptionsFromProps, relationTo])\n\n const [ListDrawer, , { closeDrawer: closeListDrawer, openDrawer: openListDrawer }] =\n useListDrawer({\n collectionSlugs: typeof relationTo === 'string' ? [relationTo] : relationTo,\n filterOptions,\n })\n\n const [\n CreateDocDrawer,\n ,\n { closeDrawer: closeCreateDocDrawer, openDrawer: openCreateDocDrawer },\n ] = useDocumentDrawer({\n collectionSlug: activeRelationTo,\n })\n\n /**\n * Track the last loaded value to prevent unnecessary reloads\n */\n const loadedValueRef = React.useRef<\n (number | string)[] | null | number | string | ValueWithRelation | ValueWithRelation[]\n >(null)\n\n const canCreate = useMemo(() => {\n if (!allowCreate) {\n return false\n }\n\n if (typeof activeRelationTo === 'string') {\n if (permissions?.collections && permissions.collections?.[activeRelationTo]?.create) {\n return true\n }\n }\n\n return false\n }, [activeRelationTo, permissions, allowCreate])\n\n const onChange = React.useCallback(\n (newValue) => {\n if (typeof onChangeFromProps === 'function') {\n onChangeFromProps(newValue)\n }\n },\n [onChangeFromProps],\n )\n\n const populateDocs = React.useCallback(\n async (items: ValueWithRelation[]): Promise<ValueAsDataWithRelation[]> => {\n if (!items?.length) {\n return []\n }\n\n // 1. Group IDs by collection\n const grouped: Record<string, (number | string)[]> = {}\n items.forEach(({ relationTo, value }) => {\n if (!grouped[relationTo]) {\n grouped[relationTo] = []\n }\n // Ensure we extract the actual ID value, not an object\n let idValue: number | string = value\n\n if (value && typeof value === 'object' && 'value' in (value as any)) {\n idValue = (value as any).value\n }\n\n grouped[relationTo].push(idValue)\n })\n\n // 2. Fetch per collection\n const fetches = Object.entries(grouped).map(async ([collection, ids]) => {\n const query = {\n depth: 0,\n draft: true,\n limit: ids.length,\n locale: code,\n where: {\n and: [\n {\n id: {\n in: ids,\n },\n },\n ],\n },\n }\n const response = await fetch(`${serverURL}${api}/${collection}`, {\n body: qs.stringify(query),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'X-Payload-HTTP-Method-Override': 'GET',\n },\n method: 'POST',\n })\n let docs: any[] = []\n if (response.ok) {\n const data = await response.json()\n docs = data.docs\n }\n // Map docs by ID for fast lookup\n const docsById = docs.reduce((acc, doc) => {\n acc[doc.id] = doc\n return acc\n }, {})\n return { collection, docsById }\n })\n\n const results = await Promise.all(fetches)\n\n // 3. Build lookup\n const lookup: Record<string, Record<string, any>> = {}\n results.forEach(({ collection, docsById }) => {\n lookup[collection] = docsById\n })\n\n // 4. Reconstruct in input order, add placeholders if missing\n const sortedDocs = items.map(({ relationTo, value }) => {\n const doc = lookup[relationTo]?.[value] || {\n id: value,\n filename: `${t('general:untitled')} - ID: ${value}`,\n isPlaceholder: true,\n }\n return { relationTo, value: doc }\n })\n\n return sortedDocs\n },\n [serverURL, api, code, i18n.language, t],\n )\n\n const normalizeValue = useCallback(\n (value: any): any => normalizeRelationshipValue(value, relationTo),\n [relationTo],\n )\n\n const onUploadSuccess: BulkUploadContext['onSuccess'] = useCallback(\n (uploadedForms) => {\n const isPoly = Array.isArray(relationTo)\n\n if (hasMany) {\n const newValues = uploadedForms.map((form) =>\n isPoly ? { relationTo: form.collectionSlug, value: form.doc.id } : form.doc.id,\n )\n // Normalize existing values before merging\n const normalizedExisting = Array.isArray(value) ? value.map(normalizeValue) : []\n const mergedValue = [...normalizedExisting, ...newValues]\n onChange(mergedValue)\n setPopulatedDocs((currentDocs) => [\n ...(currentDocs || []),\n ...uploadedForms.map((form) => ({\n relationTo: form.collectionSlug,\n value: form.doc,\n })),\n ])\n } else {\n const firstDoc = uploadedForms[0]\n const newValue = isPoly\n ? { relationTo: firstDoc.collectionSlug, value: firstDoc.doc.id }\n : firstDoc.doc.id\n onChange(newValue)\n setPopulatedDocs([\n {\n relationTo: firstDoc.collectionSlug,\n value: firstDoc.doc,\n },\n ])\n }\n },\n [value, onChange, hasMany, relationTo, normalizeValue],\n )\n\n const onLocalFileSelection = React.useCallback(\n (fileList?: FileList) => {\n let fileListToUse = fileList\n if (!hasMany && fileList && fileList.length > 1) {\n const dataTransfer = new DataTransfer()\n dataTransfer.items.add(fileList[0])\n fileListToUse = dataTransfer.files\n }\n if (fileListToUse) {\n setInitialFiles(fileListToUse)\n }\n // Use activeRelationTo for poly uploads, or relationTo as string for single collection\n const collectionToUse = Array.isArray(relationTo) ? activeRelationTo : relationTo\n\n setCollectionSlug(collectionToUse)\n if (Array.isArray(collectionSlugsWithCreatePermission)) {\n setSelectableCollections(collectionSlugsWithCreatePermission)\n }\n\n if (typeof maxRows === 'number') {\n setMaxFiles(maxRows)\n }\n\n openModal(drawerSlug)\n },\n [\n hasMany,\n relationTo,\n activeRelationTo,\n setCollectionSlug,\n collectionSlugsWithCreatePermission,\n maxRows,\n openModal,\n drawerSlug,\n setInitialFiles,\n setSelectableCollections,\n setMaxFiles,\n ],\n )\n\n // only hasMany can bulk select\n const onListBulkSelect = React.useCallback<NonNullable<ListDrawerProps['onBulkSelect']>>(\n async (docs) => {\n const isPoly = Array.isArray(relationTo)\n const selectedDocIDs = []\n\n for (const [id, isSelected] of docs) {\n if (isSelected) {\n selectedDocIDs.push(id)\n }\n }\n\n const itemsToLoad = selectedDocIDs.map((id) => ({\n relationTo: activeRelationTo,\n value: id,\n }))\n\n const loadedDocs = await populateDocs(itemsToLoad)\n if (loadedDocs) {\n setPopulatedDocs((currentDocs) => [...(currentDocs || []), ...loadedDocs])\n }\n\n const newValues = selectedDocIDs.map((id) =>\n isPoly ? { relationTo: activeRelationTo, value: id } : id,\n )\n // Normalize existing values before merging\n const normalizedExisting = Array.isArray(value) ? value.map(normalizeValue) : []\n onChange([...normalizedExisting, ...newValues])\n closeListDrawer()\n },\n [activeRelationTo, closeListDrawer, onChange, populateDocs, value, relationTo, normalizeValue],\n )\n\n const onDocCreate = React.useCallback(\n (data) => {\n const isPoly = Array.isArray(relationTo)\n if (data.doc) {\n setPopulatedDocs((currentDocs) => [\n ...(currentDocs || []),\n {\n relationTo: activeRelationTo,\n value: data.doc,\n },\n ])\n\n const newValue = isPoly ? { relationTo: activeRelationTo, value: data.doc.id } : data.doc.id\n onChange(newValue)\n }\n closeCreateDocDrawer()\n },\n [closeCreateDocDrawer, activeRelationTo, onChange, relationTo],\n )\n\n const onListSelect = useCallback<NonNullable<ListDrawerProps['onSelect']>>(\n async ({ collectionSlug, doc }) => {\n const isPoly = Array.isArray(relationTo)\n\n const loadedDocs = await populateDocs([{ relationTo: collectionSlug, value: doc.id }])\n const selectedDoc = loadedDocs?.[0] || null\n\n setPopulatedDocs((currentDocs) => {\n if (selectedDoc) {\n if (hasMany) {\n return [...(currentDocs || []), selectedDoc]\n }\n return [selectedDoc]\n }\n return currentDocs\n })\n\n if (hasMany) {\n const newValue = isPoly ? { relationTo: collectionSlug, value: doc.id } : doc.id\n // Normalize existing values before merging\n const normalizedExisting = Array.isArray(value) ? value.map(normalizeValue) : []\n const valueToUse = [...normalizedExisting, newValue]\n onChange(valueToUse)\n } else {\n const valueToUse = isPoly ? { relationTo: collectionSlug, value: doc.id } : doc.id\n onChange(valueToUse)\n }\n closeListDrawer()\n },\n [closeListDrawer, hasMany, populateDocs, onChange, value, relationTo, normalizeValue],\n )\n\n const reloadDoc = React.useCallback<ReloadDoc>(\n async (docID, collectionSlug) => {\n const docs = await populateDocs([{ relationTo: collectionSlug, value: docID }])\n\n if (docs[0]) {\n let updatedDocsToPropogate = []\n setPopulatedDocs((currentDocs) => {\n const existingDocIndex = currentDocs?.findIndex((doc) => {\n const hasExisting = doc.value?.id === docs[0].value.id || doc.value?.isPlaceholder\n return hasExisting && doc.relationTo === collectionSlug\n })\n if (existingDocIndex > -1) {\n const updatedDocs = [...currentDocs]\n updatedDocs[existingDocIndex] = docs[0]\n updatedDocsToPropogate = updatedDocs\n return updatedDocs\n }\n return currentDocs\n })\n\n if (updatedDocsToPropogate.length && hasMany) {\n onChange(updatedDocsToPropogate.map((doc) => doc.value?.id))\n }\n }\n },\n [populateDocs, onChange, hasMany],\n )\n\n // only hasMany can reorder\n const onReorder = React.useCallback(\n (newValue) => {\n const isPoly = Array.isArray(relationTo)\n const newValueToSave = newValue.map(({ relationTo: rel, value }) =>\n isPoly ? { relationTo: rel, value: value.id } : value.id,\n )\n onChange(newValueToSave)\n setPopulatedDocs(newValue)\n },\n [onChange, relationTo],\n )\n\n const onRemove = React.useCallback(\n (newValue?: PopulatedDocs) => {\n const isPoly = Array.isArray(relationTo)\n\n if (!newValue || newValue.length === 0) {\n onChange(hasMany ? [] : null)\n setPopulatedDocs(hasMany ? [] : null)\n return\n }\n\n const newValueToSave = newValue.map(({ relationTo: rel, value }) =>\n isPoly ? { relationTo: rel, value: value.id } : value.id,\n )\n\n onChange(hasMany ? newValueToSave : newValueToSave[0])\n setPopulatedDocs(newValue)\n },\n [onChange, hasMany, relationTo],\n )\n\n useEffect(() => {\n async function loadInitialDocs() {\n if (value) {\n let itemsToLoad: ValueWithRelation[] = []\n if (\n Array.isArray(relationTo) &&\n ((typeof value === 'object' && 'relationTo' in value) ||\n (Array.isArray(value) &&\n value.length > 0 &&\n typeof value[0] === 'object' &&\n 'relationTo' in value[0]))\n ) {\n // For poly uploads, value should already be in the format { relationTo, value }\n const values = Array.isArray(value) ? value : [value]\n itemsToLoad = values\n .filter((v): v is ValueWithRelation => typeof v === 'object' && 'relationTo' in v)\n .map((v) => {\n // Ensure the value property is a simple ID, not nested\n let idValue: any = v.value\n while (\n idValue &&\n typeof idValue === 'object' &&\n idValue !== null &&\n 'value' in idValue\n ) {\n idValue = idValue.value\n }\n return {\n relationTo: v.relationTo,\n value: idValue as number | string,\n }\n })\n } else {\n // This check is here to satisfy TypeScript that relationTo is a string\n if (!Array.isArray(relationTo)) {\n // For single collection uploads, we need to wrap the IDs\n const ids = Array.isArray(value) ? value : [value]\n itemsToLoad = ids.map((id): ValueWithRelation => {\n // Extract the actual ID, handling nested objects\n let idValue: any = id\n while (\n idValue &&\n typeof idValue === 'object' &&\n idValue !== null &&\n 'value' in idValue\n ) {\n idValue = idValue.value\n }\n return {\n relationTo,\n value: idValue as number | string,\n }\n })\n }\n }\n\n if (itemsToLoad.length > 0) {\n const loadedDocs = await populateDocs(itemsToLoad)\n\n if (loadedDocs) {\n setPopulatedDocs(loadedDocs)\n loadedValueRef.current = value\n }\n }\n } else {\n // Clear populated docs when value is cleared\n setPopulatedDocs([])\n loadedValueRef.current = null\n }\n }\n\n // Only load if value has changed from what we last loaded\n const valueChanged = loadedValueRef.current !== value\n if (valueChanged) {\n void loadInitialDocs()\n }\n }, [populateDocs, value, relationTo])\n\n useEffect(() => {\n setOnSuccess(onUploadSuccess)\n }, [value, path, onUploadSuccess, setOnSuccess])\n\n const showDropzone =\n !value ||\n (hasMany && Array.isArray(value) && (typeof maxRows !== 'number' || value.length < maxRows)) ||\n (!hasMany && populatedDocs?.[0] && typeof populatedDocs[0].value === 'undefined')\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n className,\n showError && 'error',\n readOnly && 'read-only',\n ]\n .filter(Boolean)\n .join(' ')}\n id={`field-${path?.replace(/\\./g, '__')}`}\n style={style}\n >\n <RenderCustomComponent\n CustomComponent={Label}\n Fallback={\n <FieldLabel label={label} localized={localized} path={path} required={required} />\n }\n />\n <div className={`${baseClass}__wrap`}>\n <RenderCustomComponent\n CustomComponent={Error}\n Fallback={<FieldError path={path} showError={showError} />}\n />\n </div>\n {BeforeInput}\n <div className={`${baseClass}__dropzoneAndUpload`}>\n {hasMany && Array.isArray(value) && value.length > 0 ? (\n <>\n {populatedDocs && populatedDocs?.length > 0 ? (\n <UploadComponentHasMany\n displayPreview={displayPreview}\n fileDocs={populatedDocs}\n isSortable={isSortable && !readOnly}\n onRemove={onRemove}\n onReorder={onReorder}\n readonly={readOnly}\n reloadDoc={reloadDoc}\n serverURL={serverURL}\n showCollectionSlug={Array.isArray(relationTo)}\n />\n ) : (\n <div className={`${baseClass}__loadingRows`}>\n {value.map((id) => (\n <ShimmerEffect height=\"40px\" key={typeof id === 'object' ? id.value : id} />\n ))}\n </div>\n )}\n </>\n ) : null}\n {!hasMany && value ? (\n <>\n {populatedDocs && populatedDocs?.length > 0 && populatedDocs[0].value ? (\n <UploadComponentHasOne\n displayPreview={displayPreview}\n fileDoc={populatedDocs[0]}\n onRemove={onRemove}\n readonly={readOnly}\n reloadDoc={reloadDoc}\n serverURL={serverURL}\n showCollectionSlug={Array.isArray(relationTo)}\n />\n ) : populatedDocs && value && !populatedDocs?.[0]?.value ? (\n <>\n {t('general:untitled')} - ID: {value}\n </>\n ) : (\n <ShimmerEffect height=\"62px\" />\n )}\n </>\n ) : null}\n {showDropzone ? (\n <Dropzone\n disabled={readOnly || !canCreate}\n multipleFiles={hasMany}\n onChange={onLocalFileSelection}\n >\n <div className={`${baseClass}__dropzoneContent`}>\n <div className={`${baseClass}__dropzoneContent__buttons`}>\n {canCreate && (\n <>\n <Button\n buttonStyle=\"pill\"\n className={`${baseClass}__createNewToggler`}\n disabled={readOnly || !canCreate}\n onClick={() => {\n if (!readOnly) {\n if (hasMany) {\n onLocalFileSelection()\n } else {\n openCreateDocDrawer()\n }\n }\n }}\n size=\"small\"\n >\n {t('general:createNew')}\n </Button>\n <span className={`${baseClass}__dropzoneContent__orText`}>\n {t('general:or')}\n </span>\n </>\n )}\n <Button\n buttonStyle=\"pill\"\n className={`${baseClass}__listToggler`}\n disabled={readOnly}\n onClick={openListDrawer}\n size=\"small\"\n >\n {t('fields:chooseFromExisting')}\n </Button>\n <CreateDocDrawer onSave={onDocCreate} />\n <ListDrawer\n allowCreate={canCreate}\n enableRowSelections={hasMany}\n onBulkSelect={onListBulkSelect}\n onSelect={onListSelect}\n />\n </div>\n\n {canCreate && !readOnly && (\n <p className={`${baseClass}__dragAndDropText`}>\n {t('general:or')} {t('upload:dragAndDrop')}\n </p>\n )}\n </div>\n </Dropzone>\n ) : (\n <>\n {!readOnly &&\n !populatedDocs &&\n (!value ||\n typeof maxRows !== 'number' ||\n (Array.isArray(value) && value.length < maxRows)) ? (\n <ShimmerEffect height=\"40px\" />\n ) : null}\n </>\n )}\n </div>\n {AfterInput}\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={<FieldDescription description={description} path={path} />}\n />\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/index.tsx"],"names":[],"mappings":"AAYA,OAAO,KAA+D,MAAM,OAAO,CAAA;AAGnF,OAAO,KAAK,EAGV,SAAS,EAIV,MAAM,YAAY,CAAA;AAoCnB,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CA0xBpC,CAAA;AAED,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,OAAO,EACP,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,GACb,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,SAAS,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/Form/index.tsx"],"names":[],"mappings":"AAYA,OAAO,KAA+D,MAAM,OAAO,CAAA;AAGnF,OAAO,KAAK,EAGV,SAAS,EAIV,MAAM,YAAY,CAAA;AAoCnB,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CA+xBpC,CAAA;AAED,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,OAAO,EACP,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,GACb,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,SAAS,EAAE,CAAA"}
@@ -331,8 +331,12 @@ export const Form = props => {
331
331
  setSubmitted(true);
332
332
  // When there was an error submitting a draft,
333
333
  // set the form state to unsubmitted, to not trigger visible form validation on changes after the failed submit.
334
- if (!validateDrafts && overridesFromArgs['_status'] === 'draft') {
335
- setSubmitted(false);
334
+ // Also keep the form as modified so the save button remains enabled for retry.
335
+ if (overridesFromArgs['_status'] === 'draft') {
336
+ setModified(true);
337
+ if (!validateDrafts) {
338
+ setSubmitted(false);
339
+ }
336
340
  }
337
341
  contextRef.current = {
338
342
  ...contextRef.current
@@ -387,7 +391,7 @@ export const Form = props => {
387
391
  setDisabled(false);
388
392
  errorToast(err.message);
389
393
  }
390
- }, [beforeSubmit, startRouteTransition, action, disableSuccessStatus, disableValidationOnSubmit, disabled, dispatchFields, handleResponse, method, onSubmit, onSuccess, redirect, router, t, i18n, waitForAutocomplete]);
394
+ }, [beforeSubmit, startRouteTransition, action, disableSuccessStatus, disableValidationOnSubmit, disabled, dispatchFields, handleResponse, method, onSubmit, onSuccess, redirect, router, t, i18n, validateDrafts, waitForAutocomplete]);
391
395
  const getFields = useCallback(() => contextRef.current.fields, []);
392
396
  const getField = useCallback(path_0 => contextRef.current.fields[path_0], []);
393
397
  const getData = useCallback(() => reduceFieldsToValues(contextRef.current.fields, true), []);