@payloadcms/plugin-import-export 4.0.0-internal.5d5a2b2 → 4.0.0-internal.5e065b3

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 (192) hide show
  1. package/dist/components/CollectionField/index.d.ts +3 -2
  2. package/dist/components/CollectionField/index.d.ts.map +1 -1
  3. package/dist/components/CollectionField/index.js.map +1 -1
  4. package/dist/components/ExportListMenuItem/index.d.ts.map +1 -1
  5. package/dist/components/ExportListMenuItem/index.js +14 -12
  6. package/dist/components/ExportListMenuItem/index.js.map +1 -1
  7. package/dist/components/ExportPreview/index.css +52 -0
  8. package/dist/components/ExportPreview/index.d.ts +1 -1
  9. package/dist/components/ExportPreview/index.d.ts.map +1 -1
  10. package/dist/components/ExportPreview/index.js +12 -2
  11. package/dist/components/ExportPreview/index.js.map +1 -1
  12. package/dist/components/FieldsToExport/index.d.ts +3 -2
  13. package/dist/components/FieldsToExport/index.d.ts.map +1 -1
  14. package/dist/components/FieldsToExport/index.js +18 -15
  15. package/dist/components/FieldsToExport/index.js.map +1 -1
  16. package/dist/components/FieldsToExport/reduceFields.d.ts +6 -0
  17. package/dist/components/FieldsToExport/reduceFields.d.ts.map +1 -1
  18. package/dist/components/FieldsToExport/reduceFields.js +4 -0
  19. package/dist/components/FieldsToExport/reduceFields.js.map +1 -1
  20. package/dist/components/FormatField/index.d.ts +3 -2
  21. package/dist/components/FormatField/index.d.ts.map +1 -1
  22. package/dist/components/FormatField/index.js +6 -3
  23. package/dist/components/FormatField/index.js.map +1 -1
  24. package/dist/components/ImportListMenuItem/index.d.ts.map +1 -1
  25. package/dist/components/ImportListMenuItem/index.js +14 -12
  26. package/dist/components/ImportListMenuItem/index.js.map +1 -1
  27. package/dist/components/ImportPreview/index.css +45 -0
  28. package/dist/components/ImportPreview/index.d.ts +1 -1
  29. package/dist/components/ImportPreview/index.d.ts.map +1 -1
  30. package/dist/components/ImportPreview/index.js +44 -11
  31. package/dist/components/ImportPreview/index.js.map +1 -1
  32. package/dist/components/LimitField/index.d.ts +3 -2
  33. package/dist/components/LimitField/index.d.ts.map +1 -1
  34. package/dist/components/LimitField/index.js.map +1 -1
  35. package/dist/components/LocaleField/index.d.ts +3 -2
  36. package/dist/components/LocaleField/index.d.ts.map +1 -1
  37. package/dist/components/LocaleField/index.js.map +1 -1
  38. package/dist/components/Page/index.d.ts +4 -3
  39. package/dist/components/Page/index.d.ts.map +1 -1
  40. package/dist/components/Page/index.js +1 -1
  41. package/dist/components/Page/index.js.map +1 -1
  42. package/dist/components/RelationshipCell/getRelationshipGroupKey.d.ts +7 -0
  43. package/dist/components/RelationshipCell/getRelationshipGroupKey.d.ts.map +1 -0
  44. package/dist/components/RelationshipCell/getRelationshipGroupKey.js +3 -0
  45. package/dist/components/RelationshipCell/getRelationshipGroupKey.js.map +1 -0
  46. package/dist/components/RelationshipCell/getRelationshipGroups.d.ts +43 -0
  47. package/dist/components/RelationshipCell/getRelationshipGroups.d.ts.map +1 -0
  48. package/dist/components/RelationshipCell/getRelationshipGroups.js +109 -0
  49. package/dist/components/RelationshipCell/getRelationshipGroups.js.map +1 -0
  50. package/dist/components/RelationshipCell/index.css +30 -0
  51. package/dist/components/RelationshipCell/index.d.ts +15 -0
  52. package/dist/components/RelationshipCell/index.d.ts.map +1 -0
  53. package/dist/components/RelationshipCell/index.js +57 -0
  54. package/dist/components/RelationshipCell/index.js.map +1 -0
  55. package/dist/components/SortBy/index.css +9 -0
  56. package/dist/components/SortBy/index.d.ts +4 -3
  57. package/dist/components/SortBy/index.d.ts.map +1 -1
  58. package/dist/components/SortBy/index.js +1 -2
  59. package/dist/components/SortBy/index.js.map +1 -1
  60. package/dist/components/SortOrder/index.css +9 -0
  61. package/dist/components/SortOrder/index.d.ts +4 -3
  62. package/dist/components/SortOrder/index.d.ts.map +1 -1
  63. package/dist/components/SortOrder/index.js +1 -2
  64. package/dist/components/SortOrder/index.js.map +1 -1
  65. package/dist/export/batchProcessor.d.ts +4 -3
  66. package/dist/export/batchProcessor.d.ts.map +1 -1
  67. package/dist/export/batchProcessor.js +6 -2
  68. package/dist/export/batchProcessor.js.map +1 -1
  69. package/dist/export/createExport.d.ts +4 -2
  70. package/dist/export/createExport.d.ts.map +1 -1
  71. package/dist/export/createExport.js +7 -2
  72. package/dist/export/createExport.js.map +1 -1
  73. package/dist/export/getCreateExportCollectionTask.d.ts.map +1 -1
  74. package/dist/export/getCreateExportCollectionTask.js +11 -0
  75. package/dist/export/getCreateExportCollectionTask.js.map +1 -1
  76. package/dist/export/getExportCollection.d.ts.map +1 -1
  77. package/dist/export/getExportCollection.js +9 -4
  78. package/dist/export/getExportCollection.js.map +1 -1
  79. package/dist/export/getFields.d.ts.map +1 -1
  80. package/dist/export/handleDownload.d.ts.map +1 -1
  81. package/dist/export/handleDownload.js +7 -3
  82. package/dist/export/handleDownload.js.map +1 -1
  83. package/dist/export/handlePreview.d.ts.map +1 -1
  84. package/dist/export/handlePreview.js +24 -5
  85. package/dist/export/handlePreview.js.map +1 -1
  86. package/dist/exports/types.d.ts +1 -1
  87. package/dist/exports/types.d.ts.map +1 -1
  88. package/dist/exports/types.js.map +1 -1
  89. package/dist/import/batchProcessor.d.ts +4 -3
  90. package/dist/import/batchProcessor.d.ts.map +1 -1
  91. package/dist/import/batchProcessor.js +15 -8
  92. package/dist/import/batchProcessor.js.map +1 -1
  93. package/dist/import/createImport.d.ts +3 -2
  94. package/dist/import/createImport.d.ts.map +1 -1
  95. package/dist/import/createImport.js +8 -1
  96. package/dist/import/createImport.js.map +1 -1
  97. package/dist/import/getCreateImportCollectionTask.d.ts.map +1 -1
  98. package/dist/import/getCreateImportCollectionTask.js +5 -2
  99. package/dist/import/getCreateImportCollectionTask.js.map +1 -1
  100. package/dist/import/getFields.d.ts.map +1 -1
  101. package/dist/import/getImportCollection.d.ts.map +1 -1
  102. package/dist/import/getImportCollection.js +6 -4
  103. package/dist/import/getImportCollection.js.map +1 -1
  104. package/dist/import/handlePreview.d.ts.map +1 -1
  105. package/dist/import/handlePreview.js +5 -1
  106. package/dist/import/handlePreview.js.map +1 -1
  107. package/dist/index.d.ts +1 -2
  108. package/dist/index.d.ts.map +1 -1
  109. package/dist/index.js +6 -3
  110. package/dist/index.js.map +1 -1
  111. package/dist/translations/languages/en.d.ts.map +1 -1
  112. package/dist/types.d.ts +17 -1
  113. package/dist/types.d.ts.map +1 -1
  114. package/dist/types.js.map +1 -1
  115. package/dist/utilities/applyFieldHooks.d.ts.map +1 -1
  116. package/dist/utilities/applyFieldHooks.js +1 -1
  117. package/dist/utilities/applyFieldHooks.js.map +1 -1
  118. package/dist/utilities/buildDisabledFieldRegex.d.ts.map +1 -1
  119. package/dist/utilities/collectDisabledFieldPaths.d.ts.map +1 -1
  120. package/dist/utilities/fieldToRegex.d.ts.map +1 -1
  121. package/dist/utilities/flattenObject.d.ts.map +1 -1
  122. package/dist/utilities/flattenedFields.d.ts.map +1 -1
  123. package/dist/utilities/flattenedFields.js +3 -0
  124. package/dist/utilities/flattenedFields.js.map +1 -1
  125. package/dist/utilities/getExportFieldFunctions.d.ts.map +1 -1
  126. package/dist/utilities/getExportFieldFunctions.js +64 -27
  127. package/dist/utilities/getExportFieldFunctions.js.map +1 -1
  128. package/dist/utilities/getFileFromDoc.d.ts.map +1 -1
  129. package/dist/utilities/getFileFromDoc.js +3 -3
  130. package/dist/utilities/getFileFromDoc.js.map +1 -1
  131. package/dist/utilities/getFlattenedFieldKeys.d.ts.map +1 -1
  132. package/dist/utilities/getImportFieldFunctions.d.ts.map +1 -1
  133. package/dist/utilities/getPluginCollections.d.ts.map +1 -1
  134. package/dist/utilities/getSchemaColumns.d.ts.map +1 -1
  135. package/dist/utilities/getSelect.d.ts.map +1 -1
  136. package/dist/utilities/getSelect.js +11 -3
  137. package/dist/utilities/getSelect.js.map +1 -1
  138. package/dist/utilities/getSubmittedFormValues.d.ts +12 -0
  139. package/dist/utilities/getSubmittedFormValues.d.ts.map +1 -0
  140. package/dist/utilities/getSubmittedFormValues.js +24 -0
  141. package/dist/utilities/getSubmittedFormValues.js.map +1 -0
  142. package/dist/utilities/isPlainObject.d.ts.map +1 -1
  143. package/dist/utilities/parseCSV.d.ts.map +1 -1
  144. package/dist/utilities/parseJSON.d.ts.map +1 -1
  145. package/dist/utilities/polymorphicRel.d.ts.map +1 -1
  146. package/dist/utilities/processRichTextField.d.ts.map +1 -1
  147. package/dist/utilities/removeDisabledFields.d.ts.map +1 -1
  148. package/dist/utilities/setNestedValue.d.ts +2 -1
  149. package/dist/utilities/setNestedValue.d.ts.map +1 -1
  150. package/dist/utilities/setNestedValue.js +65 -34
  151. package/dist/utilities/setNestedValue.js.map +1 -1
  152. package/dist/utilities/sortHelpers.d.ts +1 -1
  153. package/dist/utilities/sortHelpers.d.ts.map +1 -1
  154. package/dist/utilities/unflattenObject.d.ts.map +1 -1
  155. package/dist/utilities/unflattenPostProcess.d.ts.map +1 -1
  156. package/dist/utilities/validateLimitValue.d.ts.map +1 -1
  157. package/license.md +1 -1
  158. package/package.json +9 -9
  159. package/dist/@types/assets.d.js +0 -2
  160. package/dist/@types/assets.d.js.map +0 -1
  161. package/dist/components/ExportPreview/index.scss +0 -48
  162. package/dist/components/FieldsToExport/index.scss +0 -0
  163. package/dist/components/FieldsToExport/reduceFields.spec.js +0 -239
  164. package/dist/components/FieldsToExport/reduceFields.spec.js.map +0 -1
  165. package/dist/components/ImportPreview/index.scss +0 -41
  166. package/dist/components/SortBy/index.scss +0 -3
  167. package/dist/components/SortOrder/index.scss +0 -3
  168. package/dist/utilities/applyFieldHooks.spec.js +0 -205
  169. package/dist/utilities/applyFieldHooks.spec.js.map +0 -1
  170. package/dist/utilities/buildDisabledFieldRegex.spec.js +0 -64
  171. package/dist/utilities/buildDisabledFieldRegex.spec.js.map +0 -1
  172. package/dist/utilities/fieldToRegex.spec.js +0 -151
  173. package/dist/utilities/fieldToRegex.spec.js.map +0 -1
  174. package/dist/utilities/filterToSelectedFields.spec.js +0 -204
  175. package/dist/utilities/filterToSelectedFields.spec.js.map +0 -1
  176. package/dist/utilities/flattenObject.spec.js +0 -158
  177. package/dist/utilities/flattenObject.spec.js.map +0 -1
  178. package/dist/utilities/getExportFieldFunctions.spec.js +0 -50
  179. package/dist/utilities/getExportFieldFunctions.spec.js.map +0 -1
  180. package/dist/utilities/getImportFieldFunctions.spec.js +0 -167
  181. package/dist/utilities/getImportFieldFunctions.spec.js.map +0 -1
  182. package/dist/utilities/getSchemaColumns.spec.js +0 -157
  183. package/dist/utilities/getSchemaColumns.spec.js.map +0 -1
  184. package/dist/utilities/parseCSV.spec.js +0 -195
  185. package/dist/utilities/parseCSV.spec.js.map +0 -1
  186. package/dist/utilities/processRichTextField.spec.js +0 -308
  187. package/dist/utilities/processRichTextField.spec.js.map +0 -1
  188. package/dist/utilities/siblingDoc.spec.js +0 -278
  189. package/dist/utilities/siblingDoc.spec.js.map +0 -1
  190. package/dist/utilities/unflattenObject.spec.js +0 -819
  191. package/dist/utilities/unflattenObject.spec.js.map +0 -1
  192. /package/dist/components/Page/{index.scss → index.css} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ImportListMenuItem/index.tsx"],"sourcesContent":["'use client'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n PopupList,\n Translation,\n useConfig,\n useDocumentDrawer,\n useTranslation,\n} from '@payloadcms/ui'\nimport React, { useEffect } from 'react'\n\nimport type {\n PluginImportExportTranslationKeys,\n PluginImportExportTranslations,\n} from '../../translations/index.js'\n\nimport { useImportExport } from '../ImportExportProvider/index.js'\n\nconst baseClass = 'import-list-menu-item'\n\nexport const ImportListMenuItem: React.FC<{\n collectionSlug: string\n importCollectionSlug: string\n}> = ({ collectionSlug, importCollectionSlug }) => {\n const { getEntityConfig } = useConfig()\n\n const { i18n, t } = useTranslation<\n PluginImportExportTranslations,\n PluginImportExportTranslationKeys\n >()\n\n const currentCollectionConfig = getEntityConfig({ collectionSlug })\n\n const [DocumentDrawer, DocumentDrawerToggler] = useDocumentDrawer({\n collectionSlug: importCollectionSlug,\n })\n const { setCollection } = useImportExport()\n\n // Set collection and selected items on mount or when selection changes\n useEffect(() => {\n setCollection(currentCollectionConfig.slug ?? '')\n }, [currentCollectionConfig, setCollection])\n\n return (\n <PopupList.Button className={baseClass}>\n <DocumentDrawerToggler>\n <Translation\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n i18nKey=\"plugin-import-export:importDocumentLabel\"\n t={t}\n variables={{\n label: getTranslation(currentCollectionConfig.labels.plural, i18n),\n }}\n />\n </DocumentDrawerToggler>\n <DocumentDrawer initialData={{ collectionSlug }} />\n </PopupList.Button>\n )\n}\n"],"names":["getTranslation","PopupList","Translation","useConfig","useDocumentDrawer","useTranslation","React","useEffect","useImportExport","baseClass","ImportListMenuItem","collectionSlug","importCollectionSlug","getEntityConfig","i18n","t","currentCollectionConfig","DocumentDrawer","DocumentDrawerToggler","setCollection","slug","Button","className","i18nKey","variables","label","labels","plural","initialData"],"mappings":"AAAA;;AAEA,SAASA,cAAc,QAAQ,2BAA0B;AACzD,SACEC,SAAS,EACTC,WAAW,EACXC,SAAS,EACTC,iBAAiB,EACjBC,cAAc,QACT,iBAAgB;AACvB,OAAOC,SAASC,SAAS,QAAQ,QAAO;AAOxC,SAASC,eAAe,QAAQ,mCAAkC;AAElE,MAAMC,YAAY;AAElB,OAAO,MAAMC,qBAGR,CAAC,EAAEC,cAAc,EAAEC,oBAAoB,EAAE;IAC5C,MAAM,EAAEC,eAAe,EAAE,GAAGV;IAE5B,MAAM,EAAEW,IAAI,EAAEC,CAAC,EAAE,GAAGV;IAKpB,MAAMW,0BAA0BH,gBAAgB;QAAEF;IAAe;IAEjE,MAAM,CAACM,gBAAgBC,sBAAsB,GAAGd,kBAAkB;QAChEO,gBAAgBC;IAClB;IACA,MAAM,EAAEO,aAAa,EAAE,GAAGX;IAE1B,uEAAuE;IACvED,UAAU;QACRY,cAAcH,wBAAwBI,IAAI,IAAI;IAChD,GAAG;QAACJ;QAAyBG;KAAc;IAE3C,qBACE,MAAClB,UAAUoB,MAAM;QAACC,WAAWb;;0BAC3B,KAACS;0BACC,cAAA,KAAChB;oBACC,6DAA6D;oBAC7D,mBAAmB;oBACnBqB,SAAQ;oBACRR,GAAGA;oBACHS,WAAW;wBACTC,OAAOzB,eAAegB,wBAAwBU,MAAM,CAACC,MAAM,EAAEb;oBAC/D;;;0BAGJ,KAACG;gBAAeW,aAAa;oBAAEjB;gBAAe;;;;AAGpD,EAAC"}
1
+ {"version":3,"sources":["../../../src/components/ImportListMenuItem/index.tsx"],"sourcesContent":["'use client'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { useConfig, useDocumentDrawer, useTranslation } from '@payloadcms/ui'\nimport React, { useEffect } from 'react'\n\nimport type {\n PluginImportExportTranslationKeys,\n PluginImportExportTranslations,\n} from '../../translations/index.js'\n\nimport { useImportExport } from '../ImportExportProvider/index.js'\n\nconst baseClass = 'import-list-menu-item'\n\nexport const ImportListMenuItem: React.FC<{\n collectionSlug: string\n importCollectionSlug: string\n}> = ({ collectionSlug, importCollectionSlug }) => {\n const { getEntityConfig } = useConfig()\n\n const { i18n, t } = useTranslation<\n PluginImportExportTranslations,\n PluginImportExportTranslationKeys\n >()\n\n const currentCollectionConfig = getEntityConfig({ collectionSlug })\n const collectionLabel = getTranslation(currentCollectionConfig.labels.plural, i18n)\n const actionLabel = t('plugin-import-export:importDocumentLabel', {\n label: collectionLabel,\n })\n\n const [DocumentDrawer, DocumentDrawerToggler] = useDocumentDrawer({\n collectionSlug: importCollectionSlug,\n })\n const { setCollection } = useImportExport()\n\n // Set collection and selected items on mount or when selection changes\n useEffect(() => {\n setCollection(currentCollectionConfig.slug ?? '')\n }, [currentCollectionConfig, setCollection])\n\n return (\n <>\n <DocumentDrawerToggler\n aria-label={actionLabel}\n className={`popup-button-list__button ${baseClass}`}\n role=\"menuitem\"\n tabIndex={-1}\n >\n <span className=\"popup-button-list__label\">{actionLabel}</span>\n </DocumentDrawerToggler>\n <DocumentDrawer initialData={{ collectionSlug }} />\n </>\n )\n}\n"],"names":["getTranslation","useConfig","useDocumentDrawer","useTranslation","React","useEffect","useImportExport","baseClass","ImportListMenuItem","collectionSlug","importCollectionSlug","getEntityConfig","i18n","t","currentCollectionConfig","collectionLabel","labels","plural","actionLabel","label","DocumentDrawer","DocumentDrawerToggler","setCollection","slug","aria-label","className","role","tabIndex","span","initialData"],"mappings":"AAAA;;AAEA,SAASA,cAAc,QAAQ,2BAA0B;AACzD,SAASC,SAAS,EAAEC,iBAAiB,EAAEC,cAAc,QAAQ,iBAAgB;AAC7E,OAAOC,SAASC,SAAS,QAAQ,QAAO;AAOxC,SAASC,eAAe,QAAQ,mCAAkC;AAElE,MAAMC,YAAY;AAElB,OAAO,MAAMC,qBAGR,CAAC,EAAEC,cAAc,EAAEC,oBAAoB,EAAE;IAC5C,MAAM,EAAEC,eAAe,EAAE,GAAGV;IAE5B,MAAM,EAAEW,IAAI,EAAEC,CAAC,EAAE,GAAGV;IAKpB,MAAMW,0BAA0BH,gBAAgB;QAAEF;IAAe;IACjE,MAAMM,kBAAkBf,eAAec,wBAAwBE,MAAM,CAACC,MAAM,EAAEL;IAC9E,MAAMM,cAAcL,EAAE,4CAA4C;QAChEM,OAAOJ;IACT;IAEA,MAAM,CAACK,gBAAgBC,sBAAsB,GAAGnB,kBAAkB;QAChEO,gBAAgBC;IAClB;IACA,MAAM,EAAEY,aAAa,EAAE,GAAGhB;IAE1B,uEAAuE;IACvED,UAAU;QACRiB,cAAcR,wBAAwBS,IAAI,IAAI;IAChD,GAAG;QAACT;QAAyBQ;KAAc;IAE3C,qBACE;;0BACE,KAACD;gBACCG,cAAYN;gBACZO,WAAW,CAAC,0BAA0B,EAAElB,WAAW;gBACnDmB,MAAK;gBACLC,UAAU,CAAC;0BAEX,cAAA,KAACC;oBAAKH,WAAU;8BAA4BP;;;0BAE9C,KAACE;gBAAeS,aAAa;oBAAEpB;gBAAe;;;;AAGpD,EAAC"}
@@ -0,0 +1,45 @@
1
+ @layer payload-default {
2
+ .import-preview__header {
3
+ display: flex;
4
+ justify-content: space-between;
5
+ align-items: flex-end;
6
+ margin-bottom: var(--spacer-2);
7
+ }
8
+
9
+ .import-preview__info {
10
+ color: var(--color-text-secondary);
11
+ font-size: var(--text-body-medium-font-size);
12
+ font-weight: var(--text-body-medium-font-weight);
13
+ line-height: var(--text-body-medium-line-height);
14
+ }
15
+
16
+ .import-preview__import-count {
17
+ color: var(--color-text-secondary);
18
+ font-size: var(--text-body-medium-font-size);
19
+ font-weight: var(--text-body-medium-font-weight);
20
+ line-height: var(--text-body-medium-line-height);
21
+ }
22
+
23
+ .import-preview__pagination {
24
+ display: flex;
25
+ align-items: center;
26
+ justify-content: space-between;
27
+ gap: var(--spacer-4);
28
+ margin-top: var(--spacer-4);
29
+ padding-top: var(--spacer-4);
30
+ border-top: var(--stroke-width-small) solid var(--color-border);
31
+
32
+ /* When only PerPage is present (no Pagination), keep it on the right */
33
+ .per-page:only-child {
34
+ margin-left: auto;
35
+ }
36
+ }
37
+
38
+ .import-preview__page-info {
39
+ color: var(--color-text-secondary);
40
+ font-size: var(--text-body-medium-font-size);
41
+ font-weight: var(--text-body-medium-font-weight);
42
+ line-height: var(--text-body-medium-line-height);
43
+ white-space: nowrap;
44
+ }
45
+ }
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
- import './index.scss';
2
+ import './index.css';
3
3
  export declare const ImportPreview: React.FC;
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ImportPreview/index.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAkC,MAAM,OAAO,CAAA;AAStD,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EA2mBjC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ImportPreview/index.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAkC,MAAM,OAAO,CAAA;AActD,OAAO,aAAa,CAAA;AAuBpB,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EA+nBjC,CAAA"}
@@ -1,13 +1,33 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { getTranslation } from '@payloadcms/translations';
4
- import { Pagination, PerPage, Table, Translation, useConfig, useDebouncedEffect, useDocumentInfo, useField, useFormFields, useTranslation } from '@payloadcms/ui';
4
+ import { Pagination, PerPage, Table, Translation, useConfig, useDebouncedEffect, useDocumentInfo, useField, useForm, useFormFields, useTranslation } from '@payloadcms/ui';
5
5
  import { formatDocTitle } from '@payloadcms/ui/shared';
6
6
  import { fieldAffectsData, getObjectDotNotation } from 'payload/shared';
7
7
  import React, { useState, useTransition } from 'react';
8
8
  import { DEFAULT_PREVIEW_LIMIT, PREVIEW_LIMIT_OPTIONS } from '../../constants.js';
9
- import './index.scss';
9
+ import { getFormStateSignature, getSubmittedFormValues } from '../../utilities/getSubmittedFormValues.js';
10
+ import { RelationshipCell } from '../RelationshipCell/index.js';
11
+ import './index.css';
10
12
  const baseClass = 'import-preview';
13
+ // The file contents are sent separately as `fileData`.
14
+ const nonSerializableFormKeys = [
15
+ 'file'
16
+ ];
17
+ /**
18
+ * Browser-native ArrayBuffer → base64. Avoids Node's `Buffer`, which is not
19
+ * available in the browser under bundlers that don't polyfill it (e.g. Vite),
20
+ * unlike Next's webpack build. Chunked to stay under `String.fromCharCode`'s
21
+ * argument-count limit for large files.
22
+ */ const arrayBufferToBase64 = (arrayBuffer)=>{
23
+ const bytes = new Uint8Array(arrayBuffer);
24
+ const chunkSize = 0x8000;
25
+ let binary = '';
26
+ for(let i = 0; i < bytes.length; i += chunkSize){
27
+ binary += String.fromCharCode(...bytes.subarray(i, i + chunkSize));
28
+ }
29
+ return btoa(binary);
30
+ };
11
31
  export const ImportPreview = ()=>{
12
32
  const [isPending, startTransition] = useTransition();
13
33
  const { config, config: { routes } } = useConfig();
@@ -39,6 +59,11 @@ export const ImportPreview = ()=>{
39
59
  });
40
60
  // Access the file field directly from form fields
41
61
  const fileField = useFormFields(([fields])=>fields?.file || null);
62
+ const { getData } = useForm();
63
+ const formStateSignature = useFormFields(([fields])=>getFormStateSignature({
64
+ fields,
65
+ omit: nonSerializableFormKeys
66
+ }));
42
67
  const [dataToRender, setDataToRender] = useState([]);
43
68
  const [columns, setColumns] = useState([]);
44
69
  const [totalDocs, setTotalDocs] = useState(0);
@@ -86,7 +111,7 @@ export const ImportPreview = ()=>{
86
111
  if (fileField?.value && fileField.value instanceof File) {
87
112
  // File is being uploaded, read its contents
88
113
  const arrayBuffer = await fileField.value.arrayBuffer();
89
- const base64 = Buffer.from(arrayBuffer).toString('base64');
114
+ const base64 = arrayBufferToBase64(arrayBuffer);
90
115
  fileData = base64;
91
116
  } else if (url) {
92
117
  // File has been saved, fetch from URL
@@ -97,7 +122,7 @@ export const ImportPreview = ()=>{
97
122
  throw new Error('Failed to fetch file');
98
123
  }
99
124
  const arrayBuffer = await response.arrayBuffer();
100
- const base64 = Buffer.from(arrayBuffer).toString('base64');
125
+ const base64 = arrayBufferToBase64(arrayBuffer);
101
126
  fileData = base64;
102
127
  }
103
128
  if (!fileData) {
@@ -113,6 +138,10 @@ export const ImportPreview = ()=>{
113
138
  collectionSlug: targetCollectionSlug,
114
139
  fileData,
115
140
  format,
141
+ formData: getSubmittedFormValues({
142
+ formData: getData(),
143
+ omit: nonSerializableFormKeys
144
+ }),
116
145
  previewLimit,
117
146
  previewPage
118
147
  }),
@@ -173,16 +202,21 @@ export const ImportPreview = ()=>{
173
202
  active: true,
174
203
  field,
175
204
  Heading: label,
176
- renderedCells: docs.map((doc)=>{
205
+ renderedCells: docs.map((doc, rowIndex)=>{
177
206
  const value = getObjectDotNotation(doc, fieldPath);
178
207
  if (value === undefined || value === null) {
179
208
  return null;
180
209
  }
181
210
  // Format based on field type
182
- if (field.type === 'relationship' || field.type === 'upload') {
183
- // Handle relationships
211
+ const shouldRenderGroupedRelationship = format === 'json' && field.type === 'relationship' && Array.isArray(field.relationTo);
212
+ if (shouldRenderGroupedRelationship) {
213
+ return /*#__PURE__*/ _jsx(RelationshipCell, {
214
+ fieldPath: fieldPath,
215
+ relationTo: field.relationTo,
216
+ value: value
217
+ }, `${fieldPath}-${rowIndex}`);
218
+ } else if (field.type === 'relationship' || field.type === 'upload') {
184
219
  if (typeof value === 'object' && !Array.isArray(value)) {
185
- // Single relationship
186
220
  const relationTo = Array.isArray(field.relationTo) ? value.relationTo : field.relationTo;
187
221
  const relatedConfig = config.collections.find((c)=>c.slug === relationTo);
188
222
  if (relatedConfig && relatedConfig.admin?.useAsTitle) {
@@ -196,11 +230,9 @@ export const ImportPreview = ()=>{
196
230
  });
197
231
  }
198
232
  }
199
- // Fallback to ID
200
233
  const id = value.id || value;
201
234
  return `${getTranslation(relatedConfig?.labels?.singular || relationTo, i18n)}: ${id}`;
202
235
  } else if (Array.isArray(value)) {
203
- // Multiple relationships
204
236
  return value.map((item)=>{
205
237
  if (typeof item === 'object') {
206
238
  const relationTo = Array.isArray(field.relationTo) ? item.relationTo : field.relationTo;
@@ -221,7 +253,6 @@ export const ImportPreview = ()=>{
221
253
  return item;
222
254
  }).join(', ');
223
255
  }
224
- // Just an ID
225
256
  return String(value);
226
257
  } else if (field.type === 'date') {
227
258
  // Display date as string to avoid wrong locale/timezone conversion
@@ -367,6 +398,8 @@ export const ImportPreview = ()=>{
367
398
  filename,
368
399
  mimeType,
369
400
  fileField?.value,
401
+ formStateSignature,
402
+ getData,
370
403
  collectionConfig,
371
404
  config,
372
405
  i18n,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ImportPreview/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientField, Column, PaginatedDocs } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Pagination,\n PerPage,\n Table,\n Translation,\n useConfig,\n useDebouncedEffect,\n useDocumentInfo,\n useField,\n useFormFields,\n useTranslation,\n} from '@payloadcms/ui'\nimport { formatDocTitle } from '@payloadcms/ui/shared'\nimport { fieldAffectsData, getObjectDotNotation } from 'payload/shared'\nimport React, { useState, useTransition } from 'react'\n\nimport type {\n PluginImportExportTranslationKeys,\n PluginImportExportTranslations,\n} from '../../translations/index.js'\nimport type { ImportPreviewResponse } from '../../types.js'\n\nimport { DEFAULT_PREVIEW_LIMIT, PREVIEW_LIMIT_OPTIONS } from '../../constants.js'\nimport './index.scss'\n\nconst baseClass = 'import-preview'\n\nexport const ImportPreview: React.FC = () => {\n const [isPending, startTransition] = useTransition()\n const {\n config,\n config: { routes },\n } = useConfig()\n const { collectionSlug } = useDocumentInfo()\n const { i18n, t } = useTranslation<\n PluginImportExportTranslations,\n PluginImportExportTranslationKeys\n >()\n\n const { value: targetCollectionSlug } = useField<string>({ path: 'collectionSlug' })\n const { value: importMode } = useField<string>({ path: 'importMode' })\n const { value: matchField } = useField<string>({ path: 'matchField' })\n const { value: filename } = useField<string>({ path: 'filename' })\n const { value: url } = useField<string>({ path: 'url' })\n const { value: mimeType } = useField<string>({ path: 'mimeType' })\n const { value: status } = useField<string>({ path: 'status' })\n const { value: summary } = useField<any>({ path: 'summary' })\n\n // Access the file field directly from form fields\n const fileField = useFormFields(([fields]) => fields?.file || null)\n\n const [dataToRender, setDataToRender] = useState<Record<string, unknown>[]>([])\n const [columns, setColumns] = useState<Column[]>([])\n const [totalDocs, setTotalDocs] = useState<number>(0)\n const [error, setError] = useState<null | string>(null)\n\n // Preview pagination state\n const [previewPage, setPreviewPage] = useState(1)\n const [previewLimit, setPreviewLimit] = useState(DEFAULT_PREVIEW_LIMIT)\n const [paginationData, setPaginationData] = useState<null | Pick<\n PaginatedDocs,\n 'hasNextPage' | 'hasPrevPage' | 'limit' | 'nextPage' | 'page' | 'prevPage' | 'totalPages'\n >>(null)\n\n const collectionConfig = React.useMemo(\n () => config.collections.find((c) => c.slug === targetCollectionSlug),\n [targetCollectionSlug, config.collections],\n )\n\n useDebouncedEffect(\n () => {\n if (!collectionSlug || !targetCollectionSlug) {\n return\n }\n\n if (!targetCollectionSlug || (!url && !fileField?.value)) {\n setDataToRender([])\n setColumns([])\n setTotalDocs(0)\n setPaginationData(null)\n return\n }\n\n if (!collectionConfig) {\n setDataToRender([])\n setColumns([])\n setTotalDocs(0)\n setPaginationData(null)\n return\n }\n\n const abortController = new AbortController()\n\n const processFileData = async () => {\n setError(null)\n\n try {\n // Determine format from file\n let format: 'csv' | 'json' = 'json'\n if (fileField?.value && fileField.value instanceof File) {\n const file = fileField.value\n format = file.type === 'text/csv' || file.name?.endsWith('.csv') ? 'csv' : 'json'\n } else if (mimeType === 'text/csv' || filename?.endsWith('.csv')) {\n format = 'csv'\n }\n\n // Get file data as base64\n let fileData: string | undefined\n\n if (fileField?.value && fileField.value instanceof File) {\n // File is being uploaded, read its contents\n const arrayBuffer = await fileField.value.arrayBuffer()\n const base64 = Buffer.from(arrayBuffer).toString('base64')\n fileData = base64\n } else if (url) {\n // File has been saved, fetch from URL\n const response = await fetch(url, { signal: abortController.signal })\n if (!response.ok) {\n throw new Error('Failed to fetch file')\n }\n const arrayBuffer = await response.arrayBuffer()\n const base64 = Buffer.from(arrayBuffer).toString('base64')\n fileData = base64\n }\n\n if (!fileData) {\n setDataToRender([])\n setColumns([])\n setTotalDocs(0)\n setPaginationData(null)\n return\n }\n\n // Fetch transformed data from the server\n const res = await fetch(`${routes.api}/${collectionSlug}/preview-data`, {\n body: JSON.stringify({\n collectionSlug: targetCollectionSlug,\n fileData,\n format,\n previewLimit,\n previewPage,\n }),\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n method: 'POST',\n signal: abortController.signal,\n })\n\n if (!res.ok) {\n throw new Error('Failed to process file')\n }\n\n const {\n docs,\n hasNextPage,\n hasPrevPage,\n limit: responseLimit,\n page: responsePage,\n totalDocs: serverTotalDocs,\n totalPages,\n }: ImportPreviewResponse = await res.json()\n\n setTotalDocs(serverTotalDocs)\n setPaginationData({\n hasNextPage,\n hasPrevPage,\n limit: responseLimit,\n nextPage: responsePage + 1,\n page: responsePage,\n prevPage: responsePage - 1,\n totalPages,\n })\n\n if (!Array.isArray(docs) || docs.length === 0) {\n setDataToRender([])\n setColumns([])\n return\n }\n\n // Build columns from collection fields without traverseFields\n const buildColumnsFromFields = (\n fields: ClientField[],\n parentPath = '',\n parentLabel = '',\n ): Column[] => {\n const cols: Column[] = []\n\n fields.forEach((field) => {\n if (!fieldAffectsData(field) || field.admin?.disabled) {\n return\n }\n\n // Build the field path\n const fieldPath = parentPath ? `${parentPath}.${field.name}` : field.name\n\n // Get the field label\n let label = field.name\n if ('label' in field && field.label) {\n label = getTranslation(field.label, i18n)\n }\n\n // Add parent label prefix if in a group\n if (parentLabel) {\n label = `${parentLabel} > ${label}`\n }\n\n // Skip if this field doesn't exist in any document\n const hasData = docs.some((doc) => {\n const value = getObjectDotNotation(doc, fieldPath)\n return value !== undefined && value !== null\n })\n\n if (!hasData && field.type !== 'relationship') {\n return\n }\n\n cols.push({\n accessor: fieldPath,\n active: true,\n field,\n Heading: label,\n renderedCells: docs.map((doc) => {\n const value = getObjectDotNotation(doc, fieldPath)\n\n if (value === undefined || value === null) {\n return null\n }\n\n // Format based on field type\n if (field.type === 'relationship' || field.type === 'upload') {\n // Handle relationships\n if (typeof value === 'object' && !Array.isArray(value)) {\n // Single relationship\n const relationTo = Array.isArray(field.relationTo)\n ? (value as any).relationTo\n : field.relationTo\n\n const relatedConfig = config.collections.find((c) => c.slug === relationTo)\n if (relatedConfig && relatedConfig.admin?.useAsTitle) {\n const titleValue = (value as any)[relatedConfig.admin.useAsTitle]\n if (titleValue) {\n return formatDocTitle({\n collectionConfig: relatedConfig,\n data: value as any,\n dateFormat: config.admin.dateFormat,\n i18n,\n })\n }\n }\n\n // Fallback to ID\n const id = (value as any).id || value\n return `${getTranslation(relatedConfig?.labels?.singular || relationTo, i18n)}: ${id}`\n } else if (Array.isArray(value)) {\n // Multiple relationships\n return value\n .map((item) => {\n if (typeof item === 'object') {\n const relationTo = Array.isArray(field.relationTo)\n ? item.relationTo\n : field.relationTo\n const relatedConfig = config.collections.find(\n (c) => c.slug === relationTo,\n )\n\n if (relatedConfig && relatedConfig.admin?.useAsTitle) {\n const titleValue = item[relatedConfig.admin.useAsTitle]\n if (titleValue) {\n return formatDocTitle({\n collectionConfig: relatedConfig,\n data: item,\n dateFormat: config.admin.dateFormat,\n i18n,\n })\n }\n }\n\n return item.id || item\n }\n return item\n })\n .join(', ')\n }\n\n // Just an ID\n return String(value)\n } else if (field.type === 'date') {\n // Display date as string to avoid wrong locale/timezone conversion\n return String(value)\n } else if (field.type === 'checkbox') {\n return value ? '✓' : '✗'\n } else if (field.type === 'select' || field.type === 'radio') {\n // Show the label for select/radio options\n const option = field.options?.find((opt) => {\n if (typeof opt === 'string') {\n return opt === value\n }\n return opt.value === value\n })\n\n if (option && typeof option === 'object') {\n return getTranslation(option.label, i18n)\n }\n return String(value)\n } else if (field.type === 'number') {\n return String(value)\n } else if (Array.isArray(value)) {\n // Handle arrays\n if (field.type === 'blocks') {\n return value.map((block: any) => `${block.blockType || 'Block'}`).join(', ')\n }\n return `[${value.length} items]`\n } else if (typeof value === 'object') {\n // Handle objects\n if (field.type === 'group') {\n return '{...}'\n }\n return JSON.stringify(value)\n }\n\n return String(value)\n }),\n })\n\n // For groups, add nested fields with parent label\n if (field.type === 'group' && 'fields' in field) {\n const groupLabel =\n 'label' in field && field.label ? getTranslation(field.label, i18n) : field.name\n\n const nestedCols = buildColumnsFromFields(\n field.fields,\n fieldPath,\n parentLabel ? `${parentLabel} > ${groupLabel}` : groupLabel,\n )\n cols.push(...nestedCols)\n }\n\n // For tabs, process the fields within\n if ('tabs' in field && Array.isArray(field.tabs)) {\n field.tabs.forEach((tab) => {\n if ('name' in tab && tab.name) {\n // Named tab\n const tabPath = parentPath ? `${parentPath}.${tab.name}` : tab.name\n const tabLabel =\n 'label' in tab && tab.label ? getTranslation(tab.label, i18n) : tab.name\n\n const tabCols = buildColumnsFromFields(\n tab.fields,\n tabPath,\n parentLabel ? `${parentLabel} > ${tabLabel}` : tabLabel,\n )\n cols.push(...tabCols)\n } else {\n // Unnamed tab - fields go directly under parent\n const tabLabel =\n 'label' in tab && tab.label ? getTranslation(tab.label, i18n) : ''\n\n const tabCols = buildColumnsFromFields(\n tab.fields,\n parentPath,\n tabLabel && typeof tabLabel === 'string' && parentLabel\n ? `${parentLabel} > ${tabLabel}`\n : typeof tabLabel === 'string'\n ? tabLabel\n : parentLabel,\n )\n cols.push(...tabCols)\n }\n })\n }\n })\n\n return cols\n }\n\n const fieldColumns = buildColumnsFromFields(collectionConfig.fields)\n\n const existingAccessors = new Set(fieldColumns.map((column) => column.accessor))\n\n // Discover all fields from document data to determine column order\n // Respect the order fields appear in the data (e.g., CSV column order)\n const dataFieldOrder: string[] = []\n const dataFieldsSet = new Set<string>()\n\n // Collect all fields from all docs to get comprehensive field list\n docs.forEach((doc) => {\n Object.keys(doc).forEach((key) => {\n if (!dataFieldsSet.has(key) && doc[key] !== undefined && doc[key] !== null) {\n dataFieldsSet.add(key)\n dataFieldOrder.push(key)\n }\n })\n })\n\n // Helper to create a column for a field\n const createColumnForField = (fieldName: string): Column => ({\n accessor: fieldName,\n active: true,\n field: { name: fieldName } as ClientField,\n Heading: getTranslation(fieldName, i18n),\n renderedCells: docs.map((doc) => {\n const value = doc[fieldName]\n if (value === undefined || value === null) {\n return null\n }\n\n return String(value)\n }),\n })\n\n // Build columns respecting data order for fields not in config\n // For fields in config, use their natural order from fieldColumns\n const finalColumns: Column[] = []\n const addedAccessors = new Set<string>()\n\n // Process fields in the order they appear in the data\n dataFieldOrder.forEach((fieldName) => {\n if (existingAccessors.has(fieldName)) {\n // This field is from the collection config\n const configColumn = fieldColumns.find((col) => col.accessor === fieldName)\n if (configColumn && !addedAccessors.has(fieldName)) {\n finalColumns.push(configColumn)\n addedAccessors.add(fieldName)\n }\n } else {\n // This is an additional field (system field or extra data field)\n if (!addedAccessors.has(fieldName)) {\n finalColumns.push(createColumnForField(fieldName))\n addedAccessors.add(fieldName)\n }\n }\n })\n\n // Add any remaining config fields that weren't in the data\n fieldColumns.forEach((col) => {\n if (!addedAccessors.has(col.accessor)) {\n finalColumns.push(col)\n addedAccessors.add(col.accessor)\n }\n })\n\n setColumns(finalColumns)\n setDataToRender(docs)\n } catch (err) {\n console.error('Error processing file data:', err)\n setError(err instanceof Error ? err.message : 'Failed to load preview')\n setDataToRender([])\n setColumns([])\n setTotalDocs(0)\n setPaginationData(null)\n }\n }\n\n startTransition(async () => await processFileData())\n\n return () => {\n if (!abortController.signal.aborted) {\n abortController.abort('Component unmounted')\n }\n }\n },\n [\n collectionSlug,\n targetCollectionSlug,\n url,\n filename,\n mimeType,\n fileField?.value,\n collectionConfig,\n config,\n i18n,\n previewLimit,\n previewPage,\n routes.api,\n ],\n 500,\n )\n\n // If import has been processed, show results instead of preview\n if (status !== 'pending' && summary) {\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n <h3>\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:importResults\" t={t} />\n </h3>\n </div>\n <div className={`${baseClass}__results`}>\n <p>\n <strong>Status:</strong> {status}\n </p>\n <p>\n <strong>Imported:</strong> {summary.imported || 0}\n </p>\n <p>\n <strong>Updated:</strong> {summary.updated || 0}\n </p>\n <p>\n <strong>Total:</strong> {summary.total || 0}\n </p>\n {summary.issues > 0 && (\n <p>\n <strong>Issues:</strong> {summary.issues}\n </p>\n )}\n {summary.issueDetails && summary.issueDetails.length > 0 && (\n <div style={{ marginTop: '1rem' }}>\n <strong>Issue Details:</strong>\n <ul style={{ marginTop: '0.5rem' }}>\n {summary.issueDetails.slice(0, 10).map((issue: any, index: number) => (\n <li key={index}>\n Row {issue.row}: {issue.error}\n </li>\n ))}\n {summary.issueDetails.length > 10 && (\n <li>... and {summary.issueDetails.length - 10} more issues</li>\n )}\n </ul>\n </div>\n )}\n </div>\n </div>\n )\n }\n\n if (!targetCollectionSlug) {\n return (\n <div className={baseClass}>\n <p style={{ opacity: 0.6 }}>\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:collectionRequired\" t={t} />\n </p>\n </div>\n )\n }\n\n if (error) {\n return (\n <div className={baseClass}>\n <p style={{ color: 'red' }}>\n <Translation i18nKey=\"general:error\" t={t} />: {error}\n </p>\n </div>\n )\n }\n\n if (!url && !fileField?.value) {\n return (\n <div className={baseClass}>\n <p style={{ opacity: 0.6 }}>\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:uploadFileToSeePreview\" t={t} />\n </p>\n </div>\n )\n }\n\n const handlePageChange = (page: number) => {\n setPreviewPage(page)\n }\n\n const handlePerPageChange = (newLimit: number) => {\n setPreviewLimit(newLimit)\n setPreviewPage(1)\n }\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n <h3>\n <Translation i18nKey=\"version:preview\" t={t} />\n </h3>\n {totalDocs > 0 && !isPending && (\n <div className={`${baseClass}__info`}>\n <span className={`${baseClass}__import-count`}>\n <Translation\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n i18nKey=\"plugin-import-export:documentsToImport\"\n t={t}\n variables={{\n count: totalDocs,\n }}\n />\n </span>\n {' | '}\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:mode\" t={t} />: {importMode || 'create'}\n {importMode !== 'create' && (\n <>\n {' | '}\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:matchBy\" t={t} />: {matchField || 'id'}\n </>\n )}\n </div>\n )}\n </div>\n {isPending && !dataToRender.length && (\n <div className={`${baseClass}__loading`}>\n <Translation i18nKey=\"general:loading\" t={t} />\n </div>\n )}\n {dataToRender.length > 0 && <Table columns={columns} data={dataToRender} />}\n {!isPending && dataToRender.length === 0 && targetCollectionSlug && (\n <p>\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:noDataToPreview\" t={t} />\n </p>\n )}\n {paginationData && totalDocs > 0 && (\n <div className={`${baseClass}__pagination`}>\n {paginationData.totalPages > 1 && (\n <Pagination\n hasNextPage={paginationData.hasNextPage}\n hasPrevPage={paginationData.hasPrevPage}\n nextPage={paginationData.nextPage ?? undefined}\n numberOfNeighbors={1}\n onChange={handlePageChange}\n page={paginationData.page}\n prevPage={paginationData.prevPage ?? undefined}\n totalPages={paginationData.totalPages}\n />\n )}\n <span className={`${baseClass}__page-info`}>\n <Translation\n // @ts-expect-error - plugin translations not typed\n i18nKey=\"plugin-import-export:previewPageInfo\"\n t={t}\n variables={{\n end: Math.min((paginationData.page ?? 1) * previewLimit, totalDocs),\n start: ((paginationData.page ?? 1) - 1) * previewLimit + 1,\n total: totalDocs,\n }}\n />\n </span>\n <PerPage\n handleChange={handlePerPageChange}\n limit={previewLimit}\n limits={PREVIEW_LIMIT_OPTIONS}\n />\n </div>\n )}\n </div>\n )\n}\n"],"names":["getTranslation","Pagination","PerPage","Table","Translation","useConfig","useDebouncedEffect","useDocumentInfo","useField","useFormFields","useTranslation","formatDocTitle","fieldAffectsData","getObjectDotNotation","React","useState","useTransition","DEFAULT_PREVIEW_LIMIT","PREVIEW_LIMIT_OPTIONS","baseClass","ImportPreview","isPending","startTransition","config","routes","collectionSlug","i18n","t","value","targetCollectionSlug","path","importMode","matchField","filename","url","mimeType","status","summary","fileField","fields","file","dataToRender","setDataToRender","columns","setColumns","totalDocs","setTotalDocs","error","setError","previewPage","setPreviewPage","previewLimit","setPreviewLimit","paginationData","setPaginationData","collectionConfig","useMemo","collections","find","c","slug","abortController","AbortController","processFileData","format","File","type","name","endsWith","fileData","arrayBuffer","base64","Buffer","from","toString","response","fetch","signal","ok","Error","res","api","body","JSON","stringify","credentials","headers","method","docs","hasNextPage","hasPrevPage","limit","responseLimit","page","responsePage","serverTotalDocs","totalPages","json","nextPage","prevPage","Array","isArray","length","buildColumnsFromFields","parentPath","parentLabel","cols","forEach","field","admin","disabled","fieldPath","label","hasData","some","doc","undefined","push","accessor","active","Heading","renderedCells","map","relationTo","relatedConfig","useAsTitle","titleValue","data","dateFormat","id","labels","singular","item","join","String","option","options","opt","block","blockType","groupLabel","nestedCols","tabs","tab","tabPath","tabLabel","tabCols","fieldColumns","existingAccessors","Set","column","dataFieldOrder","dataFieldsSet","Object","keys","key","has","add","createColumnForField","fieldName","finalColumns","addedAccessors","configColumn","col","err","console","message","aborted","abort","div","className","h3","i18nKey","p","strong","imported","updated","total","issues","issueDetails","style","marginTop","ul","slice","issue","index","li","row","opacity","color","handlePageChange","handlePerPageChange","newLimit","span","variables","count","numberOfNeighbors","onChange","end","Math","min","start","handleChange","limits"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/ImportPreview/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientField, Column, PaginatedDocs } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Pagination,\n PerPage,\n Table,\n Translation,\n useConfig,\n useDebouncedEffect,\n useDocumentInfo,\n useField,\n useForm,\n useFormFields,\n useTranslation,\n} from '@payloadcms/ui'\nimport { formatDocTitle } from '@payloadcms/ui/shared'\nimport { fieldAffectsData, getObjectDotNotation } from 'payload/shared'\nimport React, { useState, useTransition } from 'react'\n\nimport type {\n PluginImportExportTranslationKeys,\n PluginImportExportTranslations,\n} from '../../translations/index.js'\nimport type { ImportPreviewResponse } from '../../types.js'\n\nimport { DEFAULT_PREVIEW_LIMIT, PREVIEW_LIMIT_OPTIONS } from '../../constants.js'\nimport {\n getFormStateSignature,\n getSubmittedFormValues,\n} from '../../utilities/getSubmittedFormValues.js'\nimport { RelationshipCell } from '../RelationshipCell/index.js'\nimport './index.css'\n\nconst baseClass = 'import-preview'\n\n// The file contents are sent separately as `fileData`.\nconst nonSerializableFormKeys = ['file']\n\n/**\n * Browser-native ArrayBuffer → base64. Avoids Node's `Buffer`, which is not\n * available in the browser under bundlers that don't polyfill it (e.g. Vite),\n * unlike Next's webpack build. Chunked to stay under `String.fromCharCode`'s\n * argument-count limit for large files.\n */\nconst arrayBufferToBase64 = (arrayBuffer: ArrayBuffer): string => {\n const bytes = new Uint8Array(arrayBuffer)\n const chunkSize = 0x8000\n let binary = ''\n for (let i = 0; i < bytes.length; i += chunkSize) {\n binary += String.fromCharCode(...bytes.subarray(i, i + chunkSize))\n }\n return btoa(binary)\n}\n\nexport const ImportPreview: React.FC = () => {\n const [isPending, startTransition] = useTransition()\n const {\n config,\n config: { routes },\n } = useConfig()\n const { collectionSlug } = useDocumentInfo()\n const { i18n, t } = useTranslation<\n PluginImportExportTranslations,\n PluginImportExportTranslationKeys\n >()\n\n const { value: targetCollectionSlug } = useField<string>({ path: 'collectionSlug' })\n const { value: importMode } = useField<string>({ path: 'importMode' })\n const { value: matchField } = useField<string>({ path: 'matchField' })\n const { value: filename } = useField<string>({ path: 'filename' })\n const { value: url } = useField<string>({ path: 'url' })\n const { value: mimeType } = useField<string>({ path: 'mimeType' })\n const { value: status } = useField<string>({ path: 'status' })\n const { value: summary } = useField<any>({ path: 'summary' })\n\n // Access the file field directly from form fields\n const fileField = useFormFields(([fields]) => fields?.file || null)\n\n const { getData } = useForm()\n const formStateSignature = useFormFields(([fields]) =>\n getFormStateSignature({ fields, omit: nonSerializableFormKeys }),\n )\n\n const [dataToRender, setDataToRender] = useState<Record<string, unknown>[]>([])\n const [columns, setColumns] = useState<Column[]>([])\n const [totalDocs, setTotalDocs] = useState<number>(0)\n const [error, setError] = useState<null | string>(null)\n\n // Preview pagination state\n const [previewPage, setPreviewPage] = useState(1)\n const [previewLimit, setPreviewLimit] = useState(DEFAULT_PREVIEW_LIMIT)\n const [paginationData, setPaginationData] = useState<null | Pick<\n PaginatedDocs,\n 'hasNextPage' | 'hasPrevPage' | 'limit' | 'nextPage' | 'page' | 'prevPage' | 'totalPages'\n >>(null)\n\n const collectionConfig = React.useMemo(\n () => config.collections.find((c) => c.slug === targetCollectionSlug),\n [targetCollectionSlug, config.collections],\n )\n\n useDebouncedEffect(\n () => {\n if (!collectionSlug || !targetCollectionSlug) {\n return\n }\n\n if (!targetCollectionSlug || (!url && !fileField?.value)) {\n setDataToRender([])\n setColumns([])\n setTotalDocs(0)\n setPaginationData(null)\n return\n }\n\n if (!collectionConfig) {\n setDataToRender([])\n setColumns([])\n setTotalDocs(0)\n setPaginationData(null)\n return\n }\n\n const abortController = new AbortController()\n\n const processFileData = async () => {\n setError(null)\n\n try {\n // Determine format from file\n let format: 'csv' | 'json' = 'json'\n if (fileField?.value && fileField.value instanceof File) {\n const file = fileField.value\n format = file.type === 'text/csv' || file.name?.endsWith('.csv') ? 'csv' : 'json'\n } else if (mimeType === 'text/csv' || filename?.endsWith('.csv')) {\n format = 'csv'\n }\n\n // Get file data as base64\n let fileData: string | undefined\n\n if (fileField?.value && fileField.value instanceof File) {\n // File is being uploaded, read its contents\n const arrayBuffer = await fileField.value.arrayBuffer()\n const base64 = arrayBufferToBase64(arrayBuffer)\n fileData = base64\n } else if (url) {\n // File has been saved, fetch from URL\n const response = await fetch(url, { signal: abortController.signal })\n if (!response.ok) {\n throw new Error('Failed to fetch file')\n }\n const arrayBuffer = await response.arrayBuffer()\n const base64 = arrayBufferToBase64(arrayBuffer)\n fileData = base64\n }\n\n if (!fileData) {\n setDataToRender([])\n setColumns([])\n setTotalDocs(0)\n setPaginationData(null)\n return\n }\n\n // Fetch transformed data from the server\n const res = await fetch(`${routes.api}/${collectionSlug}/preview-data`, {\n body: JSON.stringify({\n collectionSlug: targetCollectionSlug,\n fileData,\n format,\n formData: getSubmittedFormValues({\n formData: getData(),\n omit: nonSerializableFormKeys,\n }),\n previewLimit,\n previewPage,\n }),\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n method: 'POST',\n signal: abortController.signal,\n })\n\n if (!res.ok) {\n throw new Error('Failed to process file')\n }\n\n const {\n docs,\n hasNextPage,\n hasPrevPage,\n limit: responseLimit,\n page: responsePage,\n totalDocs: serverTotalDocs,\n totalPages,\n }: ImportPreviewResponse = await res.json()\n\n setTotalDocs(serverTotalDocs)\n setPaginationData({\n hasNextPage,\n hasPrevPage,\n limit: responseLimit,\n nextPage: responsePage + 1,\n page: responsePage,\n prevPage: responsePage - 1,\n totalPages,\n })\n\n if (!Array.isArray(docs) || docs.length === 0) {\n setDataToRender([])\n setColumns([])\n return\n }\n\n // Build columns from collection fields without traverseFields\n const buildColumnsFromFields = (\n fields: ClientField[],\n parentPath = '',\n parentLabel = '',\n ): Column[] => {\n const cols: Column[] = []\n\n fields.forEach((field) => {\n if (!fieldAffectsData(field) || field.admin?.disabled) {\n return\n }\n\n // Build the field path\n const fieldPath = parentPath ? `${parentPath}.${field.name}` : field.name\n\n // Get the field label\n let label = field.name\n if ('label' in field && field.label) {\n label = getTranslation(field.label, i18n)\n }\n\n // Add parent label prefix if in a group\n if (parentLabel) {\n label = `${parentLabel} > ${label}`\n }\n\n // Skip if this field doesn't exist in any document\n const hasData = docs.some((doc) => {\n const value = getObjectDotNotation(doc, fieldPath)\n return value !== undefined && value !== null\n })\n\n if (!hasData && field.type !== 'relationship') {\n return\n }\n\n cols.push({\n accessor: fieldPath,\n active: true,\n field,\n Heading: label,\n renderedCells: docs.map((doc, rowIndex) => {\n const value = getObjectDotNotation(doc, fieldPath)\n\n if (value === undefined || value === null) {\n return null\n }\n\n // Format based on field type\n const shouldRenderGroupedRelationship =\n format === 'json' &&\n field.type === 'relationship' &&\n Array.isArray(field.relationTo)\n\n if (shouldRenderGroupedRelationship) {\n return (\n <RelationshipCell\n fieldPath={fieldPath}\n key={`${fieldPath}-${rowIndex}`}\n relationTo={field.relationTo}\n value={value}\n />\n )\n } else if (field.type === 'relationship' || field.type === 'upload') {\n if (typeof value === 'object' && !Array.isArray(value)) {\n const relationTo = Array.isArray(field.relationTo)\n ? (value as any).relationTo\n : field.relationTo\n\n const relatedConfig = config.collections.find((c) => c.slug === relationTo)\n if (relatedConfig && relatedConfig.admin?.useAsTitle) {\n const titleValue = (value as any)[relatedConfig.admin.useAsTitle]\n if (titleValue) {\n return formatDocTitle({\n collectionConfig: relatedConfig,\n data: value as any,\n dateFormat: config.admin.dateFormat,\n i18n,\n })\n }\n }\n\n const id = (value as any).id || value\n return `${getTranslation(relatedConfig?.labels?.singular || relationTo, i18n)}: ${id}`\n } else if (Array.isArray(value)) {\n return value\n .map((item) => {\n if (typeof item === 'object') {\n const relationTo = Array.isArray(field.relationTo)\n ? item.relationTo\n : field.relationTo\n const relatedConfig = config.collections.find(\n (c) => c.slug === relationTo,\n )\n\n if (relatedConfig && relatedConfig.admin?.useAsTitle) {\n const titleValue = item[relatedConfig.admin.useAsTitle]\n if (titleValue) {\n return formatDocTitle({\n collectionConfig: relatedConfig,\n data: item,\n dateFormat: config.admin.dateFormat,\n i18n,\n })\n }\n }\n\n return item.id || item\n }\n return item\n })\n .join(', ')\n }\n\n return String(value)\n } else if (field.type === 'date') {\n // Display date as string to avoid wrong locale/timezone conversion\n return String(value)\n } else if (field.type === 'checkbox') {\n return value ? '✓' : '✗'\n } else if (field.type === 'select' || field.type === 'radio') {\n // Show the label for select/radio options\n const option = field.options?.find((opt) => {\n if (typeof opt === 'string') {\n return opt === value\n }\n return opt.value === value\n })\n\n if (option && typeof option === 'object') {\n return getTranslation(option.label, i18n)\n }\n return String(value)\n } else if (field.type === 'number') {\n return String(value)\n } else if (Array.isArray(value)) {\n // Handle arrays\n if (field.type === 'blocks') {\n return value.map((block: any) => `${block.blockType || 'Block'}`).join(', ')\n }\n return `[${value.length} items]`\n } else if (typeof value === 'object') {\n // Handle objects\n if (field.type === 'group') {\n return '{...}'\n }\n return JSON.stringify(value)\n }\n\n return String(value)\n }),\n })\n\n // For groups, add nested fields with parent label\n if (field.type === 'group' && 'fields' in field) {\n const groupLabel =\n 'label' in field && field.label ? getTranslation(field.label, i18n) : field.name\n\n const nestedCols = buildColumnsFromFields(\n field.fields,\n fieldPath,\n parentLabel ? `${parentLabel} > ${groupLabel}` : groupLabel,\n )\n cols.push(...nestedCols)\n }\n\n // For tabs, process the fields within\n if ('tabs' in field && Array.isArray(field.tabs)) {\n field.tabs.forEach((tab) => {\n if ('name' in tab && tab.name) {\n // Named tab\n const tabPath = parentPath ? `${parentPath}.${tab.name}` : tab.name\n const tabLabel =\n 'label' in tab && tab.label ? getTranslation(tab.label, i18n) : tab.name\n\n const tabCols = buildColumnsFromFields(\n tab.fields,\n tabPath,\n parentLabel ? `${parentLabel} > ${tabLabel}` : tabLabel,\n )\n cols.push(...tabCols)\n } else {\n // Unnamed tab - fields go directly under parent\n const tabLabel =\n 'label' in tab && tab.label ? getTranslation(tab.label, i18n) : ''\n\n const tabCols = buildColumnsFromFields(\n tab.fields,\n parentPath,\n tabLabel && typeof tabLabel === 'string' && parentLabel\n ? `${parentLabel} > ${tabLabel}`\n : typeof tabLabel === 'string'\n ? tabLabel\n : parentLabel,\n )\n cols.push(...tabCols)\n }\n })\n }\n })\n\n return cols\n }\n\n const fieldColumns = buildColumnsFromFields(collectionConfig.fields)\n\n const existingAccessors = new Set(fieldColumns.map((column) => column.accessor))\n\n // Discover all fields from document data to determine column order\n // Respect the order fields appear in the data (e.g., CSV column order)\n const dataFieldOrder: string[] = []\n const dataFieldsSet = new Set<string>()\n\n // Collect all fields from all docs to get comprehensive field list\n docs.forEach((doc) => {\n Object.keys(doc).forEach((key) => {\n if (!dataFieldsSet.has(key) && doc[key] !== undefined && doc[key] !== null) {\n dataFieldsSet.add(key)\n dataFieldOrder.push(key)\n }\n })\n })\n\n // Helper to create a column for a field\n const createColumnForField = (fieldName: string): Column => ({\n accessor: fieldName,\n active: true,\n field: { name: fieldName } as ClientField,\n Heading: getTranslation(fieldName, i18n),\n renderedCells: docs.map((doc) => {\n const value = doc[fieldName]\n if (value === undefined || value === null) {\n return null\n }\n\n return String(value)\n }),\n })\n\n // Build columns respecting data order for fields not in config\n // For fields in config, use their natural order from fieldColumns\n const finalColumns: Column[] = []\n const addedAccessors = new Set<string>()\n\n // Process fields in the order they appear in the data\n dataFieldOrder.forEach((fieldName) => {\n if (existingAccessors.has(fieldName)) {\n // This field is from the collection config\n const configColumn = fieldColumns.find((col) => col.accessor === fieldName)\n if (configColumn && !addedAccessors.has(fieldName)) {\n finalColumns.push(configColumn)\n addedAccessors.add(fieldName)\n }\n } else {\n // This is an additional field (system field or extra data field)\n if (!addedAccessors.has(fieldName)) {\n finalColumns.push(createColumnForField(fieldName))\n addedAccessors.add(fieldName)\n }\n }\n })\n\n // Add any remaining config fields that weren't in the data\n fieldColumns.forEach((col) => {\n if (!addedAccessors.has(col.accessor)) {\n finalColumns.push(col)\n addedAccessors.add(col.accessor)\n }\n })\n\n setColumns(finalColumns)\n setDataToRender(docs)\n } catch (err) {\n console.error('Error processing file data:', err)\n setError(err instanceof Error ? err.message : 'Failed to load preview')\n setDataToRender([])\n setColumns([])\n setTotalDocs(0)\n setPaginationData(null)\n }\n }\n\n startTransition(async () => await processFileData())\n\n return () => {\n if (!abortController.signal.aborted) {\n abortController.abort('Component unmounted')\n }\n }\n },\n [\n collectionSlug,\n targetCollectionSlug,\n url,\n filename,\n mimeType,\n fileField?.value,\n formStateSignature,\n getData,\n collectionConfig,\n config,\n i18n,\n previewLimit,\n previewPage,\n routes.api,\n ],\n 500,\n )\n\n // If import has been processed, show results instead of preview\n if (status !== 'pending' && summary) {\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n <h3>\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:importResults\" t={t} />\n </h3>\n </div>\n <div className={`${baseClass}__results`}>\n <p>\n <strong>Status:</strong> {status}\n </p>\n <p>\n <strong>Imported:</strong> {summary.imported || 0}\n </p>\n <p>\n <strong>Updated:</strong> {summary.updated || 0}\n </p>\n <p>\n <strong>Total:</strong> {summary.total || 0}\n </p>\n {summary.issues > 0 && (\n <p>\n <strong>Issues:</strong> {summary.issues}\n </p>\n )}\n {summary.issueDetails && summary.issueDetails.length > 0 && (\n <div style={{ marginTop: '1rem' }}>\n <strong>Issue Details:</strong>\n <ul style={{ marginTop: '0.5rem' }}>\n {summary.issueDetails.slice(0, 10).map((issue: any, index: number) => (\n <li key={index}>\n Row {issue.row}: {issue.error}\n </li>\n ))}\n {summary.issueDetails.length > 10 && (\n <li>... and {summary.issueDetails.length - 10} more issues</li>\n )}\n </ul>\n </div>\n )}\n </div>\n </div>\n )\n }\n\n if (!targetCollectionSlug) {\n return (\n <div className={baseClass}>\n <p style={{ opacity: 0.6 }}>\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:collectionRequired\" t={t} />\n </p>\n </div>\n )\n }\n\n if (error) {\n return (\n <div className={baseClass}>\n <p style={{ color: 'red' }}>\n <Translation i18nKey=\"general:error\" t={t} />: {error}\n </p>\n </div>\n )\n }\n\n if (!url && !fileField?.value) {\n return (\n <div className={baseClass}>\n <p style={{ opacity: 0.6 }}>\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:uploadFileToSeePreview\" t={t} />\n </p>\n </div>\n )\n }\n\n const handlePageChange = (page: number) => {\n setPreviewPage(page)\n }\n\n const handlePerPageChange = (newLimit: number) => {\n setPreviewLimit(newLimit)\n setPreviewPage(1)\n }\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n <h3>\n <Translation i18nKey=\"version:preview\" t={t} />\n </h3>\n {totalDocs > 0 && !isPending && (\n <div className={`${baseClass}__info`}>\n <span className={`${baseClass}__import-count`}>\n <Translation\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n i18nKey=\"plugin-import-export:documentsToImport\"\n t={t}\n variables={{\n count: totalDocs,\n }}\n />\n </span>\n {' | '}\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:mode\" t={t} />: {importMode || 'create'}\n {importMode !== 'create' && (\n <>\n {' | '}\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:matchBy\" t={t} />: {matchField || 'id'}\n </>\n )}\n </div>\n )}\n </div>\n {isPending && !dataToRender.length && (\n <div className={`${baseClass}__loading`}>\n <Translation i18nKey=\"general:loading\" t={t} />\n </div>\n )}\n {dataToRender.length > 0 && <Table columns={columns} data={dataToRender} />}\n {!isPending && dataToRender.length === 0 && targetCollectionSlug && (\n <p>\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:noDataToPreview\" t={t} />\n </p>\n )}\n {paginationData && totalDocs > 0 && (\n <div className={`${baseClass}__pagination`}>\n {paginationData.totalPages > 1 && (\n <Pagination\n hasNextPage={paginationData.hasNextPage}\n hasPrevPage={paginationData.hasPrevPage}\n nextPage={paginationData.nextPage ?? undefined}\n numberOfNeighbors={1}\n onChange={handlePageChange}\n page={paginationData.page}\n prevPage={paginationData.prevPage ?? undefined}\n totalPages={paginationData.totalPages}\n />\n )}\n <span className={`${baseClass}__page-info`}>\n <Translation\n // @ts-expect-error - plugin translations not typed\n i18nKey=\"plugin-import-export:previewPageInfo\"\n t={t}\n variables={{\n end: Math.min((paginationData.page ?? 1) * previewLimit, totalDocs),\n start: ((paginationData.page ?? 1) - 1) * previewLimit + 1,\n total: totalDocs,\n }}\n />\n </span>\n <PerPage\n handleChange={handlePerPageChange}\n limit={previewLimit}\n limits={PREVIEW_LIMIT_OPTIONS}\n />\n </div>\n )}\n </div>\n )\n}\n"],"names":["getTranslation","Pagination","PerPage","Table","Translation","useConfig","useDebouncedEffect","useDocumentInfo","useField","useForm","useFormFields","useTranslation","formatDocTitle","fieldAffectsData","getObjectDotNotation","React","useState","useTransition","DEFAULT_PREVIEW_LIMIT","PREVIEW_LIMIT_OPTIONS","getFormStateSignature","getSubmittedFormValues","RelationshipCell","baseClass","nonSerializableFormKeys","arrayBufferToBase64","arrayBuffer","bytes","Uint8Array","chunkSize","binary","i","length","String","fromCharCode","subarray","btoa","ImportPreview","isPending","startTransition","config","routes","collectionSlug","i18n","t","value","targetCollectionSlug","path","importMode","matchField","filename","url","mimeType","status","summary","fileField","fields","file","getData","formStateSignature","omit","dataToRender","setDataToRender","columns","setColumns","totalDocs","setTotalDocs","error","setError","previewPage","setPreviewPage","previewLimit","setPreviewLimit","paginationData","setPaginationData","collectionConfig","useMemo","collections","find","c","slug","abortController","AbortController","processFileData","format","File","type","name","endsWith","fileData","base64","response","fetch","signal","ok","Error","res","api","body","JSON","stringify","formData","credentials","headers","method","docs","hasNextPage","hasPrevPage","limit","responseLimit","page","responsePage","serverTotalDocs","totalPages","json","nextPage","prevPage","Array","isArray","buildColumnsFromFields","parentPath","parentLabel","cols","forEach","field","admin","disabled","fieldPath","label","hasData","some","doc","undefined","push","accessor","active","Heading","renderedCells","map","rowIndex","shouldRenderGroupedRelationship","relationTo","relatedConfig","useAsTitle","titleValue","data","dateFormat","id","labels","singular","item","join","option","options","opt","block","blockType","groupLabel","nestedCols","tabs","tab","tabPath","tabLabel","tabCols","fieldColumns","existingAccessors","Set","column","dataFieldOrder","dataFieldsSet","Object","keys","key","has","add","createColumnForField","fieldName","finalColumns","addedAccessors","configColumn","col","err","console","message","aborted","abort","div","className","h3","i18nKey","p","strong","imported","updated","total","issues","issueDetails","style","marginTop","ul","slice","issue","index","li","row","opacity","color","handlePageChange","handlePerPageChange","newLimit","span","variables","count","numberOfNeighbors","onChange","end","Math","min","start","handleChange","limits"],"mappings":"AAAA;;AAGA,SAASA,cAAc,QAAQ,2BAA0B;AACzD,SACEC,UAAU,EACVC,OAAO,EACPC,KAAK,EACLC,WAAW,EACXC,SAAS,EACTC,kBAAkB,EAClBC,eAAe,EACfC,QAAQ,EACRC,OAAO,EACPC,aAAa,EACbC,cAAc,QACT,iBAAgB;AACvB,SAASC,cAAc,QAAQ,wBAAuB;AACtD,SAASC,gBAAgB,EAAEC,oBAAoB,QAAQ,iBAAgB;AACvE,OAAOC,SAASC,QAAQ,EAAEC,aAAa,QAAQ,QAAO;AAQtD,SAASC,qBAAqB,EAAEC,qBAAqB,QAAQ,qBAAoB;AACjF,SACEC,qBAAqB,EACrBC,sBAAsB,QACjB,4CAA2C;AAClD,SAASC,gBAAgB,QAAQ,+BAA8B;AAC/D,OAAO,cAAa;AAEpB,MAAMC,YAAY;AAElB,uDAAuD;AACvD,MAAMC,0BAA0B;IAAC;CAAO;AAExC;;;;;CAKC,GACD,MAAMC,sBAAsB,CAACC;IAC3B,MAAMC,QAAQ,IAAIC,WAAWF;IAC7B,MAAMG,YAAY;IAClB,IAAIC,SAAS;IACb,IAAK,IAAIC,IAAI,GAAGA,IAAIJ,MAAMK,MAAM,EAAED,KAAKF,UAAW;QAChDC,UAAUG,OAAOC,YAAY,IAAIP,MAAMQ,QAAQ,CAACJ,GAAGA,IAAIF;IACzD;IACA,OAAOO,KAAKN;AACd;AAEA,OAAO,MAAMO,gBAA0B;IACrC,MAAM,CAACC,WAAWC,gBAAgB,GAAGtB;IACrC,MAAM,EACJuB,MAAM,EACNA,QAAQ,EAAEC,MAAM,EAAE,EACnB,GAAGpC;IACJ,MAAM,EAAEqC,cAAc,EAAE,GAAGnC;IAC3B,MAAM,EAAEoC,IAAI,EAAEC,CAAC,EAAE,GAAGjC;IAKpB,MAAM,EAAEkC,OAAOC,oBAAoB,EAAE,GAAGtC,SAAiB;QAAEuC,MAAM;IAAiB;IAClF,MAAM,EAAEF,OAAOG,UAAU,EAAE,GAAGxC,SAAiB;QAAEuC,MAAM;IAAa;IACpE,MAAM,EAAEF,OAAOI,UAAU,EAAE,GAAGzC,SAAiB;QAAEuC,MAAM;IAAa;IACpE,MAAM,EAAEF,OAAOK,QAAQ,EAAE,GAAG1C,SAAiB;QAAEuC,MAAM;IAAW;IAChE,MAAM,EAAEF,OAAOM,GAAG,EAAE,GAAG3C,SAAiB;QAAEuC,MAAM;IAAM;IACtD,MAAM,EAAEF,OAAOO,QAAQ,EAAE,GAAG5C,SAAiB;QAAEuC,MAAM;IAAW;IAChE,MAAM,EAAEF,OAAOQ,MAAM,EAAE,GAAG7C,SAAiB;QAAEuC,MAAM;IAAS;IAC5D,MAAM,EAAEF,OAAOS,OAAO,EAAE,GAAG9C,SAAc;QAAEuC,MAAM;IAAU;IAE3D,kDAAkD;IAClD,MAAMQ,YAAY7C,cAAc,CAAC,CAAC8C,OAAO,GAAKA,QAAQC,QAAQ;IAE9D,MAAM,EAAEC,OAAO,EAAE,GAAGjD;IACpB,MAAMkD,qBAAqBjD,cAAc,CAAC,CAAC8C,OAAO,GAChDpC,sBAAsB;YAAEoC;YAAQI,MAAMpC;QAAwB;IAGhE,MAAM,CAACqC,cAAcC,gBAAgB,GAAG9C,SAAoC,EAAE;IAC9E,MAAM,CAAC+C,SAASC,WAAW,GAAGhD,SAAmB,EAAE;IACnD,MAAM,CAACiD,WAAWC,aAAa,GAAGlD,SAAiB;IACnD,MAAM,CAACmD,OAAOC,SAAS,GAAGpD,SAAwB;IAElD,2BAA2B;IAC3B,MAAM,CAACqD,aAAaC,eAAe,GAAGtD,SAAS;IAC/C,MAAM,CAACuD,cAAcC,gBAAgB,GAAGxD,SAASE;IACjD,MAAM,CAACuD,gBAAgBC,kBAAkB,GAAG1D,SAGzC;IAEH,MAAM2D,mBAAmB5D,MAAM6D,OAAO,CACpC,IAAMpC,OAAOqC,WAAW,CAACC,IAAI,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAKlC,uBAChD;QAACA;QAAsBN,OAAOqC,WAAW;KAAC;IAG5CvE,mBACE;QACE,IAAI,CAACoC,kBAAkB,CAACI,sBAAsB;YAC5C;QACF;QAEA,IAAI,CAACA,wBAAyB,CAACK,OAAO,CAACI,WAAWV,OAAQ;YACxDiB,gBAAgB,EAAE;YAClBE,WAAW,EAAE;YACbE,aAAa;YACbQ,kBAAkB;YAClB;QACF;QAEA,IAAI,CAACC,kBAAkB;YACrBb,gBAAgB,EAAE;YAClBE,WAAW,EAAE;YACbE,aAAa;YACbQ,kBAAkB;YAClB;QACF;QAEA,MAAMO,kBAAkB,IAAIC;QAE5B,MAAMC,kBAAkB;YACtBf,SAAS;YAET,IAAI;gBACF,6BAA6B;gBAC7B,IAAIgB,SAAyB;gBAC7B,IAAI7B,WAAWV,SAASU,UAAUV,KAAK,YAAYwC,MAAM;oBACvD,MAAM5B,OAAOF,UAAUV,KAAK;oBAC5BuC,SAAS3B,KAAK6B,IAAI,KAAK,cAAc7B,KAAK8B,IAAI,EAAEC,SAAS,UAAU,QAAQ;gBAC7E,OAAO,IAAIpC,aAAa,cAAcF,UAAUsC,SAAS,SAAS;oBAChEJ,SAAS;gBACX;gBAEA,0BAA0B;gBAC1B,IAAIK;gBAEJ,IAAIlC,WAAWV,SAASU,UAAUV,KAAK,YAAYwC,MAAM;oBACvD,4CAA4C;oBAC5C,MAAM3D,cAAc,MAAM6B,UAAUV,KAAK,CAACnB,WAAW;oBACrD,MAAMgE,SAASjE,oBAAoBC;oBACnC+D,WAAWC;gBACb,OAAO,IAAIvC,KAAK;oBACd,sCAAsC;oBACtC,MAAMwC,WAAW,MAAMC,MAAMzC,KAAK;wBAAE0C,QAAQZ,gBAAgBY,MAAM;oBAAC;oBACnE,IAAI,CAACF,SAASG,EAAE,EAAE;wBAChB,MAAM,IAAIC,MAAM;oBAClB;oBACA,MAAMrE,cAAc,MAAMiE,SAASjE,WAAW;oBAC9C,MAAMgE,SAASjE,oBAAoBC;oBACnC+D,WAAWC;gBACb;gBAEA,IAAI,CAACD,UAAU;oBACb3B,gBAAgB,EAAE;oBAClBE,WAAW,EAAE;oBACbE,aAAa;oBACbQ,kBAAkB;oBAClB;gBACF;gBAEA,yCAAyC;gBACzC,MAAMsB,MAAM,MAAMJ,MAAM,GAAGnD,OAAOwD,GAAG,CAAC,CAAC,EAAEvD,eAAe,aAAa,CAAC,EAAE;oBACtEwD,MAAMC,KAAKC,SAAS,CAAC;wBACnB1D,gBAAgBI;wBAChB2C;wBACAL;wBACAiB,UAAUhF,uBAAuB;4BAC/BgF,UAAU3C;4BACVE,MAAMpC;wBACR;wBACA+C;wBACAF;oBACF;oBACAiC,aAAa;oBACbC,SAAS;wBAAE,gBAAgB;oBAAmB;oBAC9CC,QAAQ;oBACRX,QAAQZ,gBAAgBY,MAAM;gBAChC;gBAEA,IAAI,CAACG,IAAIF,EAAE,EAAE;oBACX,MAAM,IAAIC,MAAM;gBAClB;gBAEA,MAAM,EACJU,IAAI,EACJC,WAAW,EACXC,WAAW,EACXC,OAAOC,aAAa,EACpBC,MAAMC,YAAY,EAClB9C,WAAW+C,eAAe,EAC1BC,UAAU,EACX,GAA0B,MAAMjB,IAAIkB,IAAI;gBAEzChD,aAAa8C;gBACbtC,kBAAkB;oBAChBgC;oBACAC;oBACAC,OAAOC;oBACPM,UAAUJ,eAAe;oBACzBD,MAAMC;oBACNK,UAAUL,eAAe;oBACzBE;gBACF;gBAEA,IAAI,CAACI,MAAMC,OAAO,CAACb,SAASA,KAAKzE,MAAM,KAAK,GAAG;oBAC7C8B,gBAAgB,EAAE;oBAClBE,WAAW,EAAE;oBACb;gBACF;gBAEA,8DAA8D;gBAC9D,MAAMuD,yBAAyB,CAC7B/D,QACAgE,aAAa,EAAE,EACfC,cAAc,EAAE;oBAEhB,MAAMC,OAAiB,EAAE;oBAEzBlE,OAAOmE,OAAO,CAAC,CAACC;wBACd,IAAI,CAAC/G,iBAAiB+G,UAAUA,MAAMC,KAAK,EAAEC,UAAU;4BACrD;wBACF;wBAEA,uBAAuB;wBACvB,MAAMC,YAAYP,aAAa,GAAGA,WAAW,CAAC,EAAEI,MAAMrC,IAAI,EAAE,GAAGqC,MAAMrC,IAAI;wBAEzE,sBAAsB;wBACtB,IAAIyC,QAAQJ,MAAMrC,IAAI;wBACtB,IAAI,WAAWqC,SAASA,MAAMI,KAAK,EAAE;4BACnCA,QAAQhI,eAAe4H,MAAMI,KAAK,EAAErF;wBACtC;wBAEA,wCAAwC;wBACxC,IAAI8E,aAAa;4BACfO,QAAQ,GAAGP,YAAY,GAAG,EAAEO,OAAO;wBACrC;wBAEA,mDAAmD;wBACnD,MAAMC,UAAUxB,KAAKyB,IAAI,CAAC,CAACC;4BACzB,MAAMtF,QAAQ/B,qBAAqBqH,KAAKJ;4BACxC,OAAOlF,UAAUuF,aAAavF,UAAU;wBAC1C;wBAEA,IAAI,CAACoF,WAAWL,MAAMtC,IAAI,KAAK,gBAAgB;4BAC7C;wBACF;wBAEAoC,KAAKW,IAAI,CAAC;4BACRC,UAAUP;4BACVQ,QAAQ;4BACRX;4BACAY,SAASR;4BACTS,eAAehC,KAAKiC,GAAG,CAAC,CAACP,KAAKQ;gCAC5B,MAAM9F,QAAQ/B,qBAAqBqH,KAAKJ;gCAExC,IAAIlF,UAAUuF,aAAavF,UAAU,MAAM;oCACzC,OAAO;gCACT;gCAEA,6BAA6B;gCAC7B,MAAM+F,kCACJxD,WAAW,UACXwC,MAAMtC,IAAI,KAAK,kBACf+B,MAAMC,OAAO,CAACM,MAAMiB,UAAU;gCAEhC,IAAID,iCAAiC;oCACnC,qBACE,KAACtH;wCACCyG,WAAWA;wCAEXc,YAAYjB,MAAMiB,UAAU;wCAC5BhG,OAAOA;uCAFF,GAAGkF,UAAU,CAAC,EAAEY,UAAU;gCAKrC,OAAO,IAAIf,MAAMtC,IAAI,KAAK,kBAAkBsC,MAAMtC,IAAI,KAAK,UAAU;oCACnE,IAAI,OAAOzC,UAAU,YAAY,CAACwE,MAAMC,OAAO,CAACzE,QAAQ;wCACtD,MAAMgG,aAAaxB,MAAMC,OAAO,CAACM,MAAMiB,UAAU,IAC7C,AAAChG,MAAcgG,UAAU,GACzBjB,MAAMiB,UAAU;wCAEpB,MAAMC,gBAAgBtG,OAAOqC,WAAW,CAACC,IAAI,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAK6D;wCAChE,IAAIC,iBAAiBA,cAAcjB,KAAK,EAAEkB,YAAY;4CACpD,MAAMC,aAAa,AAACnG,KAAa,CAACiG,cAAcjB,KAAK,CAACkB,UAAU,CAAC;4CACjE,IAAIC,YAAY;gDACd,OAAOpI,eAAe;oDACpB+D,kBAAkBmE;oDAClBG,MAAMpG;oDACNqG,YAAY1G,OAAOqF,KAAK,CAACqB,UAAU;oDACnCvG;gDACF;4CACF;wCACF;wCAEA,MAAMwG,KAAK,AAACtG,MAAcsG,EAAE,IAAItG;wCAChC,OAAO,GAAG7C,eAAe8I,eAAeM,QAAQC,YAAYR,YAAYlG,MAAM,EAAE,EAAEwG,IAAI;oCACxF,OAAO,IAAI9B,MAAMC,OAAO,CAACzE,QAAQ;wCAC/B,OAAOA,MACJ6F,GAAG,CAAC,CAACY;4CACJ,IAAI,OAAOA,SAAS,UAAU;gDAC5B,MAAMT,aAAaxB,MAAMC,OAAO,CAACM,MAAMiB,UAAU,IAC7CS,KAAKT,UAAU,GACfjB,MAAMiB,UAAU;gDACpB,MAAMC,gBAAgBtG,OAAOqC,WAAW,CAACC,IAAI,CAC3C,CAACC,IAAMA,EAAEC,IAAI,KAAK6D;gDAGpB,IAAIC,iBAAiBA,cAAcjB,KAAK,EAAEkB,YAAY;oDACpD,MAAMC,aAAaM,IAAI,CAACR,cAAcjB,KAAK,CAACkB,UAAU,CAAC;oDACvD,IAAIC,YAAY;wDACd,OAAOpI,eAAe;4DACpB+D,kBAAkBmE;4DAClBG,MAAMK;4DACNJ,YAAY1G,OAAOqF,KAAK,CAACqB,UAAU;4DACnCvG;wDACF;oDACF;gDACF;gDAEA,OAAO2G,KAAKH,EAAE,IAAIG;4CACpB;4CACA,OAAOA;wCACT,GACCC,IAAI,CAAC;oCACV;oCAEA,OAAOtH,OAAOY;gCAChB,OAAO,IAAI+E,MAAMtC,IAAI,KAAK,QAAQ;oCAChC,mEAAmE;oCACnE,OAAOrD,OAAOY;gCAChB,OAAO,IAAI+E,MAAMtC,IAAI,KAAK,YAAY;oCACpC,OAAOzC,QAAQ,MAAM;gCACvB,OAAO,IAAI+E,MAAMtC,IAAI,KAAK,YAAYsC,MAAMtC,IAAI,KAAK,SAAS;oCAC5D,0CAA0C;oCAC1C,MAAMkE,SAAS5B,MAAM6B,OAAO,EAAE3E,KAAK,CAAC4E;wCAClC,IAAI,OAAOA,QAAQ,UAAU;4CAC3B,OAAOA,QAAQ7G;wCACjB;wCACA,OAAO6G,IAAI7G,KAAK,KAAKA;oCACvB;oCAEA,IAAI2G,UAAU,OAAOA,WAAW,UAAU;wCACxC,OAAOxJ,eAAewJ,OAAOxB,KAAK,EAAErF;oCACtC;oCACA,OAAOV,OAAOY;gCAChB,OAAO,IAAI+E,MAAMtC,IAAI,KAAK,UAAU;oCAClC,OAAOrD,OAAOY;gCAChB,OAAO,IAAIwE,MAAMC,OAAO,CAACzE,QAAQ;oCAC/B,gBAAgB;oCAChB,IAAI+E,MAAMtC,IAAI,KAAK,UAAU;wCAC3B,OAAOzC,MAAM6F,GAAG,CAAC,CAACiB,QAAe,GAAGA,MAAMC,SAAS,IAAI,SAAS,EAAEL,IAAI,CAAC;oCACzE;oCACA,OAAO,CAAC,CAAC,EAAE1G,MAAMb,MAAM,CAAC,OAAO,CAAC;gCAClC,OAAO,IAAI,OAAOa,UAAU,UAAU;oCACpC,iBAAiB;oCACjB,IAAI+E,MAAMtC,IAAI,KAAK,SAAS;wCAC1B,OAAO;oCACT;oCACA,OAAOa,KAAKC,SAAS,CAACvD;gCACxB;gCAEA,OAAOZ,OAAOY;4BAChB;wBACF;wBAEA,kDAAkD;wBAClD,IAAI+E,MAAMtC,IAAI,KAAK,WAAW,YAAYsC,OAAO;4BAC/C,MAAMiC,aACJ,WAAWjC,SAASA,MAAMI,KAAK,GAAGhI,eAAe4H,MAAMI,KAAK,EAAErF,QAAQiF,MAAMrC,IAAI;4BAElF,MAAMuE,aAAavC,uBACjBK,MAAMpE,MAAM,EACZuE,WACAN,cAAc,GAAGA,YAAY,GAAG,EAAEoC,YAAY,GAAGA;4BAEnDnC,KAAKW,IAAI,IAAIyB;wBACf;wBAEA,sCAAsC;wBACtC,IAAI,UAAUlC,SAASP,MAAMC,OAAO,CAACM,MAAMmC,IAAI,GAAG;4BAChDnC,MAAMmC,IAAI,CAACpC,OAAO,CAAC,CAACqC;gCAClB,IAAI,UAAUA,OAAOA,IAAIzE,IAAI,EAAE;oCAC7B,YAAY;oCACZ,MAAM0E,UAAUzC,aAAa,GAAGA,WAAW,CAAC,EAAEwC,IAAIzE,IAAI,EAAE,GAAGyE,IAAIzE,IAAI;oCACnE,MAAM2E,WACJ,WAAWF,OAAOA,IAAIhC,KAAK,GAAGhI,eAAegK,IAAIhC,KAAK,EAAErF,QAAQqH,IAAIzE,IAAI;oCAE1E,MAAM4E,UAAU5C,uBACdyC,IAAIxG,MAAM,EACVyG,SACAxC,cAAc,GAAGA,YAAY,GAAG,EAAEyC,UAAU,GAAGA;oCAEjDxC,KAAKW,IAAI,IAAI8B;gCACf,OAAO;oCACL,gDAAgD;oCAChD,MAAMD,WACJ,WAAWF,OAAOA,IAAIhC,KAAK,GAAGhI,eAAegK,IAAIhC,KAAK,EAAErF,QAAQ;oCAElE,MAAMwH,UAAU5C,uBACdyC,IAAIxG,MAAM,EACVgE,YACA0C,YAAY,OAAOA,aAAa,YAAYzC,cACxC,GAAGA,YAAY,GAAG,EAAEyC,UAAU,GAC9B,OAAOA,aAAa,WAClBA,WACAzC;oCAERC,KAAKW,IAAI,IAAI8B;gCACf;4BACF;wBACF;oBACF;oBAEA,OAAOzC;gBACT;gBAEA,MAAM0C,eAAe7C,uBAAuB5C,iBAAiBnB,MAAM;gBAEnE,MAAM6G,oBAAoB,IAAIC,IAAIF,aAAa1B,GAAG,CAAC,CAAC6B,SAAWA,OAAOjC,QAAQ;gBAE9E,mEAAmE;gBACnE,uEAAuE;gBACvE,MAAMkC,iBAA2B,EAAE;gBACnC,MAAMC,gBAAgB,IAAIH;gBAE1B,mEAAmE;gBACnE7D,KAAKkB,OAAO,CAAC,CAACQ;oBACZuC,OAAOC,IAAI,CAACxC,KAAKR,OAAO,CAAC,CAACiD;wBACxB,IAAI,CAACH,cAAcI,GAAG,CAACD,QAAQzC,GAAG,CAACyC,IAAI,KAAKxC,aAAaD,GAAG,CAACyC,IAAI,KAAK,MAAM;4BAC1EH,cAAcK,GAAG,CAACF;4BAClBJ,eAAenC,IAAI,CAACuC;wBACtB;oBACF;gBACF;gBAEA,wCAAwC;gBACxC,MAAMG,uBAAuB,CAACC,YAA+B,CAAA;wBAC3D1C,UAAU0C;wBACVzC,QAAQ;wBACRX,OAAO;4BAAErC,MAAMyF;wBAAU;wBACzBxC,SAASxI,eAAegL,WAAWrI;wBACnC8F,eAAehC,KAAKiC,GAAG,CAAC,CAACP;4BACvB,MAAMtF,QAAQsF,GAAG,CAAC6C,UAAU;4BAC5B,IAAInI,UAAUuF,aAAavF,UAAU,MAAM;gCACzC,OAAO;4BACT;4BAEA,OAAOZ,OAAOY;wBAChB;oBACF,CAAA;gBAEA,+DAA+D;gBAC/D,kEAAkE;gBAClE,MAAMoI,eAAyB,EAAE;gBACjC,MAAMC,iBAAiB,IAAIZ;gBAE3B,sDAAsD;gBACtDE,eAAe7C,OAAO,CAAC,CAACqD;oBACtB,IAAIX,kBAAkBQ,GAAG,CAACG,YAAY;wBACpC,2CAA2C;wBAC3C,MAAMG,eAAef,aAAatF,IAAI,CAAC,CAACsG,MAAQA,IAAI9C,QAAQ,KAAK0C;wBACjE,IAAIG,gBAAgB,CAACD,eAAeL,GAAG,CAACG,YAAY;4BAClDC,aAAa5C,IAAI,CAAC8C;4BAClBD,eAAeJ,GAAG,CAACE;wBACrB;oBACF,OAAO;wBACL,iEAAiE;wBACjE,IAAI,CAACE,eAAeL,GAAG,CAACG,YAAY;4BAClCC,aAAa5C,IAAI,CAAC0C,qBAAqBC;4BACvCE,eAAeJ,GAAG,CAACE;wBACrB;oBACF;gBACF;gBAEA,2DAA2D;gBAC3DZ,aAAazC,OAAO,CAAC,CAACyD;oBACpB,IAAI,CAACF,eAAeL,GAAG,CAACO,IAAI9C,QAAQ,GAAG;wBACrC2C,aAAa5C,IAAI,CAAC+C;wBAClBF,eAAeJ,GAAG,CAACM,IAAI9C,QAAQ;oBACjC;gBACF;gBAEAtE,WAAWiH;gBACXnH,gBAAgB2C;YAClB,EAAE,OAAO4E,KAAK;gBACZC,QAAQnH,KAAK,CAAC,+BAA+BkH;gBAC7CjH,SAASiH,eAAetF,QAAQsF,IAAIE,OAAO,GAAG;gBAC9CzH,gBAAgB,EAAE;gBAClBE,WAAW,EAAE;gBACbE,aAAa;gBACbQ,kBAAkB;YACpB;QACF;QAEAnC,gBAAgB,UAAY,MAAM4C;QAElC,OAAO;YACL,IAAI,CAACF,gBAAgBY,MAAM,CAAC2F,OAAO,EAAE;gBACnCvG,gBAAgBwG,KAAK,CAAC;YACxB;QACF;IACF,GACA;QACE/I;QACAI;QACAK;QACAD;QACAE;QACAG,WAAWV;QACXc;QACAD;QACAiB;QACAnC;QACAG;QACA4B;QACAF;QACA5B,OAAOwD,GAAG;KACX,EACD;IAGF,gEAAgE;IAChE,IAAI5C,WAAW,aAAaC,SAAS;QACnC,qBACE,MAACoI;YAAIC,WAAWpK;;8BACd,KAACmK;oBAAIC,WAAW,GAAGpK,UAAU,QAAQ,CAAC;8BACpC,cAAA,KAACqK;kCAEC,cAAA,KAACxL;4BAAYyL,SAAQ;4BAAqCjJ,GAAGA;;;;8BAGjE,MAAC8I;oBAAIC,WAAW,GAAGpK,UAAU,SAAS,CAAC;;sCACrC,MAACuK;;8CACC,KAACC;8CAAO;;gCAAgB;gCAAE1I;;;sCAE5B,MAACyI;;8CACC,KAACC;8CAAO;;gCAAkB;gCAAEzI,QAAQ0I,QAAQ,IAAI;;;sCAElD,MAACF;;8CACC,KAACC;8CAAO;;gCAAiB;gCAAEzI,QAAQ2I,OAAO,IAAI;;;sCAEhD,MAACH;;8CACC,KAACC;8CAAO;;gCAAe;gCAAEzI,QAAQ4I,KAAK,IAAI;;;wBAE3C5I,QAAQ6I,MAAM,GAAG,mBAChB,MAACL;;8CACC,KAACC;8CAAO;;gCAAgB;gCAAEzI,QAAQ6I,MAAM;;;wBAG3C7I,QAAQ8I,YAAY,IAAI9I,QAAQ8I,YAAY,CAACpK,MAAM,GAAG,mBACrD,MAAC0J;4BAAIW,OAAO;gCAAEC,WAAW;4BAAO;;8CAC9B,KAACP;8CAAO;;8CACR,MAACQ;oCAAGF,OAAO;wCAAEC,WAAW;oCAAS;;wCAC9BhJ,QAAQ8I,YAAY,CAACI,KAAK,CAAC,GAAG,IAAI9D,GAAG,CAAC,CAAC+D,OAAYC,sBAClD,MAACC;;oDAAe;oDACTF,MAAMG,GAAG;oDAAC;oDAAGH,MAAMtI,KAAK;;+CADtBuI;wCAIVpJ,QAAQ8I,YAAY,CAACpK,MAAM,GAAG,oBAC7B,MAAC2K;;gDAAG;gDAASrJ,QAAQ8I,YAAY,CAACpK,MAAM,GAAG;gDAAG;;;;;;;;;;;IAQ9D;IAEA,IAAI,CAACc,sBAAsB;QACzB,qBACE,KAAC4I;YAAIC,WAAWpK;sBACd,cAAA,KAACuK;gBAAEO,OAAO;oBAAEQ,SAAS;gBAAI;0BAEvB,cAAA,KAACzM;oBAAYyL,SAAQ;oBAA0CjJ,GAAGA;;;;IAI1E;IAEA,IAAIuB,OAAO;QACT,qBACE,KAACuH;YAAIC,WAAWpK;sBACd,cAAA,MAACuK;gBAAEO,OAAO;oBAAES,OAAO;gBAAM;;kCACvB,KAAC1M;wBAAYyL,SAAQ;wBAAgBjJ,GAAGA;;oBAAK;oBAAGuB;;;;IAIxD;IAEA,IAAI,CAAChB,OAAO,CAACI,WAAWV,OAAO;QAC7B,qBACE,KAAC6I;YAAIC,WAAWpK;sBACd,cAAA,KAACuK;gBAAEO,OAAO;oBAAEQ,SAAS;gBAAI;0BAEvB,cAAA,KAACzM;oBAAYyL,SAAQ;oBAA8CjJ,GAAGA;;;;IAI9E;IAEA,MAAMmK,mBAAmB,CAACjG;QACxBxC,eAAewC;IACjB;IAEA,MAAMkG,sBAAsB,CAACC;QAC3BzI,gBAAgByI;QAChB3I,eAAe;IACjB;IAEA,qBACE,MAACoH;QAAIC,WAAWpK;;0BACd,MAACmK;gBAAIC,WAAW,GAAGpK,UAAU,QAAQ,CAAC;;kCACpC,KAACqK;kCACC,cAAA,KAACxL;4BAAYyL,SAAQ;4BAAkBjJ,GAAGA;;;oBAE3CqB,YAAY,KAAK,CAAC3B,2BACjB,MAACoJ;wBAAIC,WAAW,GAAGpK,UAAU,MAAM,CAAC;;0CAClC,KAAC2L;gCAAKvB,WAAW,GAAGpK,UAAU,cAAc,CAAC;0CAC3C,cAAA,KAACnB;oCACC,6DAA6D;oCAC7D,mBAAmB;oCACnByL,SAAQ;oCACRjJ,GAAGA;oCACHuK,WAAW;wCACTC,OAAOnJ;oCACT;;;4BAGH;0CAED,KAAC7D;gCAAYyL,SAAQ;gCAA4BjJ,GAAGA;;4BAAK;4BAAGI,cAAc;4BACzEA,eAAe,0BACd;;oCACG;kDAED,KAAC5C;wCAAYyL,SAAQ;wCAA+BjJ,GAAGA;;oCAAK;oCAAGK,cAAc;;;;;;;YAMtFX,aAAa,CAACuB,aAAa7B,MAAM,kBAChC,KAAC0J;gBAAIC,WAAW,GAAGpK,UAAU,SAAS,CAAC;0BACrC,cAAA,KAACnB;oBAAYyL,SAAQ;oBAAkBjJ,GAAGA;;;YAG7CiB,aAAa7B,MAAM,GAAG,mBAAK,KAAC7B;gBAAM4D,SAASA;gBAASkF,MAAMpF;;YAC1D,CAACvB,aAAauB,aAAa7B,MAAM,KAAK,KAAKc,sCAC1C,KAACgJ;0BAEC,cAAA,KAAC1L;oBAAYyL,SAAQ;oBAAuCjJ,GAAGA;;;YAGlE6B,kBAAkBR,YAAY,mBAC7B,MAACyH;gBAAIC,WAAW,GAAGpK,UAAU,YAAY,CAAC;;oBACvCkD,eAAewC,UAAU,GAAG,mBAC3B,KAAChH;wBACCyG,aAAajC,eAAeiC,WAAW;wBACvCC,aAAalC,eAAekC,WAAW;wBACvCQ,UAAU1C,eAAe0C,QAAQ,IAAIiB;wBACrCiF,mBAAmB;wBACnBC,UAAUP;wBACVjG,MAAMrC,eAAeqC,IAAI;wBACzBM,UAAU3C,eAAe2C,QAAQ,IAAIgB;wBACrCnB,YAAYxC,eAAewC,UAAU;;kCAGzC,KAACiG;wBAAKvB,WAAW,GAAGpK,UAAU,WAAW,CAAC;kCACxC,cAAA,KAACnB;4BACC,mDAAmD;4BACnDyL,SAAQ;4BACRjJ,GAAGA;4BACHuK,WAAW;gCACTI,KAAKC,KAAKC,GAAG,CAAC,AAAChJ,CAAAA,eAAeqC,IAAI,IAAI,CAAA,IAAKvC,cAAcN;gCACzDyJ,OAAO,AAAC,CAAA,AAACjJ,CAAAA,eAAeqC,IAAI,IAAI,CAAA,IAAK,CAAA,IAAKvC,eAAe;gCACzD2H,OAAOjI;4BACT;;;kCAGJ,KAAC/D;wBACCyN,cAAcX;wBACdpG,OAAOrC;wBACPqJ,QAAQzM;;;;;;AAMpB,EAAC"}
@@ -1,3 +1,4 @@
1
- import type { NumberFieldClientComponent } from 'payload';
2
- export declare const LimitField: NumberFieldClientComponent;
1
+ import type { NumberFieldClientProps } from 'payload';
2
+ import React from 'react';
3
+ export declare const LimitField: React.FC<NumberFieldClientProps>;
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/LimitField/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAA;AAKzD,eAAO,MAAM,UAAU,EAAE,0BA6BxB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/LimitField/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAGrD,OAAO,KAA4B,MAAM,OAAO,CAAA;AAEhD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CA6BvD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/LimitField/index.tsx"],"sourcesContent":["'use client'\n\nimport type { NumberFieldClientComponent } from 'payload'\n\nimport { NumberField, useDocumentInfo, useField, useListQuery } from '@payloadcms/ui'\nimport React, { useEffect, useRef } from 'react'\n\nexport const LimitField: NumberFieldClientComponent = (props) => {\n const { id } = useDocumentInfo()\n const { setValue, value } = useField<number>()\n const { query } = useListQuery()\n\n const didInitRef = useRef(false)\n\n useEffect(() => {\n if (didInitRef.current) {\n return\n }\n if (id) {\n didInitRef.current = true\n return\n }\n if (typeof value === 'number') {\n didInitRef.current = true\n return\n }\n\n const queryLimit = query?.limit\n if (typeof queryLimit === 'number' && queryLimit > 0) {\n setValue(queryLimit)\n }\n\n didInitRef.current = true\n }, [id, query?.limit, value, setValue])\n\n return <NumberField field={props.field} path={props.path} />\n}\n"],"names":["NumberField","useDocumentInfo","useField","useListQuery","React","useEffect","useRef","LimitField","props","id","setValue","value","query","didInitRef","current","queryLimit","limit","field","path"],"mappings":"AAAA;;AAIA,SAASA,WAAW,EAAEC,eAAe,EAAEC,QAAQ,EAAEC,YAAY,QAAQ,iBAAgB;AACrF,OAAOC,SAASC,SAAS,EAAEC,MAAM,QAAQ,QAAO;AAEhD,OAAO,MAAMC,aAAyC,CAACC;IACrD,MAAM,EAAEC,EAAE,EAAE,GAAGR;IACf,MAAM,EAAES,QAAQ,EAAEC,KAAK,EAAE,GAAGT;IAC5B,MAAM,EAAEU,KAAK,EAAE,GAAGT;IAElB,MAAMU,aAAaP,OAAO;IAE1BD,UAAU;QACR,IAAIQ,WAAWC,OAAO,EAAE;YACtB;QACF;QACA,IAAIL,IAAI;YACNI,WAAWC,OAAO,GAAG;YACrB;QACF;QACA,IAAI,OAAOH,UAAU,UAAU;YAC7BE,WAAWC,OAAO,GAAG;YACrB;QACF;QAEA,MAAMC,aAAaH,OAAOI;QAC1B,IAAI,OAAOD,eAAe,YAAYA,aAAa,GAAG;YACpDL,SAASK;QACX;QAEAF,WAAWC,OAAO,GAAG;IACvB,GAAG;QAACL;QAAIG,OAAOI;QAAOL;QAAOD;KAAS;IAEtC,qBAAO,KAACV;QAAYiB,OAAOT,MAAMS,KAAK;QAAEC,MAAMV,MAAMU,IAAI;;AAC1D,EAAC"}
1
+ {"version":3,"sources":["../../../src/components/LimitField/index.tsx"],"sourcesContent":["'use client'\n\nimport type { NumberFieldClientProps } from 'payload'\n\nimport { NumberField, useDocumentInfo, useField, useListQuery } from '@payloadcms/ui'\nimport React, { useEffect, useRef } from 'react'\n\nexport const LimitField: React.FC<NumberFieldClientProps> = (props) => {\n const { id } = useDocumentInfo()\n const { setValue, value } = useField<number>()\n const { query } = useListQuery()\n\n const didInitRef = useRef(false)\n\n useEffect(() => {\n if (didInitRef.current) {\n return\n }\n if (id) {\n didInitRef.current = true\n return\n }\n if (typeof value === 'number') {\n didInitRef.current = true\n return\n }\n\n const queryLimit = query?.limit\n if (typeof queryLimit === 'number' && queryLimit > 0) {\n setValue(queryLimit)\n }\n\n didInitRef.current = true\n }, [id, query?.limit, value, setValue])\n\n return <NumberField field={props.field} path={props.path} />\n}\n"],"names":["NumberField","useDocumentInfo","useField","useListQuery","React","useEffect","useRef","LimitField","props","id","setValue","value","query","didInitRef","current","queryLimit","limit","field","path"],"mappings":"AAAA;;AAIA,SAASA,WAAW,EAAEC,eAAe,EAAEC,QAAQ,EAAEC,YAAY,QAAQ,iBAAgB;AACrF,OAAOC,SAASC,SAAS,EAAEC,MAAM,QAAQ,QAAO;AAEhD,OAAO,MAAMC,aAA+C,CAACC;IAC3D,MAAM,EAAEC,EAAE,EAAE,GAAGR;IACf,MAAM,EAAES,QAAQ,EAAEC,KAAK,EAAE,GAAGT;IAC5B,MAAM,EAAEU,KAAK,EAAE,GAAGT;IAElB,MAAMU,aAAaP,OAAO;IAE1BD,UAAU;QACR,IAAIQ,WAAWC,OAAO,EAAE;YACtB;QACF;QACA,IAAIL,IAAI;YACNI,WAAWC,OAAO,GAAG;YACrB;QACF;QACA,IAAI,OAAOH,UAAU,UAAU;YAC7BE,WAAWC,OAAO,GAAG;YACrB;QACF;QAEA,MAAMC,aAAaH,OAAOI;QAC1B,IAAI,OAAOD,eAAe,YAAYA,aAAa,GAAG;YACpDL,SAASK;QACX;QAEAF,WAAWC,OAAO,GAAG;IACvB,GAAG;QAACL;QAAIG,OAAOI;QAAOL;QAAOD;KAAS;IAEtC,qBAAO,KAACV;QAAYiB,OAAOT,MAAMS,KAAK;QAAEC,MAAMV,MAAMU,IAAI;;AAC1D,EAAC"}
@@ -1,3 +1,4 @@
1
- import type { SelectFieldClientComponent } from 'payload';
2
- export declare const LocaleField: SelectFieldClientComponent;
1
+ import type { SelectFieldClientProps } from 'payload';
2
+ import React from 'react';
3
+ export declare const LocaleField: React.FC<SelectFieldClientProps>;
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/LocaleField/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAA;AAKzD,eAAO,MAAM,WAAW,EAAE,0BA4BzB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/LocaleField/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAGrD,OAAO,KAA4B,MAAM,OAAO,CAAA;AAEhD,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CA4BxD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/LocaleField/index.tsx"],"sourcesContent":["'use client'\n\nimport type { SelectFieldClientComponent } from 'payload'\n\nimport { SelectField, useDocumentInfo, useField, useLocale } from '@payloadcms/ui'\nimport React, { useEffect, useRef } from 'react'\n\nexport const LocaleField: SelectFieldClientComponent = (props) => {\n const { id } = useDocumentInfo()\n const { setValue, value } = useField<string>()\n const locale = useLocale()\n\n const didInitRef = useRef(false)\n\n useEffect(() => {\n if (didInitRef.current) {\n return\n }\n if (id) {\n didInitRef.current = true\n return\n }\n if (typeof value === 'string' && value !== 'all') {\n didInitRef.current = true\n return\n }\n\n if (locale?.code) {\n setValue(locale.code)\n }\n\n didInitRef.current = true\n }, [id, locale?.code, value, setValue])\n\n return <SelectField field={props.field} path={props.path} />\n}\n"],"names":["SelectField","useDocumentInfo","useField","useLocale","React","useEffect","useRef","LocaleField","props","id","setValue","value","locale","didInitRef","current","code","field","path"],"mappings":"AAAA;;AAIA,SAASA,WAAW,EAAEC,eAAe,EAAEC,QAAQ,EAAEC,SAAS,QAAQ,iBAAgB;AAClF,OAAOC,SAASC,SAAS,EAAEC,MAAM,QAAQ,QAAO;AAEhD,OAAO,MAAMC,cAA0C,CAACC;IACtD,MAAM,EAAEC,EAAE,EAAE,GAAGR;IACf,MAAM,EAAES,QAAQ,EAAEC,KAAK,EAAE,GAAGT;IAC5B,MAAMU,SAAST;IAEf,MAAMU,aAAaP,OAAO;IAE1BD,UAAU;QACR,IAAIQ,WAAWC,OAAO,EAAE;YACtB;QACF;QACA,IAAIL,IAAI;YACNI,WAAWC,OAAO,GAAG;YACrB;QACF;QACA,IAAI,OAAOH,UAAU,YAAYA,UAAU,OAAO;YAChDE,WAAWC,OAAO,GAAG;YACrB;QACF;QAEA,IAAIF,QAAQG,MAAM;YAChBL,SAASE,OAAOG,IAAI;QACtB;QAEAF,WAAWC,OAAO,GAAG;IACvB,GAAG;QAACL;QAAIG,QAAQG;QAAMJ;QAAOD;KAAS;IAEtC,qBAAO,KAACV;QAAYgB,OAAOR,MAAMQ,KAAK;QAAEC,MAAMT,MAAMS,IAAI;;AAC1D,EAAC"}
1
+ {"version":3,"sources":["../../../src/components/LocaleField/index.tsx"],"sourcesContent":["'use client'\n\nimport type { SelectFieldClientProps } from 'payload'\n\nimport { SelectField, useDocumentInfo, useField, useLocale } from '@payloadcms/ui'\nimport React, { useEffect, useRef } from 'react'\n\nexport const LocaleField: React.FC<SelectFieldClientProps> = (props) => {\n const { id } = useDocumentInfo()\n const { setValue, value } = useField<string>()\n const locale = useLocale()\n\n const didInitRef = useRef(false)\n\n useEffect(() => {\n if (didInitRef.current) {\n return\n }\n if (id) {\n didInitRef.current = true\n return\n }\n if (typeof value === 'string' && value !== 'all') {\n didInitRef.current = true\n return\n }\n\n if (locale?.code) {\n setValue(locale.code)\n }\n\n didInitRef.current = true\n }, [id, locale?.code, value, setValue])\n\n return <SelectField field={props.field} path={props.path} />\n}\n"],"names":["SelectField","useDocumentInfo","useField","useLocale","React","useEffect","useRef","LocaleField","props","id","setValue","value","locale","didInitRef","current","code","field","path"],"mappings":"AAAA;;AAIA,SAASA,WAAW,EAAEC,eAAe,EAAEC,QAAQ,EAAEC,SAAS,QAAQ,iBAAgB;AAClF,OAAOC,SAASC,SAAS,EAAEC,MAAM,QAAQ,QAAO;AAEhD,OAAO,MAAMC,cAAgD,CAACC;IAC5D,MAAM,EAAEC,EAAE,EAAE,GAAGR;IACf,MAAM,EAAES,QAAQ,EAAEC,KAAK,EAAE,GAAGT;IAC5B,MAAMU,SAAST;IAEf,MAAMU,aAAaP,OAAO;IAE1BD,UAAU;QACR,IAAIQ,WAAWC,OAAO,EAAE;YACtB;QACF;QACA,IAAIL,IAAI;YACNI,WAAWC,OAAO,GAAG;YACrB;QACF;QACA,IAAI,OAAOH,UAAU,YAAYA,UAAU,OAAO;YAChDE,WAAWC,OAAO,GAAG;YACrB;QACF;QAEA,IAAIF,QAAQG,MAAM;YAChBL,SAASE,OAAOG,IAAI;QACtB;QAEAF,WAAWC,OAAO,GAAG;IACvB,GAAG;QAACL;QAAIG,QAAQG;QAAMJ;QAAOD;KAAS;IAEtC,qBAAO,KAACV;QAAYgB,OAAOR,MAAMQ,KAAK;QAAEC,MAAMT,MAAMS,IAAI;;AAC1D,EAAC"}
@@ -1,4 +1,5 @@
1
- import type { NumberFieldClientComponent } from 'payload';
2
- import './index.scss';
3
- export declare const Page: NumberFieldClientComponent;
1
+ import type { NumberFieldClientProps } from 'payload';
2
+ import React from 'react';
3
+ import './index.css';
4
+ export declare const Page: React.FC<NumberFieldClientProps>;
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Page/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAA;AAKzD,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,IAAI,EAAE,0BA6BlB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Page/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAGrD,OAAO,KAAoB,MAAM,OAAO,CAAA;AAExC,OAAO,aAAa,CAAA;AAIpB,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CA6BjD,CAAA"}
@@ -2,7 +2,7 @@
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { NumberField, useField } from '@payloadcms/ui';
4
4
  import React, { useEffect } from 'react';
5
- import './index.scss';
5
+ import './index.css';
6
6
  const baseClass = 'page-field';
7
7
  export const Page = (props)=>{
8
8
  const { setValue } = useField();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Page/index.tsx"],"sourcesContent":["'use client'\n\nimport type { NumberFieldClientComponent } from 'payload'\n\nimport { NumberField, useField } from '@payloadcms/ui'\nimport React, { useEffect } from 'react'\n\nimport './index.scss'\n\nconst baseClass = 'page-field'\n\nexport const Page: NumberFieldClientComponent = (props) => {\n const { setValue } = useField<number>()\n const { value: limitValue } = useField<number>({ path: 'limit' })\n\n // Effect to reset page to 1 if limit is removed\n useEffect(() => {\n if (!limitValue) {\n setValue(1) // Reset page to 1\n }\n }, [limitValue, setValue])\n\n return (\n <div className={baseClass}>\n <NumberField\n field={{\n name: props.field.name,\n admin: {\n autoComplete: undefined,\n placeholder: undefined,\n step: 1,\n },\n label: props.field.label,\n min: 1,\n }}\n onChange={(value) => setValue(value ?? 1)} // Update the page value on change\n path={props.path}\n />\n </div>\n )\n}\n"],"names":["NumberField","useField","React","useEffect","baseClass","Page","props","setValue","value","limitValue","path","div","className","field","name","admin","autoComplete","undefined","placeholder","step","label","min","onChange"],"mappings":"AAAA;;AAIA,SAASA,WAAW,EAAEC,QAAQ,QAAQ,iBAAgB;AACtD,OAAOC,SAASC,SAAS,QAAQ,QAAO;AAExC,OAAO,eAAc;AAErB,MAAMC,YAAY;AAElB,OAAO,MAAMC,OAAmC,CAACC;IAC/C,MAAM,EAAEC,QAAQ,EAAE,GAAGN;IACrB,MAAM,EAAEO,OAAOC,UAAU,EAAE,GAAGR,SAAiB;QAAES,MAAM;IAAQ;IAE/D,gDAAgD;IAChDP,UAAU;QACR,IAAI,CAACM,YAAY;YACfF,SAAS,IAAG,kBAAkB;QAChC;IACF,GAAG;QAACE;QAAYF;KAAS;IAEzB,qBACE,KAACI;QAAIC,WAAWR;kBACd,cAAA,KAACJ;YACCa,OAAO;gBACLC,MAAMR,MAAMO,KAAK,CAACC,IAAI;gBACtBC,OAAO;oBACLC,cAAcC;oBACdC,aAAaD;oBACbE,MAAM;gBACR;gBACAC,OAAOd,MAAMO,KAAK,CAACO,KAAK;gBACxBC,KAAK;YACP;YACAC,UAAU,CAACd,QAAUD,SAASC,SAAS;YACvCE,MAAMJ,MAAMI,IAAI;;;AAIxB,EAAC"}
1
+ {"version":3,"sources":["../../../src/components/Page/index.tsx"],"sourcesContent":["'use client'\n\nimport type { NumberFieldClientProps } from 'payload'\n\nimport { NumberField, useField } from '@payloadcms/ui'\nimport React, { useEffect } from 'react'\n\nimport './index.css'\n\nconst baseClass = 'page-field'\n\nexport const Page: React.FC<NumberFieldClientProps> = (props) => {\n const { setValue } = useField<number>()\n const { value: limitValue } = useField<number>({ path: 'limit' })\n\n // Effect to reset page to 1 if limit is removed\n useEffect(() => {\n if (!limitValue) {\n setValue(1) // Reset page to 1\n }\n }, [limitValue, setValue])\n\n return (\n <div className={baseClass}>\n <NumberField\n field={{\n name: props.field.name,\n admin: {\n autoComplete: undefined,\n placeholder: undefined,\n step: 1,\n },\n label: props.field.label,\n min: 1,\n }}\n onChange={(value) => setValue(value ?? 1)} // Update the page value on change\n path={props.path}\n />\n </div>\n )\n}\n"],"names":["NumberField","useField","React","useEffect","baseClass","Page","props","setValue","value","limitValue","path","div","className","field","name","admin","autoComplete","undefined","placeholder","step","label","min","onChange"],"mappings":"AAAA;;AAIA,SAASA,WAAW,EAAEC,QAAQ,QAAQ,iBAAgB;AACtD,OAAOC,SAASC,SAAS,QAAQ,QAAO;AAExC,OAAO,cAAa;AAEpB,MAAMC,YAAY;AAElB,OAAO,MAAMC,OAAyC,CAACC;IACrD,MAAM,EAAEC,QAAQ,EAAE,GAAGN;IACrB,MAAM,EAAEO,OAAOC,UAAU,EAAE,GAAGR,SAAiB;QAAES,MAAM;IAAQ;IAE/D,gDAAgD;IAChDP,UAAU;QACR,IAAI,CAACM,YAAY;YACfF,SAAS,IAAG,kBAAkB;QAChC;IACF,GAAG;QAACE;QAAYF;KAAS;IAEzB,qBACE,KAACI;QAAIC,WAAWR;kBACd,cAAA,KAACJ;YACCa,OAAO;gBACLC,MAAMR,MAAMO,KAAK,CAACC,IAAI;gBACtBC,OAAO;oBACLC,cAAcC;oBACdC,aAAaD;oBACbE,MAAM;gBACR;gBACAC,OAAOd,MAAMO,KAAK,CAACO,KAAK;gBACxBC,KAAK;YACP;YACAC,UAAU,CAACd,QAAUD,SAASC,SAAS;YACvCE,MAAMJ,MAAMI,IAAI;;;AAIxB,EAAC"}
@@ -0,0 +1,7 @@
1
+ type Args = {
2
+ fieldPath: string;
3
+ slug?: string;
4
+ };
5
+ export declare const getRelationshipGroupKey: ({ slug, fieldPath }: Args) => string;
6
+ export {};
7
+ //# sourceMappingURL=getRelationshipGroupKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRelationshipGroupKey.d.ts","sourceRoot":"","sources":["../../../src/components/RelationshipCell/getRelationshipGroupKey.ts"],"names":[],"mappings":"AAAA,KAAK,IAAI,GAAG;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,eAAO,MAAM,uBAAuB,wBAAyB,IAAI,KAAG,MACzB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export const getRelationshipGroupKey = ({ slug, fieldPath })=>slug ? `${fieldPath}-${slug}` : fieldPath;
2
+
3
+ //# sourceMappingURL=getRelationshipGroupKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/RelationshipCell/getRelationshipGroupKey.ts"],"sourcesContent":["type Args = {\n fieldPath: string\n slug?: string\n}\n\nexport const getRelationshipGroupKey = ({ slug, fieldPath }: Args): string =>\n slug ? `${fieldPath}-${slug}` : fieldPath\n"],"names":["getRelationshipGroupKey","slug","fieldPath"],"mappings":"AAKA,OAAO,MAAMA,0BAA0B,CAAC,EAAEC,IAAI,EAAEC,SAAS,EAAQ,GAC/DD,OAAO,GAAGC,UAAU,CAAC,EAAED,MAAM,GAAGC,UAAS"}
@@ -0,0 +1,43 @@
1
+ import type { I18n } from '@payloadcms/translations';
2
+ import type { ClientCollectionConfig, SanitizedConfig } from 'payload';
3
+ /**
4
+ * Labels rendered per collection before the rest collapse into `and N more`,
5
+ * matching `totalToShow` in the list view's relationship cell.
6
+ */
7
+ export declare const TOTAL_TO_SHOW = 3;
8
+ type Args = {
9
+ collections: ClientCollectionConfig[];
10
+ dateFormat: SanitizedConfig['admin']['dateFormat'];
11
+ i18n: I18n<any, any>;
12
+ /** `field.relationTo` — an array when the field is polymorphic. */
13
+ relationTo: string | string[];
14
+ value: unknown;
15
+ };
16
+ export type RelationshipGroup = {
17
+ /** Plural label of the target collection, empty when it cannot be determined. */
18
+ label: string;
19
+ /** One rendered label per document, capped at `TOTAL_TO_SHOW`. */
20
+ options: string[];
21
+ /** Options past `TOTAL_TO_SHOW` dropped from this group, to render as `and N more`. */
22
+ remaining: number;
23
+ /** Slug of the target collection, undefined when it cannot be determined. */
24
+ slug?: string;
25
+ };
26
+ /**
27
+ * Groups a relationship or upload value by target collection — one group per
28
+ * collection, labeled with its plural label, holding one label per document.
29
+ *
30
+ * Import files carry relationships in whichever shape produced them, so every
31
+ * entry is one of: a bare ID, a populated document, or the polymorphic
32
+ * `{ relationTo, value }` pair — whose `value` is itself an ID or a document.
33
+ *
34
+ * Each group caps at `TOTAL_TO_SHOW` options and counts the rest into `remaining`,
35
+ * so a polymorphic field shows the same depth per collection rather than spending
36
+ * one cell's worth of rows on whichever collection happens to come first. Groups are
37
+ * returned in the order their collection first appears, and entries whose collection
38
+ * cannot be determined collect into a single unlabeled group. Options keep their order
39
+ * in the file rather than being sorted, so the preview reflects what will be imported.
40
+ */
41
+ export declare const getRelationshipGroups: ({ collections, dateFormat, i18n, relationTo, value, }: Args) => RelationshipGroup[];
42
+ export {};
43
+ //# sourceMappingURL=getRelationshipGroups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRelationshipGroups.d.ts","sourceRoot":"","sources":["../../../src/components/RelationshipCell/getRelationshipGroups.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAKtE;;;GAGG;AACH,eAAO,MAAM,aAAa,IAAI,CAAA;AAE9B,KAAK,IAAI,GAAG;IACV,WAAW,EAAE,sBAAsB,EAAE,CAAA;IACrC,UAAU,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;IAClD,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACpB,mEAAmE;IACnE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAC7B,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAA;IACb,kEAAkE;IAClE,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,uFAAuF;IACvF,SAAS,EAAE,MAAM,CAAA;IACjB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,qBAAqB,0DAM/B,IAAI,KAAG,iBAAiB,EAyC1B,CAAA"}