@payloadcms/plugin-import-export 3.71.0-internal.e36f916 → 3.71.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. package/dist/components/CollectionField/index.d.ts.map +1 -1
  2. package/dist/components/CollectionField/index.js +8 -3
  3. package/dist/components/CollectionField/index.js.map +1 -1
  4. package/dist/components/ExportListMenuItem/index.d.ts +0 -1
  5. package/dist/components/ExportListMenuItem/index.d.ts.map +1 -1
  6. package/dist/components/ExportListMenuItem/index.js +0 -1
  7. package/dist/components/ExportListMenuItem/index.js.map +1 -1
  8. package/dist/components/ExportPreview/index.d.ts +4 -0
  9. package/dist/components/ExportPreview/index.d.ts.map +1 -0
  10. package/dist/components/ExportPreview/index.js +252 -0
  11. package/dist/components/ExportPreview/index.js.map +1 -0
  12. package/dist/components/ExportPreview/index.scss +36 -0
  13. package/dist/components/ImportCollectionField/index.d.ts +3 -0
  14. package/dist/components/ImportCollectionField/index.d.ts.map +1 -0
  15. package/dist/components/ImportCollectionField/index.js +17 -0
  16. package/dist/components/ImportCollectionField/index.js.map +1 -0
  17. package/dist/components/ImportListMenuItem/index.d.ts +6 -0
  18. package/dist/components/ImportListMenuItem/index.d.ts.map +1 -0
  19. package/dist/components/ImportListMenuItem/index.js +48 -0
  20. package/dist/components/ImportListMenuItem/index.js.map +1 -0
  21. package/dist/components/ImportPreview/index.d.ts +4 -0
  22. package/dist/components/ImportPreview/index.d.ts.map +1 -0
  23. package/dist/components/ImportPreview/index.js +624 -0
  24. package/dist/components/ImportPreview/index.js.map +1 -0
  25. package/dist/components/ImportPreview/index.scss +41 -0
  26. package/dist/components/ImportSaveButton/index.d.ts +2 -0
  27. package/dist/components/ImportSaveButton/index.d.ts.map +1 -0
  28. package/dist/components/ImportSaveButton/index.js +18 -0
  29. package/dist/components/ImportSaveButton/index.js.map +1 -0
  30. package/dist/components/Page/index.scss +4 -2
  31. package/dist/constants.d.ts +21 -0
  32. package/dist/constants.d.ts.map +1 -0
  33. package/dist/constants.js +21 -0
  34. package/dist/constants.js.map +1 -0
  35. package/dist/export/batchProcessor.d.ts +107 -0
  36. package/dist/export/batchProcessor.d.ts.map +1 -0
  37. package/dist/export/batchProcessor.js +187 -0
  38. package/dist/export/batchProcessor.js.map +1 -0
  39. package/dist/export/createExport.d.ts +9 -4
  40. package/dist/export/createExport.d.ts.map +1 -1
  41. package/dist/export/createExport.js +163 -111
  42. package/dist/export/createExport.js.map +1 -1
  43. package/dist/export/getCreateExportCollectionTask.d.ts +1 -2
  44. package/dist/export/getCreateExportCollectionTask.d.ts.map +1 -1
  45. package/dist/export/getCreateExportCollectionTask.js +10 -18
  46. package/dist/export/getCreateExportCollectionTask.js.map +1 -1
  47. package/dist/export/getExportCollection.d.ts +8 -0
  48. package/dist/export/getExportCollection.d.ts.map +1 -0
  49. package/dist/export/getExportCollection.js +100 -0
  50. package/dist/export/getExportCollection.js.map +1 -0
  51. package/dist/export/getFields.d.ts +8 -2
  52. package/dist/export/getFields.d.ts.map +1 -1
  53. package/dist/export/getFields.js +7 -9
  54. package/dist/export/getFields.js.map +1 -1
  55. package/dist/export/handleDownload.d.ts +3 -0
  56. package/dist/export/handleDownload.d.ts.map +1 -0
  57. package/dist/export/handleDownload.js +42 -0
  58. package/dist/export/handleDownload.js.map +1 -0
  59. package/dist/export/handlePreview.d.ts +3 -0
  60. package/dist/export/handlePreview.d.ts.map +1 -0
  61. package/dist/export/handlePreview.js +163 -0
  62. package/dist/export/handlePreview.js.map +1 -0
  63. package/dist/exports/rsc.d.ts +5 -1
  64. package/dist/exports/rsc.d.ts.map +1 -1
  65. package/dist/exports/rsc.js +5 -1
  66. package/dist/exports/rsc.js.map +1 -1
  67. package/dist/import/batchProcessor.d.ts +46 -0
  68. package/dist/import/batchProcessor.d.ts.map +1 -0
  69. package/dist/import/batchProcessor.js +529 -0
  70. package/dist/import/batchProcessor.js.map +1 -0
  71. package/dist/import/createImport.d.ts +45 -0
  72. package/dist/import/createImport.d.ts.map +1 -0
  73. package/dist/import/createImport.js +175 -0
  74. package/dist/import/createImport.js.map +1 -0
  75. package/dist/import/getCreateImportCollectionTask.d.ts +13 -0
  76. package/dist/import/getCreateImportCollectionTask.d.ts.map +1 -0
  77. package/dist/import/getCreateImportCollectionTask.js +81 -0
  78. package/dist/import/getCreateImportCollectionTask.js.map +1 -0
  79. package/dist/import/getFields.d.ts +7 -0
  80. package/dist/import/getFields.d.ts.map +1 -0
  81. package/dist/import/getFields.js +150 -0
  82. package/dist/import/getFields.js.map +1 -0
  83. package/dist/import/getImportCollection.d.ts +8 -0
  84. package/dist/import/getImportCollection.d.ts.map +1 -0
  85. package/dist/import/getImportCollection.js +258 -0
  86. package/dist/import/getImportCollection.js.map +1 -0
  87. package/dist/import/handlePreview.d.ts +3 -0
  88. package/dist/import/handlePreview.d.ts.map +1 -0
  89. package/dist/import/handlePreview.js +94 -0
  90. package/dist/import/handlePreview.js.map +1 -0
  91. package/dist/index.d.ts +3 -2
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +68 -110
  94. package/dist/index.js.map +1 -1
  95. package/dist/translations/languages/ar.d.ts.map +1 -1
  96. package/dist/translations/languages/ar.js +21 -1
  97. package/dist/translations/languages/ar.js.map +1 -1
  98. package/dist/translations/languages/az.d.ts.map +1 -1
  99. package/dist/translations/languages/az.js +21 -1
  100. package/dist/translations/languages/az.js.map +1 -1
  101. package/dist/translations/languages/bg.d.ts.map +1 -1
  102. package/dist/translations/languages/bg.js +21 -1
  103. package/dist/translations/languages/bg.js.map +1 -1
  104. package/dist/translations/languages/bnBd.d.ts +4 -0
  105. package/dist/translations/languages/bnBd.d.ts.map +1 -0
  106. package/dist/translations/languages/bnBd.js +48 -0
  107. package/dist/translations/languages/bnBd.js.map +1 -0
  108. package/dist/translations/languages/bnIn.d.ts +4 -0
  109. package/dist/translations/languages/bnIn.d.ts.map +1 -0
  110. package/dist/translations/languages/bnIn.js +48 -0
  111. package/dist/translations/languages/bnIn.js.map +1 -0
  112. package/dist/translations/languages/ca.d.ts.map +1 -1
  113. package/dist/translations/languages/ca.js +21 -1
  114. package/dist/translations/languages/ca.js.map +1 -1
  115. package/dist/translations/languages/cs.d.ts.map +1 -1
  116. package/dist/translations/languages/cs.js +21 -1
  117. package/dist/translations/languages/cs.js.map +1 -1
  118. package/dist/translations/languages/da.d.ts.map +1 -1
  119. package/dist/translations/languages/da.js +21 -1
  120. package/dist/translations/languages/da.js.map +1 -1
  121. package/dist/translations/languages/de.d.ts.map +1 -1
  122. package/dist/translations/languages/de.js +21 -1
  123. package/dist/translations/languages/de.js.map +1 -1
  124. package/dist/translations/languages/en.d.ts +20 -0
  125. package/dist/translations/languages/en.d.ts.map +1 -1
  126. package/dist/translations/languages/en.js +21 -1
  127. package/dist/translations/languages/en.js.map +1 -1
  128. package/dist/translations/languages/es.d.ts.map +1 -1
  129. package/dist/translations/languages/es.js +21 -1
  130. package/dist/translations/languages/es.js.map +1 -1
  131. package/dist/translations/languages/et.d.ts.map +1 -1
  132. package/dist/translations/languages/et.js +21 -1
  133. package/dist/translations/languages/et.js.map +1 -1
  134. package/dist/translations/languages/fa.d.ts.map +1 -1
  135. package/dist/translations/languages/fa.js +21 -1
  136. package/dist/translations/languages/fa.js.map +1 -1
  137. package/dist/translations/languages/fr.d.ts.map +1 -1
  138. package/dist/translations/languages/fr.js +21 -1
  139. package/dist/translations/languages/fr.js.map +1 -1
  140. package/dist/translations/languages/he.d.ts.map +1 -1
  141. package/dist/translations/languages/he.js +21 -1
  142. package/dist/translations/languages/he.js.map +1 -1
  143. package/dist/translations/languages/hr.d.ts.map +1 -1
  144. package/dist/translations/languages/hr.js +21 -1
  145. package/dist/translations/languages/hr.js.map +1 -1
  146. package/dist/translations/languages/hu.d.ts.map +1 -1
  147. package/dist/translations/languages/hu.js +21 -1
  148. package/dist/translations/languages/hu.js.map +1 -1
  149. package/dist/translations/languages/hy.d.ts.map +1 -1
  150. package/dist/translations/languages/hy.js +21 -1
  151. package/dist/translations/languages/hy.js.map +1 -1
  152. package/dist/translations/languages/id.d.ts +4 -0
  153. package/dist/translations/languages/id.d.ts.map +1 -0
  154. package/dist/translations/languages/id.js +48 -0
  155. package/dist/translations/languages/id.js.map +1 -0
  156. package/dist/translations/languages/is.d.ts.map +1 -1
  157. package/dist/translations/languages/is.js +21 -1
  158. package/dist/translations/languages/is.js.map +1 -1
  159. package/dist/translations/languages/it.d.ts.map +1 -1
  160. package/dist/translations/languages/it.js +21 -1
  161. package/dist/translations/languages/it.js.map +1 -1
  162. package/dist/translations/languages/ja.d.ts.map +1 -1
  163. package/dist/translations/languages/ja.js +21 -1
  164. package/dist/translations/languages/ja.js.map +1 -1
  165. package/dist/translations/languages/ko.d.ts.map +1 -1
  166. package/dist/translations/languages/ko.js +21 -1
  167. package/dist/translations/languages/ko.js.map +1 -1
  168. package/dist/translations/languages/lt.d.ts.map +1 -1
  169. package/dist/translations/languages/lt.js +21 -1
  170. package/dist/translations/languages/lt.js.map +1 -1
  171. package/dist/translations/languages/lv.d.ts.map +1 -1
  172. package/dist/translations/languages/lv.js +26 -6
  173. package/dist/translations/languages/lv.js.map +1 -1
  174. package/dist/translations/languages/my.d.ts.map +1 -1
  175. package/dist/translations/languages/my.js +21 -1
  176. package/dist/translations/languages/my.js.map +1 -1
  177. package/dist/translations/languages/nb.d.ts.map +1 -1
  178. package/dist/translations/languages/nb.js +21 -1
  179. package/dist/translations/languages/nb.js.map +1 -1
  180. package/dist/translations/languages/nl.d.ts.map +1 -1
  181. package/dist/translations/languages/nl.js +21 -1
  182. package/dist/translations/languages/nl.js.map +1 -1
  183. package/dist/translations/languages/pl.d.ts.map +1 -1
  184. package/dist/translations/languages/pl.js +21 -1
  185. package/dist/translations/languages/pl.js.map +1 -1
  186. package/dist/translations/languages/pt.d.ts.map +1 -1
  187. package/dist/translations/languages/pt.js +21 -1
  188. package/dist/translations/languages/pt.js.map +1 -1
  189. package/dist/translations/languages/ro.d.ts.map +1 -1
  190. package/dist/translations/languages/ro.js +21 -1
  191. package/dist/translations/languages/ro.js.map +1 -1
  192. package/dist/translations/languages/rs.d.ts.map +1 -1
  193. package/dist/translations/languages/rs.js +21 -1
  194. package/dist/translations/languages/rs.js.map +1 -1
  195. package/dist/translations/languages/rsLatin.d.ts.map +1 -1
  196. package/dist/translations/languages/rsLatin.js +21 -1
  197. package/dist/translations/languages/rsLatin.js.map +1 -1
  198. package/dist/translations/languages/ru.d.ts.map +1 -1
  199. package/dist/translations/languages/ru.js +21 -1
  200. package/dist/translations/languages/ru.js.map +1 -1
  201. package/dist/translations/languages/sk.d.ts.map +1 -1
  202. package/dist/translations/languages/sk.js +21 -1
  203. package/dist/translations/languages/sk.js.map +1 -1
  204. package/dist/translations/languages/sl.d.ts.map +1 -1
  205. package/dist/translations/languages/sl.js +21 -1
  206. package/dist/translations/languages/sl.js.map +1 -1
  207. package/dist/translations/languages/sv.d.ts.map +1 -1
  208. package/dist/translations/languages/sv.js +21 -1
  209. package/dist/translations/languages/sv.js.map +1 -1
  210. package/dist/translations/languages/ta.d.ts.map +1 -1
  211. package/dist/translations/languages/ta.js +21 -1
  212. package/dist/translations/languages/ta.js.map +1 -1
  213. package/dist/translations/languages/th.d.ts.map +1 -1
  214. package/dist/translations/languages/th.js +21 -1
  215. package/dist/translations/languages/th.js.map +1 -1
  216. package/dist/translations/languages/tr.d.ts.map +1 -1
  217. package/dist/translations/languages/tr.js +21 -1
  218. package/dist/translations/languages/tr.js.map +1 -1
  219. package/dist/translations/languages/uk.d.ts.map +1 -1
  220. package/dist/translations/languages/uk.js +21 -1
  221. package/dist/translations/languages/uk.js.map +1 -1
  222. package/dist/translations/languages/vi.d.ts.map +1 -1
  223. package/dist/translations/languages/vi.js +21 -1
  224. package/dist/translations/languages/vi.js.map +1 -1
  225. package/dist/translations/languages/zh.d.ts.map +1 -1
  226. package/dist/translations/languages/zh.js +21 -1
  227. package/dist/translations/languages/zh.js.map +1 -1
  228. package/dist/translations/languages/zhTw.d.ts.map +1 -1
  229. package/dist/translations/languages/zhTw.js +21 -1
  230. package/dist/translations/languages/zhTw.js.map +1 -1
  231. package/dist/translations/types.d.ts +13 -0
  232. package/dist/translations/types.d.ts.map +1 -1
  233. package/dist/translations/types.js.map +1 -1
  234. package/dist/types.d.ts +166 -22
  235. package/dist/types.d.ts.map +1 -1
  236. package/dist/types.js +1 -1
  237. package/dist/types.js.map +1 -1
  238. package/dist/utilities/flattenObject.d.ts +11 -0
  239. package/dist/utilities/flattenObject.d.ts.map +1 -0
  240. package/dist/utilities/flattenObject.js +129 -0
  241. package/dist/utilities/flattenObject.js.map +1 -0
  242. package/dist/utilities/getExportFieldFunctions.d.ts +12 -0
  243. package/dist/utilities/getExportFieldFunctions.d.ts.map +1 -0
  244. package/dist/utilities/getExportFieldFunctions.js +102 -0
  245. package/dist/utilities/getExportFieldFunctions.js.map +1 -0
  246. package/dist/utilities/getFilename.d.ts +6 -0
  247. package/dist/utilities/getFilename.d.ts.map +1 -0
  248. package/dist/utilities/getFilename.js +13 -0
  249. package/dist/utilities/getFilename.js.map +1 -0
  250. package/dist/utilities/getFlattenedFieldKeys.d.ts +12 -1
  251. package/dist/utilities/getFlattenedFieldKeys.d.ts.map +1 -1
  252. package/dist/utilities/getFlattenedFieldKeys.js +35 -10
  253. package/dist/utilities/getFlattenedFieldKeys.js.map +1 -1
  254. package/dist/utilities/getImportFieldFunctions.d.ts +12 -0
  255. package/dist/utilities/getImportFieldFunctions.d.ts.map +1 -0
  256. package/dist/utilities/getImportFieldFunctions.js +130 -0
  257. package/dist/utilities/getImportFieldFunctions.js.map +1 -0
  258. package/dist/utilities/getPluginCollections.d.ts +39 -0
  259. package/dist/utilities/getPluginCollections.d.ts.map +1 -0
  260. package/dist/utilities/getPluginCollections.js +102 -0
  261. package/dist/utilities/getPluginCollections.js.map +1 -0
  262. package/dist/utilities/getSchemaColumns.d.ts +43 -0
  263. package/dist/utilities/getSchemaColumns.d.ts.map +1 -0
  264. package/dist/utilities/getSchemaColumns.js +163 -0
  265. package/dist/utilities/getSchemaColumns.js.map +1 -0
  266. package/dist/utilities/getSelect.d.ts +11 -0
  267. package/dist/utilities/getSelect.d.ts.map +1 -0
  268. package/dist/utilities/getSelect.js +27 -0
  269. package/dist/utilities/getSelect.js.map +1 -0
  270. package/dist/utilities/parseCSV.d.ts +11 -0
  271. package/dist/utilities/parseCSV.d.ts.map +1 -0
  272. package/dist/utilities/parseCSV.js +67 -0
  273. package/dist/utilities/parseCSV.js.map +1 -0
  274. package/dist/utilities/parseCSV.spec.js +169 -0
  275. package/dist/utilities/parseCSV.spec.js.map +1 -0
  276. package/dist/utilities/parseJSON.d.ts +11 -0
  277. package/dist/utilities/parseJSON.d.ts.map +1 -0
  278. package/dist/utilities/parseJSON.js +25 -0
  279. package/dist/utilities/parseJSON.js.map +1 -0
  280. package/dist/utilities/processRichTextField.d.ts +6 -0
  281. package/dist/utilities/processRichTextField.d.ts.map +1 -0
  282. package/dist/utilities/processRichTextField.js +45 -0
  283. package/dist/utilities/processRichTextField.js.map +1 -0
  284. package/dist/utilities/unflattenObject.d.ts +11 -0
  285. package/dist/utilities/unflattenObject.d.ts.map +1 -0
  286. package/dist/utilities/unflattenObject.js +431 -0
  287. package/dist/utilities/unflattenObject.js.map +1 -0
  288. package/dist/utilities/unflattenObject.spec.js +680 -0
  289. package/dist/utilities/unflattenObject.spec.js.map +1 -0
  290. package/dist/utilities/useBatchProcessor.d.ts +103 -0
  291. package/dist/utilities/useBatchProcessor.d.ts.map +1 -0
  292. package/dist/utilities/useBatchProcessor.js +88 -0
  293. package/dist/utilities/useBatchProcessor.js.map +1 -0
  294. package/dist/utilities/validateLimitValue.d.ts +1 -1
  295. package/dist/utilities/validateLimitValue.d.ts.map +1 -1
  296. package/dist/utilities/validateLimitValue.js +1 -4
  297. package/dist/utilities/validateLimitValue.js.map +1 -1
  298. package/package.json +9 -9
@@ -0,0 +1,624 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { getTranslation } from '@payloadcms/translations';
4
+ import { Pagination, PerPage, Table, Translation, useConfig, useDebouncedEffect, useDocumentInfo, useField, useFormFields, useTranslation } from '@payloadcms/ui';
5
+ import { formatDocTitle } from '@payloadcms/ui/shared';
6
+ import { fieldAffectsData } from 'payload/shared';
7
+ import React, { useState, useTransition } from 'react';
8
+ import { DEFAULT_PREVIEW_LIMIT, PREVIEW_LIMIT_OPTIONS } from '../../constants.js';
9
+ import './index.scss';
10
+ const baseClass = 'import-preview';
11
+ export const ImportPreview = ()=>{
12
+ const [isPending, startTransition] = useTransition();
13
+ const { config, config: { routes } } = useConfig();
14
+ const { collectionSlug } = useDocumentInfo();
15
+ const { i18n, t } = useTranslation();
16
+ const { value: targetCollectionSlug } = useField({
17
+ path: 'collectionSlug'
18
+ });
19
+ const { value: importMode } = useField({
20
+ path: 'importMode'
21
+ });
22
+ const { value: matchField } = useField({
23
+ path: 'matchField'
24
+ });
25
+ const { value: filename } = useField({
26
+ path: 'filename'
27
+ });
28
+ const { value: url } = useField({
29
+ path: 'url'
30
+ });
31
+ const { value: mimeType } = useField({
32
+ path: 'mimeType'
33
+ });
34
+ const { value: status } = useField({
35
+ path: 'status'
36
+ });
37
+ const { value: summary } = useField({
38
+ path: 'summary'
39
+ });
40
+ // Access the file field directly from form fields
41
+ const fileField = useFormFields(([fields])=>fields?.file || null);
42
+ const [dataToRender, setDataToRender] = useState([]);
43
+ const [columns, setColumns] = useState([]);
44
+ const [totalDocs, setTotalDocs] = useState(0);
45
+ const [error, setError] = useState(null);
46
+ // Preview pagination state
47
+ const [previewPage, setPreviewPage] = useState(1);
48
+ const [previewLimit, setPreviewLimit] = useState(DEFAULT_PREVIEW_LIMIT);
49
+ const [paginationData, setPaginationData] = useState(null);
50
+ const collectionConfig = React.useMemo(()=>config.collections.find((c)=>c.slug === targetCollectionSlug), [
51
+ targetCollectionSlug,
52
+ config.collections
53
+ ]);
54
+ useDebouncedEffect(()=>{
55
+ if (!collectionSlug || !targetCollectionSlug) {
56
+ return;
57
+ }
58
+ if (!targetCollectionSlug || !url && !fileField?.value) {
59
+ setDataToRender([]);
60
+ setColumns([]);
61
+ setTotalDocs(0);
62
+ setPaginationData(null);
63
+ return;
64
+ }
65
+ if (!collectionConfig) {
66
+ setDataToRender([]);
67
+ setColumns([]);
68
+ setTotalDocs(0);
69
+ setPaginationData(null);
70
+ return;
71
+ }
72
+ const abortController = new AbortController();
73
+ const processFileData = async ()=>{
74
+ setError(null);
75
+ try {
76
+ // Determine format from file
77
+ let format = 'json';
78
+ if (fileField?.value && fileField.value instanceof File) {
79
+ const file = fileField.value;
80
+ format = file.type === 'text/csv' || file.name?.endsWith('.csv') ? 'csv' : 'json';
81
+ } else if (mimeType === 'text/csv' || filename?.endsWith('.csv')) {
82
+ format = 'csv';
83
+ }
84
+ // Get file data as base64
85
+ let fileData;
86
+ if (fileField?.value && fileField.value instanceof File) {
87
+ // File is being uploaded, read its contents
88
+ const arrayBuffer = await fileField.value.arrayBuffer();
89
+ const base64 = Buffer.from(arrayBuffer).toString('base64');
90
+ fileData = base64;
91
+ } else if (url) {
92
+ // File has been saved, fetch from URL
93
+ const response = await fetch(url, {
94
+ signal: abortController.signal
95
+ });
96
+ if (!response.ok) {
97
+ throw new Error('Failed to fetch file');
98
+ }
99
+ const arrayBuffer = await response.arrayBuffer();
100
+ const base64 = Buffer.from(arrayBuffer).toString('base64');
101
+ fileData = base64;
102
+ }
103
+ if (!fileData) {
104
+ setDataToRender([]);
105
+ setColumns([]);
106
+ setTotalDocs(0);
107
+ setPaginationData(null);
108
+ return;
109
+ }
110
+ // Fetch transformed data from the server
111
+ const res = await fetch(`${routes.api}/${collectionSlug}/preview-data`, {
112
+ body: JSON.stringify({
113
+ collectionSlug: targetCollectionSlug,
114
+ fileData,
115
+ format,
116
+ previewLimit,
117
+ previewPage
118
+ }),
119
+ credentials: 'include',
120
+ headers: {
121
+ 'Content-Type': 'application/json'
122
+ },
123
+ method: 'POST',
124
+ signal: abortController.signal
125
+ });
126
+ if (!res.ok) {
127
+ throw new Error('Failed to process file');
128
+ }
129
+ const { docs, hasNextPage, hasPrevPage, limit: responseLimit, page: responsePage, totalDocs: serverTotalDocs, totalPages } = await res.json();
130
+ setTotalDocs(serverTotalDocs);
131
+ setPaginationData({
132
+ hasNextPage,
133
+ hasPrevPage,
134
+ limit: responseLimit,
135
+ nextPage: responsePage + 1,
136
+ page: responsePage,
137
+ prevPage: responsePage - 1,
138
+ totalPages
139
+ });
140
+ if (!Array.isArray(docs) || docs.length === 0) {
141
+ setDataToRender([]);
142
+ setColumns([]);
143
+ return;
144
+ }
145
+ // Build columns from collection fields without traverseFields
146
+ const buildColumnsFromFields = (fields, parentPath = '', parentLabel = '')=>{
147
+ const cols = [];
148
+ fields.forEach((field)=>{
149
+ if (!fieldAffectsData(field) || field.admin?.disabled) {
150
+ return;
151
+ }
152
+ // Build the field path
153
+ const fieldPath = parentPath ? `${parentPath}.${field.name}` : field.name;
154
+ // Get the field label
155
+ let label = field.name;
156
+ if ('label' in field && field.label) {
157
+ label = getTranslation(field.label, i18n);
158
+ }
159
+ // Add parent label prefix if in a group
160
+ if (parentLabel) {
161
+ label = `${parentLabel} > ${label}`;
162
+ }
163
+ // Skip if this field doesn't exist in any document
164
+ const hasData = docs.some((doc)=>{
165
+ const value = getValueAtPath(doc, fieldPath);
166
+ return value !== undefined && value !== null;
167
+ });
168
+ if (!hasData && field.type !== 'relationship') {
169
+ return;
170
+ }
171
+ cols.push({
172
+ accessor: fieldPath,
173
+ active: true,
174
+ field,
175
+ Heading: label,
176
+ renderedCells: docs.map((doc)=>{
177
+ const value = getValueAtPath(doc, fieldPath);
178
+ if (value === undefined || value === null) {
179
+ return null;
180
+ }
181
+ // Format based on field type
182
+ if (field.type === 'relationship' || field.type === 'upload') {
183
+ // Handle relationships
184
+ if (typeof value === 'object' && !Array.isArray(value)) {
185
+ // Single relationship
186
+ const relationTo = Array.isArray(field.relationTo) ? value.relationTo : field.relationTo;
187
+ const relatedConfig = config.collections.find((c)=>c.slug === relationTo);
188
+ if (relatedConfig && relatedConfig.admin?.useAsTitle) {
189
+ const titleValue = value[relatedConfig.admin.useAsTitle];
190
+ if (titleValue) {
191
+ return formatDocTitle({
192
+ collectionConfig: relatedConfig,
193
+ data: value,
194
+ dateFormat: config.admin.dateFormat,
195
+ i18n
196
+ });
197
+ }
198
+ }
199
+ // Fallback to ID
200
+ const id = value.id || value;
201
+ return `${getTranslation(relatedConfig?.labels?.singular || relationTo, i18n)}: ${id}`;
202
+ } else if (Array.isArray(value)) {
203
+ // Multiple relationships
204
+ return value.map((item)=>{
205
+ if (typeof item === 'object') {
206
+ const relationTo = Array.isArray(field.relationTo) ? item.relationTo : field.relationTo;
207
+ const relatedConfig = config.collections.find((c)=>c.slug === relationTo);
208
+ if (relatedConfig && relatedConfig.admin?.useAsTitle) {
209
+ const titleValue = item[relatedConfig.admin.useAsTitle];
210
+ if (titleValue) {
211
+ return formatDocTitle({
212
+ collectionConfig: relatedConfig,
213
+ data: item,
214
+ dateFormat: config.admin.dateFormat,
215
+ i18n
216
+ });
217
+ }
218
+ }
219
+ return item.id || item;
220
+ }
221
+ return item;
222
+ }).join(', ');
223
+ }
224
+ // Just an ID
225
+ return String(value);
226
+ } else if (field.type === 'date') {
227
+ // Format dates
228
+ const dateFormat = field.admin && 'date' in field.admin && field.admin.date?.displayFormat || config.admin.dateFormat;
229
+ return new Date(value).toLocaleString(i18n.language, {
230
+ dateStyle: 'medium',
231
+ timeStyle: 'short'
232
+ });
233
+ } else if (field.type === 'checkbox') {
234
+ return value ? '✓' : '✗';
235
+ } else if (field.type === 'select' || field.type === 'radio') {
236
+ // Show the label for select/radio options
237
+ const option = field.options?.find((opt)=>{
238
+ if (typeof opt === 'string') {
239
+ return opt === value;
240
+ }
241
+ return opt.value === value;
242
+ });
243
+ if (option && typeof option === 'object') {
244
+ return getTranslation(option.label, i18n);
245
+ }
246
+ return String(value);
247
+ } else if (field.type === 'number') {
248
+ return String(value);
249
+ } else if (Array.isArray(value)) {
250
+ // Handle arrays
251
+ if (field.type === 'blocks') {
252
+ return value.map((block)=>`${block.blockType || 'Block'}`).join(', ');
253
+ }
254
+ return `[${value.length} items]`;
255
+ } else if (typeof value === 'object') {
256
+ // Handle objects
257
+ if (field.type === 'group') {
258
+ return '{...}';
259
+ }
260
+ return JSON.stringify(value);
261
+ }
262
+ return String(value);
263
+ })
264
+ });
265
+ // For groups, add nested fields with parent label
266
+ if (field.type === 'group' && 'fields' in field) {
267
+ const groupLabel = 'label' in field && field.label ? getTranslation(field.label, i18n) : field.name;
268
+ const nestedCols = buildColumnsFromFields(field.fields, fieldPath, parentLabel ? `${parentLabel} > ${groupLabel}` : groupLabel);
269
+ cols.push(...nestedCols);
270
+ }
271
+ // For tabs, process the fields within
272
+ if ('tabs' in field && Array.isArray(field.tabs)) {
273
+ field.tabs.forEach((tab)=>{
274
+ if ('name' in tab && tab.name) {
275
+ // Named tab
276
+ const tabPath = parentPath ? `${parentPath}.${tab.name}` : tab.name;
277
+ const tabLabel = 'label' in tab && tab.label ? getTranslation(tab.label, i18n) : tab.name;
278
+ const tabCols = buildColumnsFromFields(tab.fields, tabPath, parentLabel ? `${parentLabel} > ${tabLabel}` : tabLabel);
279
+ cols.push(...tabCols);
280
+ } else {
281
+ // Unnamed tab - fields go directly under parent
282
+ const tabLabel = 'label' in tab && tab.label ? getTranslation(tab.label, i18n) : '';
283
+ const tabCols = buildColumnsFromFields(tab.fields, parentPath, tabLabel && typeof tabLabel === 'string' && parentLabel ? `${parentLabel} > ${tabLabel}` : typeof tabLabel === 'string' ? tabLabel : parentLabel);
284
+ cols.push(...tabCols);
285
+ }
286
+ });
287
+ }
288
+ });
289
+ return cols;
290
+ };
291
+ // Add default meta fields at the end
292
+ const fieldColumns = buildColumnsFromFields(collectionConfig.fields);
293
+ const metaFields = [
294
+ 'id',
295
+ 'createdAt',
296
+ 'updatedAt',
297
+ '_status'
298
+ ];
299
+ metaFields.forEach((metaField)=>{
300
+ const hasData = docs.some((doc)=>doc[metaField] !== undefined);
301
+ if (!hasData) {
302
+ return;
303
+ }
304
+ fieldColumns.push({
305
+ accessor: metaField,
306
+ active: true,
307
+ field: {
308
+ name: metaField
309
+ },
310
+ Heading: getTranslation(metaField, i18n),
311
+ renderedCells: docs.map((doc)=>{
312
+ const value = doc[metaField];
313
+ if (value === undefined || value === null) {
314
+ return null;
315
+ }
316
+ if (metaField === 'createdAt' || metaField === 'updatedAt') {
317
+ return new Date(value).toLocaleString(i18n.language, {
318
+ dateStyle: 'medium',
319
+ timeStyle: 'short'
320
+ });
321
+ }
322
+ return String(value);
323
+ })
324
+ });
325
+ });
326
+ setColumns(fieldColumns);
327
+ setDataToRender(docs);
328
+ } catch (err) {
329
+ console.error('Error processing file data:', err);
330
+ setError(err instanceof Error ? err.message : 'Failed to load preview');
331
+ setDataToRender([]);
332
+ setColumns([]);
333
+ setTotalDocs(0);
334
+ setPaginationData(null);
335
+ }
336
+ };
337
+ startTransition(async ()=>await processFileData());
338
+ return ()=>{
339
+ if (!abortController.signal.aborted) {
340
+ abortController.abort('Component unmounted');
341
+ }
342
+ };
343
+ }, [
344
+ collectionSlug,
345
+ targetCollectionSlug,
346
+ url,
347
+ filename,
348
+ mimeType,
349
+ fileField?.value,
350
+ collectionConfig,
351
+ config,
352
+ i18n,
353
+ previewLimit,
354
+ previewPage,
355
+ routes.api
356
+ ], 500);
357
+ // If import has been processed, show results instead of preview
358
+ if (status !== 'pending' && summary) {
359
+ return /*#__PURE__*/ _jsxs("div", {
360
+ className: baseClass,
361
+ children: [
362
+ /*#__PURE__*/ _jsx("div", {
363
+ className: `${baseClass}__header`,
364
+ children: /*#__PURE__*/ _jsx("h3", {
365
+ children: /*#__PURE__*/ _jsx(Translation, {
366
+ i18nKey: "plugin-import-export:importResults",
367
+ t: t
368
+ })
369
+ })
370
+ }),
371
+ /*#__PURE__*/ _jsxs("div", {
372
+ className: `${baseClass}__results`,
373
+ children: [
374
+ /*#__PURE__*/ _jsxs("p", {
375
+ children: [
376
+ /*#__PURE__*/ _jsx("strong", {
377
+ children: "Status:"
378
+ }),
379
+ " ",
380
+ status
381
+ ]
382
+ }),
383
+ /*#__PURE__*/ _jsxs("p", {
384
+ children: [
385
+ /*#__PURE__*/ _jsx("strong", {
386
+ children: "Imported:"
387
+ }),
388
+ " ",
389
+ summary.imported || 0
390
+ ]
391
+ }),
392
+ /*#__PURE__*/ _jsxs("p", {
393
+ children: [
394
+ /*#__PURE__*/ _jsx("strong", {
395
+ children: "Updated:"
396
+ }),
397
+ " ",
398
+ summary.updated || 0
399
+ ]
400
+ }),
401
+ /*#__PURE__*/ _jsxs("p", {
402
+ children: [
403
+ /*#__PURE__*/ _jsx("strong", {
404
+ children: "Total:"
405
+ }),
406
+ " ",
407
+ summary.total || 0
408
+ ]
409
+ }),
410
+ summary.issues > 0 && /*#__PURE__*/ _jsxs("p", {
411
+ children: [
412
+ /*#__PURE__*/ _jsx("strong", {
413
+ children: "Issues:"
414
+ }),
415
+ " ",
416
+ summary.issues
417
+ ]
418
+ }),
419
+ summary.issueDetails && summary.issueDetails.length > 0 && /*#__PURE__*/ _jsxs("div", {
420
+ style: {
421
+ marginTop: '1rem'
422
+ },
423
+ children: [
424
+ /*#__PURE__*/ _jsx("strong", {
425
+ children: "Issue Details:"
426
+ }),
427
+ /*#__PURE__*/ _jsxs("ul", {
428
+ style: {
429
+ marginTop: '0.5rem'
430
+ },
431
+ children: [
432
+ summary.issueDetails.slice(0, 10).map((issue, index)=>/*#__PURE__*/ _jsxs("li", {
433
+ children: [
434
+ "Row ",
435
+ issue.row,
436
+ ": ",
437
+ issue.error
438
+ ]
439
+ }, index)),
440
+ summary.issueDetails.length > 10 && /*#__PURE__*/ _jsxs("li", {
441
+ children: [
442
+ "... and ",
443
+ summary.issueDetails.length - 10,
444
+ " more issues"
445
+ ]
446
+ })
447
+ ]
448
+ })
449
+ ]
450
+ })
451
+ ]
452
+ })
453
+ ]
454
+ });
455
+ }
456
+ if (!targetCollectionSlug) {
457
+ return /*#__PURE__*/ _jsx("div", {
458
+ className: baseClass,
459
+ children: /*#__PURE__*/ _jsx("p", {
460
+ style: {
461
+ opacity: 0.6
462
+ },
463
+ children: /*#__PURE__*/ _jsx(Translation, {
464
+ i18nKey: "plugin-import-export:collectionRequired",
465
+ t: t
466
+ })
467
+ })
468
+ });
469
+ }
470
+ if (error) {
471
+ return /*#__PURE__*/ _jsx("div", {
472
+ className: baseClass,
473
+ children: /*#__PURE__*/ _jsxs("p", {
474
+ style: {
475
+ color: 'red'
476
+ },
477
+ children: [
478
+ /*#__PURE__*/ _jsx(Translation, {
479
+ i18nKey: "general:error",
480
+ t: t
481
+ }),
482
+ ": ",
483
+ error
484
+ ]
485
+ })
486
+ });
487
+ }
488
+ if (!url && !fileField?.value) {
489
+ return /*#__PURE__*/ _jsx("div", {
490
+ className: baseClass,
491
+ children: /*#__PURE__*/ _jsx("p", {
492
+ style: {
493
+ opacity: 0.6
494
+ },
495
+ children: /*#__PURE__*/ _jsx(Translation, {
496
+ i18nKey: "plugin-import-export:uploadFileToSeePreview",
497
+ t: t
498
+ })
499
+ })
500
+ });
501
+ }
502
+ const handlePageChange = (page)=>{
503
+ setPreviewPage(page);
504
+ };
505
+ const handlePerPageChange = (newLimit)=>{
506
+ setPreviewLimit(newLimit);
507
+ setPreviewPage(1);
508
+ };
509
+ return /*#__PURE__*/ _jsxs("div", {
510
+ className: baseClass,
511
+ children: [
512
+ /*#__PURE__*/ _jsxs("div", {
513
+ className: `${baseClass}__header`,
514
+ children: [
515
+ /*#__PURE__*/ _jsx("h3", {
516
+ children: /*#__PURE__*/ _jsx(Translation, {
517
+ i18nKey: "version:preview",
518
+ t: t
519
+ })
520
+ }),
521
+ totalDocs > 0 && !isPending && /*#__PURE__*/ _jsxs("div", {
522
+ className: `${baseClass}__info`,
523
+ children: [
524
+ /*#__PURE__*/ _jsx("span", {
525
+ className: `${baseClass}__import-count`,
526
+ children: /*#__PURE__*/ _jsx(Translation, {
527
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
528
+ // @ts-expect-error
529
+ i18nKey: "plugin-import-export:documentsToImport",
530
+ t: t,
531
+ variables: {
532
+ count: totalDocs
533
+ }
534
+ })
535
+ }),
536
+ ' | ',
537
+ /*#__PURE__*/ _jsx(Translation, {
538
+ i18nKey: "plugin-import-export:mode",
539
+ t: t
540
+ }),
541
+ ": ",
542
+ importMode || 'create',
543
+ importMode !== 'create' && /*#__PURE__*/ _jsxs(_Fragment, {
544
+ children: [
545
+ ' | ',
546
+ /*#__PURE__*/ _jsx(Translation, {
547
+ i18nKey: "plugin-import-export:matchBy",
548
+ t: t
549
+ }),
550
+ ": ",
551
+ matchField || 'id'
552
+ ]
553
+ })
554
+ ]
555
+ })
556
+ ]
557
+ }),
558
+ isPending && !dataToRender.length && /*#__PURE__*/ _jsx("div", {
559
+ className: `${baseClass}__loading`,
560
+ children: /*#__PURE__*/ _jsx(Translation, {
561
+ i18nKey: "general:loading",
562
+ t: t
563
+ })
564
+ }),
565
+ dataToRender.length > 0 && /*#__PURE__*/ _jsx(Table, {
566
+ columns: columns,
567
+ data: dataToRender
568
+ }),
569
+ !isPending && dataToRender.length === 0 && targetCollectionSlug && /*#__PURE__*/ _jsx("p", {
570
+ children: /*#__PURE__*/ _jsx(Translation, {
571
+ i18nKey: "plugin-import-export:noDataToPreview",
572
+ t: t
573
+ })
574
+ }),
575
+ paginationData && totalDocs > 0 && /*#__PURE__*/ _jsxs("div", {
576
+ className: `${baseClass}__pagination`,
577
+ children: [
578
+ paginationData.totalPages > 1 && /*#__PURE__*/ _jsx(Pagination, {
579
+ hasNextPage: paginationData.hasNextPage,
580
+ hasPrevPage: paginationData.hasPrevPage,
581
+ nextPage: paginationData.nextPage ?? undefined,
582
+ numberOfNeighbors: 1,
583
+ onChange: handlePageChange,
584
+ page: paginationData.page,
585
+ prevPage: paginationData.prevPage ?? undefined,
586
+ totalPages: paginationData.totalPages
587
+ }),
588
+ /*#__PURE__*/ _jsx("span", {
589
+ className: `${baseClass}__page-info`,
590
+ children: /*#__PURE__*/ _jsx(Translation, {
591
+ // @ts-expect-error - plugin translations not typed
592
+ i18nKey: "plugin-import-export:previewPageInfo",
593
+ t: t,
594
+ variables: {
595
+ end: Math.min((paginationData.page ?? 1) * previewLimit, totalDocs),
596
+ start: ((paginationData.page ?? 1) - 1) * previewLimit + 1,
597
+ total: totalDocs
598
+ }
599
+ })
600
+ }),
601
+ /*#__PURE__*/ _jsx(PerPage, {
602
+ handleChange: handlePerPageChange,
603
+ limit: previewLimit,
604
+ limits: PREVIEW_LIMIT_OPTIONS
605
+ })
606
+ ]
607
+ })
608
+ ]
609
+ });
610
+ };
611
+ // Helper function to get nested values
612
+ const getValueAtPath = (obj, path)=>{
613
+ const segments = path.split('.');
614
+ let current = obj;
615
+ for (const segment of segments){
616
+ if (current === null || current === undefined) {
617
+ return undefined;
618
+ }
619
+ current = current[segment];
620
+ }
621
+ return current;
622
+ };
623
+
624
+ //# sourceMappingURL=index.js.map