@payloadcms/plugin-import-export 3.71.0-internal.ef75fa0 → 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.
- package/dist/components/CollectionField/index.d.ts.map +1 -1
- package/dist/components/CollectionField/index.js +8 -3
- package/dist/components/CollectionField/index.js.map +1 -1
- package/dist/components/ExportListMenuItem/index.d.ts +0 -1
- package/dist/components/ExportListMenuItem/index.d.ts.map +1 -1
- package/dist/components/ExportListMenuItem/index.js +0 -1
- package/dist/components/ExportListMenuItem/index.js.map +1 -1
- package/dist/components/ExportPreview/index.d.ts +4 -0
- package/dist/components/ExportPreview/index.d.ts.map +1 -0
- package/dist/components/ExportPreview/index.js +252 -0
- package/dist/components/ExportPreview/index.js.map +1 -0
- package/dist/components/ExportPreview/index.scss +36 -0
- package/dist/components/ImportCollectionField/index.d.ts +3 -0
- package/dist/components/ImportCollectionField/index.d.ts.map +1 -0
- package/dist/components/ImportCollectionField/index.js +17 -0
- package/dist/components/ImportCollectionField/index.js.map +1 -0
- package/dist/components/ImportListMenuItem/index.d.ts +6 -0
- package/dist/components/ImportListMenuItem/index.d.ts.map +1 -0
- package/dist/components/ImportListMenuItem/index.js +48 -0
- package/dist/components/ImportListMenuItem/index.js.map +1 -0
- package/dist/components/ImportPreview/index.d.ts +4 -0
- package/dist/components/ImportPreview/index.d.ts.map +1 -0
- package/dist/components/ImportPreview/index.js +624 -0
- package/dist/components/ImportPreview/index.js.map +1 -0
- package/dist/components/ImportPreview/index.scss +41 -0
- package/dist/components/ImportSaveButton/index.d.ts +2 -0
- package/dist/components/ImportSaveButton/index.d.ts.map +1 -0
- package/dist/components/ImportSaveButton/index.js +18 -0
- package/dist/components/ImportSaveButton/index.js.map +1 -0
- package/dist/components/Page/index.scss +4 -2
- package/dist/constants.d.ts +21 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +21 -0
- package/dist/constants.js.map +1 -0
- package/dist/export/batchProcessor.d.ts +107 -0
- package/dist/export/batchProcessor.d.ts.map +1 -0
- package/dist/export/batchProcessor.js +187 -0
- package/dist/export/batchProcessor.js.map +1 -0
- package/dist/export/createExport.d.ts +9 -4
- package/dist/export/createExport.d.ts.map +1 -1
- package/dist/export/createExport.js +163 -111
- package/dist/export/createExport.js.map +1 -1
- package/dist/export/getCreateExportCollectionTask.d.ts +1 -2
- package/dist/export/getCreateExportCollectionTask.d.ts.map +1 -1
- package/dist/export/getCreateExportCollectionTask.js +10 -18
- package/dist/export/getCreateExportCollectionTask.js.map +1 -1
- package/dist/export/getExportCollection.d.ts +8 -0
- package/dist/export/getExportCollection.d.ts.map +1 -0
- package/dist/export/getExportCollection.js +100 -0
- package/dist/export/getExportCollection.js.map +1 -0
- package/dist/export/getFields.d.ts +8 -2
- package/dist/export/getFields.d.ts.map +1 -1
- package/dist/export/getFields.js +7 -9
- package/dist/export/getFields.js.map +1 -1
- package/dist/export/handleDownload.d.ts +3 -0
- package/dist/export/handleDownload.d.ts.map +1 -0
- package/dist/export/handleDownload.js +42 -0
- package/dist/export/handleDownload.js.map +1 -0
- package/dist/export/handlePreview.d.ts +3 -0
- package/dist/export/handlePreview.d.ts.map +1 -0
- package/dist/export/handlePreview.js +163 -0
- package/dist/export/handlePreview.js.map +1 -0
- package/dist/exports/rsc.d.ts +5 -1
- package/dist/exports/rsc.d.ts.map +1 -1
- package/dist/exports/rsc.js +5 -1
- package/dist/exports/rsc.js.map +1 -1
- package/dist/import/batchProcessor.d.ts +46 -0
- package/dist/import/batchProcessor.d.ts.map +1 -0
- package/dist/import/batchProcessor.js +529 -0
- package/dist/import/batchProcessor.js.map +1 -0
- package/dist/import/createImport.d.ts +45 -0
- package/dist/import/createImport.d.ts.map +1 -0
- package/dist/import/createImport.js +175 -0
- package/dist/import/createImport.js.map +1 -0
- package/dist/import/getCreateImportCollectionTask.d.ts +13 -0
- package/dist/import/getCreateImportCollectionTask.d.ts.map +1 -0
- package/dist/import/getCreateImportCollectionTask.js +81 -0
- package/dist/import/getCreateImportCollectionTask.js.map +1 -0
- package/dist/import/getFields.d.ts +7 -0
- package/dist/import/getFields.d.ts.map +1 -0
- package/dist/import/getFields.js +150 -0
- package/dist/import/getFields.js.map +1 -0
- package/dist/import/getImportCollection.d.ts +8 -0
- package/dist/import/getImportCollection.d.ts.map +1 -0
- package/dist/import/getImportCollection.js +258 -0
- package/dist/import/getImportCollection.js.map +1 -0
- package/dist/import/handlePreview.d.ts +3 -0
- package/dist/import/handlePreview.d.ts.map +1 -0
- package/dist/import/handlePreview.js +94 -0
- package/dist/import/handlePreview.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +68 -110
- package/dist/index.js.map +1 -1
- package/dist/translations/languages/ar.d.ts.map +1 -1
- package/dist/translations/languages/ar.js +21 -1
- package/dist/translations/languages/ar.js.map +1 -1
- package/dist/translations/languages/az.d.ts.map +1 -1
- package/dist/translations/languages/az.js +21 -1
- package/dist/translations/languages/az.js.map +1 -1
- package/dist/translations/languages/bg.d.ts.map +1 -1
- package/dist/translations/languages/bg.js +21 -1
- package/dist/translations/languages/bg.js.map +1 -1
- package/dist/translations/languages/bnBd.d.ts +4 -0
- package/dist/translations/languages/bnBd.d.ts.map +1 -0
- package/dist/translations/languages/bnBd.js +48 -0
- package/dist/translations/languages/bnBd.js.map +1 -0
- package/dist/translations/languages/bnIn.d.ts +4 -0
- package/dist/translations/languages/bnIn.d.ts.map +1 -0
- package/dist/translations/languages/bnIn.js +48 -0
- package/dist/translations/languages/bnIn.js.map +1 -0
- package/dist/translations/languages/ca.d.ts.map +1 -1
- package/dist/translations/languages/ca.js +21 -1
- package/dist/translations/languages/ca.js.map +1 -1
- package/dist/translations/languages/cs.d.ts.map +1 -1
- package/dist/translations/languages/cs.js +21 -1
- package/dist/translations/languages/cs.js.map +1 -1
- package/dist/translations/languages/da.d.ts.map +1 -1
- package/dist/translations/languages/da.js +21 -1
- package/dist/translations/languages/da.js.map +1 -1
- package/dist/translations/languages/de.d.ts.map +1 -1
- package/dist/translations/languages/de.js +21 -1
- package/dist/translations/languages/de.js.map +1 -1
- package/dist/translations/languages/en.d.ts +20 -0
- package/dist/translations/languages/en.d.ts.map +1 -1
- package/dist/translations/languages/en.js +21 -1
- package/dist/translations/languages/en.js.map +1 -1
- package/dist/translations/languages/es.d.ts.map +1 -1
- package/dist/translations/languages/es.js +21 -1
- package/dist/translations/languages/es.js.map +1 -1
- package/dist/translations/languages/et.d.ts.map +1 -1
- package/dist/translations/languages/et.js +21 -1
- package/dist/translations/languages/et.js.map +1 -1
- package/dist/translations/languages/fa.d.ts.map +1 -1
- package/dist/translations/languages/fa.js +21 -1
- package/dist/translations/languages/fa.js.map +1 -1
- package/dist/translations/languages/fr.d.ts.map +1 -1
- package/dist/translations/languages/fr.js +21 -1
- package/dist/translations/languages/fr.js.map +1 -1
- package/dist/translations/languages/he.d.ts.map +1 -1
- package/dist/translations/languages/he.js +21 -1
- package/dist/translations/languages/he.js.map +1 -1
- package/dist/translations/languages/hr.d.ts.map +1 -1
- package/dist/translations/languages/hr.js +21 -1
- package/dist/translations/languages/hr.js.map +1 -1
- package/dist/translations/languages/hu.d.ts.map +1 -1
- package/dist/translations/languages/hu.js +21 -1
- package/dist/translations/languages/hu.js.map +1 -1
- package/dist/translations/languages/hy.d.ts.map +1 -1
- package/dist/translations/languages/hy.js +21 -1
- package/dist/translations/languages/hy.js.map +1 -1
- package/dist/translations/languages/id.d.ts +4 -0
- package/dist/translations/languages/id.d.ts.map +1 -0
- package/dist/translations/languages/id.js +48 -0
- package/dist/translations/languages/id.js.map +1 -0
- package/dist/translations/languages/is.d.ts.map +1 -1
- package/dist/translations/languages/is.js +21 -1
- package/dist/translations/languages/is.js.map +1 -1
- package/dist/translations/languages/it.d.ts.map +1 -1
- package/dist/translations/languages/it.js +21 -1
- package/dist/translations/languages/it.js.map +1 -1
- package/dist/translations/languages/ja.d.ts.map +1 -1
- package/dist/translations/languages/ja.js +21 -1
- package/dist/translations/languages/ja.js.map +1 -1
- package/dist/translations/languages/ko.d.ts.map +1 -1
- package/dist/translations/languages/ko.js +21 -1
- package/dist/translations/languages/ko.js.map +1 -1
- package/dist/translations/languages/lt.d.ts.map +1 -1
- package/dist/translations/languages/lt.js +21 -1
- package/dist/translations/languages/lt.js.map +1 -1
- package/dist/translations/languages/lv.d.ts.map +1 -1
- package/dist/translations/languages/lv.js +26 -6
- package/dist/translations/languages/lv.js.map +1 -1
- package/dist/translations/languages/my.d.ts.map +1 -1
- package/dist/translations/languages/my.js +21 -1
- package/dist/translations/languages/my.js.map +1 -1
- package/dist/translations/languages/nb.d.ts.map +1 -1
- package/dist/translations/languages/nb.js +21 -1
- package/dist/translations/languages/nb.js.map +1 -1
- package/dist/translations/languages/nl.d.ts.map +1 -1
- package/dist/translations/languages/nl.js +21 -1
- package/dist/translations/languages/nl.js.map +1 -1
- package/dist/translations/languages/pl.d.ts.map +1 -1
- package/dist/translations/languages/pl.js +21 -1
- package/dist/translations/languages/pl.js.map +1 -1
- package/dist/translations/languages/pt.d.ts.map +1 -1
- package/dist/translations/languages/pt.js +21 -1
- package/dist/translations/languages/pt.js.map +1 -1
- package/dist/translations/languages/ro.d.ts.map +1 -1
- package/dist/translations/languages/ro.js +21 -1
- package/dist/translations/languages/ro.js.map +1 -1
- package/dist/translations/languages/rs.d.ts.map +1 -1
- package/dist/translations/languages/rs.js +21 -1
- package/dist/translations/languages/rs.js.map +1 -1
- package/dist/translations/languages/rsLatin.d.ts.map +1 -1
- package/dist/translations/languages/rsLatin.js +21 -1
- package/dist/translations/languages/rsLatin.js.map +1 -1
- package/dist/translations/languages/ru.d.ts.map +1 -1
- package/dist/translations/languages/ru.js +21 -1
- package/dist/translations/languages/ru.js.map +1 -1
- package/dist/translations/languages/sk.d.ts.map +1 -1
- package/dist/translations/languages/sk.js +21 -1
- package/dist/translations/languages/sk.js.map +1 -1
- package/dist/translations/languages/sl.d.ts.map +1 -1
- package/dist/translations/languages/sl.js +21 -1
- package/dist/translations/languages/sl.js.map +1 -1
- package/dist/translations/languages/sv.d.ts.map +1 -1
- package/dist/translations/languages/sv.js +21 -1
- package/dist/translations/languages/sv.js.map +1 -1
- package/dist/translations/languages/ta.d.ts.map +1 -1
- package/dist/translations/languages/ta.js +21 -1
- package/dist/translations/languages/ta.js.map +1 -1
- package/dist/translations/languages/th.d.ts.map +1 -1
- package/dist/translations/languages/th.js +21 -1
- package/dist/translations/languages/th.js.map +1 -1
- package/dist/translations/languages/tr.d.ts.map +1 -1
- package/dist/translations/languages/tr.js +21 -1
- package/dist/translations/languages/tr.js.map +1 -1
- package/dist/translations/languages/uk.d.ts.map +1 -1
- package/dist/translations/languages/uk.js +21 -1
- package/dist/translations/languages/uk.js.map +1 -1
- package/dist/translations/languages/vi.d.ts.map +1 -1
- package/dist/translations/languages/vi.js +21 -1
- package/dist/translations/languages/vi.js.map +1 -1
- package/dist/translations/languages/zh.d.ts.map +1 -1
- package/dist/translations/languages/zh.js +21 -1
- package/dist/translations/languages/zh.js.map +1 -1
- package/dist/translations/languages/zhTw.d.ts.map +1 -1
- package/dist/translations/languages/zhTw.js +21 -1
- package/dist/translations/languages/zhTw.js.map +1 -1
- package/dist/translations/types.d.ts +13 -0
- package/dist/translations/types.d.ts.map +1 -1
- package/dist/translations/types.js.map +1 -1
- package/dist/types.d.ts +166 -22
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utilities/flattenObject.d.ts +11 -0
- package/dist/utilities/flattenObject.d.ts.map +1 -0
- package/dist/utilities/flattenObject.js +129 -0
- package/dist/utilities/flattenObject.js.map +1 -0
- package/dist/utilities/getExportFieldFunctions.d.ts +12 -0
- package/dist/utilities/getExportFieldFunctions.d.ts.map +1 -0
- package/dist/utilities/getExportFieldFunctions.js +102 -0
- package/dist/utilities/getExportFieldFunctions.js.map +1 -0
- package/dist/utilities/getFilename.d.ts +6 -0
- package/dist/utilities/getFilename.d.ts.map +1 -0
- package/dist/utilities/getFilename.js +13 -0
- package/dist/utilities/getFilename.js.map +1 -0
- package/dist/utilities/getFlattenedFieldKeys.d.ts +12 -1
- package/dist/utilities/getFlattenedFieldKeys.d.ts.map +1 -1
- package/dist/utilities/getFlattenedFieldKeys.js +35 -10
- package/dist/utilities/getFlattenedFieldKeys.js.map +1 -1
- package/dist/utilities/getImportFieldFunctions.d.ts +12 -0
- package/dist/utilities/getImportFieldFunctions.d.ts.map +1 -0
- package/dist/utilities/getImportFieldFunctions.js +130 -0
- package/dist/utilities/getImportFieldFunctions.js.map +1 -0
- package/dist/utilities/getPluginCollections.d.ts +39 -0
- package/dist/utilities/getPluginCollections.d.ts.map +1 -0
- package/dist/utilities/getPluginCollections.js +102 -0
- package/dist/utilities/getPluginCollections.js.map +1 -0
- package/dist/utilities/getSchemaColumns.d.ts +43 -0
- package/dist/utilities/getSchemaColumns.d.ts.map +1 -0
- package/dist/utilities/getSchemaColumns.js +163 -0
- package/dist/utilities/getSchemaColumns.js.map +1 -0
- package/dist/utilities/getSelect.d.ts +11 -0
- package/dist/utilities/getSelect.d.ts.map +1 -0
- package/dist/utilities/getSelect.js +27 -0
- package/dist/utilities/getSelect.js.map +1 -0
- package/dist/utilities/parseCSV.d.ts +11 -0
- package/dist/utilities/parseCSV.d.ts.map +1 -0
- package/dist/utilities/parseCSV.js +67 -0
- package/dist/utilities/parseCSV.js.map +1 -0
- package/dist/utilities/parseCSV.spec.js +169 -0
- package/dist/utilities/parseCSV.spec.js.map +1 -0
- package/dist/utilities/parseJSON.d.ts +11 -0
- package/dist/utilities/parseJSON.d.ts.map +1 -0
- package/dist/utilities/parseJSON.js +25 -0
- package/dist/utilities/parseJSON.js.map +1 -0
- package/dist/utilities/processRichTextField.d.ts +6 -0
- package/dist/utilities/processRichTextField.d.ts.map +1 -0
- package/dist/utilities/processRichTextField.js +45 -0
- package/dist/utilities/processRichTextField.js.map +1 -0
- package/dist/utilities/unflattenObject.d.ts +11 -0
- package/dist/utilities/unflattenObject.d.ts.map +1 -0
- package/dist/utilities/unflattenObject.js +431 -0
- package/dist/utilities/unflattenObject.js.map +1 -0
- package/dist/utilities/unflattenObject.spec.js +680 -0
- package/dist/utilities/unflattenObject.spec.js.map +1 -0
- package/dist/utilities/useBatchProcessor.d.ts +103 -0
- package/dist/utilities/useBatchProcessor.d.ts.map +1 -0
- package/dist/utilities/useBatchProcessor.js +88 -0
- package/dist/utilities/useBatchProcessor.js.map +1 -0
- package/dist/utilities/validateLimitValue.d.ts +1 -1
- package/dist/utilities/validateLimitValue.d.ts.map +1 -1
- package/dist/utilities/validateLimitValue.js +1 -4
- package/dist/utilities/validateLimitValue.js.map +1 -1
- package/package.json +9 -9
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { createExport } from './createExport.js';
|
|
2
|
+
import { getFields } from './getFields.js';
|
|
3
|
+
import { handleDownload } from './handleDownload.js';
|
|
4
|
+
import { handlePreview } from './handlePreview.js';
|
|
5
|
+
export const getExportCollection = ({ config, exportConfig, pluginConfig })=>{
|
|
6
|
+
const beforeOperation = [];
|
|
7
|
+
const afterChange = [];
|
|
8
|
+
// Extract export-specific settings
|
|
9
|
+
const disableDownload = exportConfig?.disableDownload ?? false;
|
|
10
|
+
const disableSave = exportConfig?.disableSave ?? false;
|
|
11
|
+
const disableJobsQueue = exportConfig?.disableJobsQueue ?? false;
|
|
12
|
+
const batchSize = exportConfig?.batchSize ?? 100;
|
|
13
|
+
const format = exportConfig?.format;
|
|
14
|
+
const collection = {
|
|
15
|
+
slug: 'exports',
|
|
16
|
+
access: {
|
|
17
|
+
update: ()=>false
|
|
18
|
+
},
|
|
19
|
+
admin: {
|
|
20
|
+
components: {
|
|
21
|
+
edit: {
|
|
22
|
+
SaveButton: '@payloadcms/plugin-import-export/rsc#ExportSaveButton'
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
custom: {
|
|
26
|
+
disableDownload,
|
|
27
|
+
disableSave,
|
|
28
|
+
format
|
|
29
|
+
},
|
|
30
|
+
disableCopyToLocale: true,
|
|
31
|
+
group: false,
|
|
32
|
+
useAsTitle: 'name'
|
|
33
|
+
},
|
|
34
|
+
disableDuplicate: true,
|
|
35
|
+
endpoints: [
|
|
36
|
+
{
|
|
37
|
+
handler: (req)=>handleDownload(req, pluginConfig.debug),
|
|
38
|
+
method: 'post',
|
|
39
|
+
path: '/download'
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
handler: handlePreview,
|
|
43
|
+
method: 'post',
|
|
44
|
+
path: '/export-preview'
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
fields: getFields(config, {
|
|
48
|
+
format
|
|
49
|
+
}),
|
|
50
|
+
hooks: {
|
|
51
|
+
afterChange,
|
|
52
|
+
beforeOperation
|
|
53
|
+
},
|
|
54
|
+
lockDocuments: false,
|
|
55
|
+
upload: {
|
|
56
|
+
filesRequiredOnCreate: false,
|
|
57
|
+
hideFileInputOnCreate: true,
|
|
58
|
+
hideRemoveFile: true
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
if (disableJobsQueue) {
|
|
62
|
+
beforeOperation.push(async ({ args, collection: collectionConfig, operation, req })=>{
|
|
63
|
+
if (operation !== 'create') {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const { user } = req;
|
|
67
|
+
const debug = pluginConfig.debug;
|
|
68
|
+
await createExport({
|
|
69
|
+
...args.data,
|
|
70
|
+
batchSize,
|
|
71
|
+
debug,
|
|
72
|
+
exportsCollection: collectionConfig.slug,
|
|
73
|
+
req,
|
|
74
|
+
userCollection: user?.collection || user?.user?.collection,
|
|
75
|
+
userID: user?.id || user?.user?.id
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
} else {
|
|
79
|
+
afterChange.push(async ({ collection: collectionConfig, doc, operation, req })=>{
|
|
80
|
+
if (operation !== 'create') {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const { user } = req;
|
|
84
|
+
const input = {
|
|
85
|
+
...doc,
|
|
86
|
+
batchSize,
|
|
87
|
+
exportsCollection: collectionConfig.slug,
|
|
88
|
+
userCollection: user?.collection || user?.user?.collection,
|
|
89
|
+
userID: user?.id || user?.user?.id
|
|
90
|
+
};
|
|
91
|
+
await req.payload.jobs.queue({
|
|
92
|
+
input,
|
|
93
|
+
task: 'createCollectionExport'
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
return collection;
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
//# sourceMappingURL=getExportCollection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/export/getExportCollection.ts"],"sourcesContent":["import type {\n CollectionAfterChangeHook,\n CollectionBeforeOperationHook,\n CollectionConfig,\n Config,\n} from 'payload'\n\nimport type { ExportConfig, ImportExportPluginConfig } from '../types.js'\nimport type { Export } from './createExport.js'\n\nimport { createExport } from './createExport.js'\nimport { getFields } from './getFields.js'\nimport { handleDownload } from './handleDownload.js'\nimport { handlePreview } from './handlePreview.js'\n\nexport const getExportCollection = ({\n config,\n exportConfig,\n pluginConfig,\n}: {\n config: Config\n exportConfig?: ExportConfig\n pluginConfig: ImportExportPluginConfig\n}): CollectionConfig => {\n const beforeOperation: CollectionBeforeOperationHook[] = []\n const afterChange: CollectionAfterChangeHook[] = []\n\n // Extract export-specific settings\n const disableDownload = exportConfig?.disableDownload ?? false\n const disableSave = exportConfig?.disableSave ?? false\n const disableJobsQueue = exportConfig?.disableJobsQueue ?? false\n const batchSize = exportConfig?.batchSize ?? 100\n const format = exportConfig?.format\n\n const collection: CollectionConfig = {\n slug: 'exports',\n access: {\n update: () => false,\n },\n admin: {\n components: {\n edit: {\n SaveButton: '@payloadcms/plugin-import-export/rsc#ExportSaveButton',\n },\n },\n custom: {\n disableDownload,\n disableSave,\n format,\n },\n disableCopyToLocale: true,\n group: false,\n useAsTitle: 'name',\n },\n disableDuplicate: true,\n endpoints: [\n {\n handler: (req) => handleDownload(req, pluginConfig.debug),\n method: 'post',\n path: '/download',\n },\n {\n handler: handlePreview,\n method: 'post',\n path: '/export-preview',\n },\n ],\n fields: getFields(config, { format }),\n hooks: {\n afterChange,\n beforeOperation,\n },\n lockDocuments: false,\n upload: {\n filesRequiredOnCreate: false,\n hideFileInputOnCreate: true,\n hideRemoveFile: true,\n },\n }\n\n if (disableJobsQueue) {\n beforeOperation.push(async ({ args, collection: collectionConfig, operation, req }) => {\n if (operation !== 'create') {\n return\n }\n const { user } = req\n const debug = pluginConfig.debug\n\n await createExport({\n ...(args.data as Export),\n batchSize,\n debug,\n exportsCollection: collectionConfig.slug,\n req,\n userCollection: user?.collection || user?.user?.collection,\n userID: user?.id || user?.user?.id,\n })\n })\n } else {\n afterChange.push(async ({ collection: collectionConfig, doc, operation, req }) => {\n if (operation !== 'create') {\n return\n }\n\n const { user } = req\n\n const input: Export = {\n ...doc,\n batchSize,\n exportsCollection: collectionConfig.slug,\n userCollection: user?.collection || user?.user?.collection,\n userID: user?.id || user?.user?.id,\n }\n\n await req.payload.jobs.queue({\n input,\n task: 'createCollectionExport',\n })\n })\n }\n\n return collection\n}\n"],"names":["createExport","getFields","handleDownload","handlePreview","getExportCollection","config","exportConfig","pluginConfig","beforeOperation","afterChange","disableDownload","disableSave","disableJobsQueue","batchSize","format","collection","slug","access","update","admin","components","edit","SaveButton","custom","disableCopyToLocale","group","useAsTitle","disableDuplicate","endpoints","handler","req","debug","method","path","fields","hooks","lockDocuments","upload","filesRequiredOnCreate","hideFileInputOnCreate","hideRemoveFile","push","args","collectionConfig","operation","user","data","exportsCollection","userCollection","userID","id","doc","input","payload","jobs","queue","task"],"mappings":"AAUA,SAASA,YAAY,QAAQ,oBAAmB;AAChD,SAASC,SAAS,QAAQ,iBAAgB;AAC1C,SAASC,cAAc,QAAQ,sBAAqB;AACpD,SAASC,aAAa,QAAQ,qBAAoB;AAElD,OAAO,MAAMC,sBAAsB,CAAC,EAClCC,MAAM,EACNC,YAAY,EACZC,YAAY,EAKb;IACC,MAAMC,kBAAmD,EAAE;IAC3D,MAAMC,cAA2C,EAAE;IAEnD,mCAAmC;IACnC,MAAMC,kBAAkBJ,cAAcI,mBAAmB;IACzD,MAAMC,cAAcL,cAAcK,eAAe;IACjD,MAAMC,mBAAmBN,cAAcM,oBAAoB;IAC3D,MAAMC,YAAYP,cAAcO,aAAa;IAC7C,MAAMC,SAASR,cAAcQ;IAE7B,MAAMC,aAA+B;QACnCC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;QAChB;QACAC,OAAO;YACLC,YAAY;gBACVC,MAAM;oBACJC,YAAY;gBACd;YACF;YACAC,QAAQ;gBACNb;gBACAC;gBACAG;YACF;YACAU,qBAAqB;YACrBC,OAAO;YACPC,YAAY;QACd;QACAC,kBAAkB;QAClBC,WAAW;YACT;gBACEC,SAAS,CAACC,MAAQ5B,eAAe4B,KAAKvB,aAAawB,KAAK;gBACxDC,QAAQ;gBACRC,MAAM;YACR;YACA;gBACEJ,SAAS1B;gBACT6B,QAAQ;gBACRC,MAAM;YACR;SACD;QACDC,QAAQjC,UAAUI,QAAQ;YAAES;QAAO;QACnCqB,OAAO;YACL1B;YACAD;QACF;QACA4B,eAAe;QACfC,QAAQ;YACNC,uBAAuB;YACvBC,uBAAuB;YACvBC,gBAAgB;QAClB;IACF;IAEA,IAAI5B,kBAAkB;QACpBJ,gBAAgBiC,IAAI,CAAC,OAAO,EAAEC,IAAI,EAAE3B,YAAY4B,gBAAgB,EAAEC,SAAS,EAAEd,GAAG,EAAE;YAChF,IAAIc,cAAc,UAAU;gBAC1B;YACF;YACA,MAAM,EAAEC,IAAI,EAAE,GAAGf;YACjB,MAAMC,QAAQxB,aAAawB,KAAK;YAEhC,MAAM/B,aAAa;gBACjB,GAAI0C,KAAKI,IAAI;gBACbjC;gBACAkB;gBACAgB,mBAAmBJ,iBAAiB3B,IAAI;gBACxCc;gBACAkB,gBAAgBH,MAAM9B,cAAc8B,MAAMA,MAAM9B;gBAChDkC,QAAQJ,MAAMK,MAAML,MAAMA,MAAMK;YAClC;QACF;IACF,OAAO;QACLzC,YAAYgC,IAAI,CAAC,OAAO,EAAE1B,YAAY4B,gBAAgB,EAAEQ,GAAG,EAAEP,SAAS,EAAEd,GAAG,EAAE;YAC3E,IAAIc,cAAc,UAAU;gBAC1B;YACF;YAEA,MAAM,EAAEC,IAAI,EAAE,GAAGf;YAEjB,MAAMsB,QAAgB;gBACpB,GAAGD,GAAG;gBACNtC;gBACAkC,mBAAmBJ,iBAAiB3B,IAAI;gBACxCgC,gBAAgBH,MAAM9B,cAAc8B,MAAMA,MAAM9B;gBAChDkC,QAAQJ,MAAMK,MAAML,MAAMA,MAAMK;YAClC;YAEA,MAAMpB,IAAIuB,OAAO,CAACC,IAAI,CAACC,KAAK,CAAC;gBAC3BH;gBACAI,MAAM;YACR;QACF;IACF;IAEA,OAAOzC;AACT,EAAC"}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import type { Config, Field } from 'payload';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
type GetFieldsOptions = {
|
|
3
|
+
/**
|
|
4
|
+
* Force a specific format, hiding the format dropdown
|
|
5
|
+
*/
|
|
6
|
+
format?: 'csv' | 'json';
|
|
7
|
+
};
|
|
8
|
+
export declare const getFields: (config: Config, options?: GetFieldsOptions) => Field[];
|
|
9
|
+
export {};
|
|
4
10
|
//# sourceMappingURL=getFields.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFields.d.ts","sourceRoot":"","sources":["../../src/export/getFields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAe,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"getFields.d.ts","sourceRoot":"","sources":["../../src/export/getFields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAe,MAAM,SAAS,CAAA;AAKzD,KAAK,gBAAgB,GAAG;IACtB;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,SAAS,WAAY,MAAM,YAAY,gBAAgB,KAAG,KAAK,EAwP3E,CAAA"}
|
package/dist/export/getFields.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { getFilename } from '../utilities/getFilename.js';
|
|
1
2
|
import { validateLimitValue } from '../utilities/validateLimitValue.js';
|
|
2
|
-
|
|
3
|
-
|
|
3
|
+
export const getFields = (config, options)=>{
|
|
4
|
+
const format = options?.format;
|
|
4
5
|
let localeField;
|
|
5
6
|
if (config.localization) {
|
|
6
7
|
localeField = {
|
|
@@ -42,14 +43,11 @@ export const getFields = (config, pluginConfig)=>{
|
|
|
42
43
|
name: 'format',
|
|
43
44
|
type: 'select',
|
|
44
45
|
admin: {
|
|
45
|
-
// Hide if a forced format is set via
|
|
46
|
-
condition: ()=>!
|
|
46
|
+
// Hide if a forced format is set via config
|
|
47
|
+
condition: ()=>!format,
|
|
47
48
|
width: '33.3333%'
|
|
48
49
|
},
|
|
49
|
-
defaultValue:
|
|
50
|
-
// Default to plugin-defined format, otherwise 'csv'
|
|
51
|
-
return pluginConfig?.format ?? 'csv';
|
|
52
|
-
})(),
|
|
50
|
+
defaultValue: format ?? 'csv',
|
|
53
51
|
// @ts-expect-error - this is not correctly typed in plugins right now
|
|
54
52
|
label: ({ t })=>t('plugin-import-export:field-format-label'),
|
|
55
53
|
options: [
|
|
@@ -236,7 +234,7 @@ export const getFields = (config, pluginConfig)=>{
|
|
|
236
234
|
type: 'ui',
|
|
237
235
|
admin: {
|
|
238
236
|
components: {
|
|
239
|
-
Field: '@payloadcms/plugin-import-export/rsc#
|
|
237
|
+
Field: '@payloadcms/plugin-import-export/rsc#ExportPreview'
|
|
240
238
|
}
|
|
241
239
|
}
|
|
242
240
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/export/getFields.ts"],"sourcesContent":["import type { TFunction } from '@payloadcms/translations'\nimport type { Config, Field, SelectField } from 'payload'\n\nimport type { ImportExportPluginConfig } from '../types.js'\n\nimport { validateLimitValue } from '../utilities/validateLimitValue.js'\nimport { getFilename } from './getFilename.js'\n\nexport const getFields = (config: Config, pluginConfig?: ImportExportPluginConfig): Field[] => {\n let localeField: SelectField | undefined\n if (config.localization) {\n localeField = {\n name: 'locale',\n type: 'select',\n admin: {\n width: '25%',\n },\n defaultValue: 'all',\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:field-locale-label'),\n options: [\n {\n label: ({ t }) => t('general:allLocales'),\n value: 'all',\n },\n ...config.localization.locales.map((locale) => ({\n label: typeof locale === 'string' ? locale : locale.label,\n value: typeof locale === 'string' ? locale : locale.code,\n })),\n ],\n }\n }\n\n return [\n {\n type: 'collapsible',\n fields: [\n {\n name: 'name',\n type: 'text',\n defaultValue: () => getFilename(),\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:field-name-label'),\n },\n {\n type: 'row',\n fields: [\n {\n name: 'format',\n type: 'select',\n admin: {\n // Hide if a forced format is set via plugin config\n condition: () => !pluginConfig?.format,\n width: '33.3333%',\n },\n defaultValue: (() => {\n // Default to plugin-defined format, otherwise 'csv'\n return pluginConfig?.format ?? 'csv'\n })(),\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:field-format-label'),\n options: [\n {\n label: 'CSV',\n value: 'csv',\n },\n {\n label: 'JSON',\n value: 'json',\n },\n ],\n required: true,\n },\n {\n name: 'limit',\n type: 'number',\n admin: {\n placeholder: 'No limit',\n step: 100,\n width: '33.3333%',\n },\n validate: (value: null | number | undefined, { req }: { req: { t: TFunction } }) => {\n return validateLimitValue(value, req.t) ?? true\n },\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:field-limit-label'),\n },\n {\n name: 'page',\n type: 'number',\n admin: {\n components: {\n Field: '@payloadcms/plugin-import-export/rsc#Page',\n },\n condition: ({ limit }) => {\n // Show the page field only if limit is set\n return typeof limit === 'number' && limit !== 0\n },\n width: '33.3333%',\n },\n defaultValue: 1,\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:field-page-label'),\n },\n ],\n },\n {\n type: 'row',\n fields: [\n {\n name: 'sort',\n type: 'text',\n admin: {\n components: {\n Field: '@payloadcms/plugin-import-export/rsc#SortBy',\n },\n },\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:field-sort-label'),\n },\n {\n name: 'sortOrder',\n type: 'select',\n admin: {\n components: {\n Field: '@payloadcms/plugin-import-export/rsc#SortOrder',\n },\n // Only show when `sort` has a value\n condition: ({ sort }) => typeof sort === 'string' && sort.trim().length > 0,\n },\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:field-sort-order-label'),\n options: [\n { label: 'Ascending', value: 'asc' },\n { label: 'Descending', value: 'desc' },\n ],\n },\n ...(localeField ? [localeField] : []),\n {\n name: 'drafts',\n type: 'select',\n admin: {\n condition: (data) => {\n const collectionConfig = (config.collections ?? []).find(\n (collection) => collection.slug === data.collectionSlug,\n )\n return Boolean(\n typeof collectionConfig?.versions === 'object' &&\n collectionConfig?.versions?.drafts,\n )\n },\n width: '25%',\n },\n defaultValue: 'yes',\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:field-drafts-label'),\n options: [\n {\n label: ({ t }) => t('general:yes'),\n value: 'yes',\n },\n {\n label: ({ t }) => t('general:no'),\n value: 'no',\n },\n ],\n },\n // {\n // name: 'depth',\n // type: 'number',\n // // @ts-expect-error - this is not correctly typed in plugins right now\n // label: ({ t }) => t('plugin-import-export:field-depth-label'),\n // admin: {\n // width: '33%',\n // },\n // defaultValue: 1,\n // required: true,\n // },\n ],\n },\n {\n name: 'selectionToUse',\n type: 'radio',\n admin: {\n components: {\n Field: '@payloadcms/plugin-import-export/rsc#SelectionToUseField',\n },\n },\n options: [\n {\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:selectionToUse-currentSelection'),\n value: 'currentSelection',\n },\n {\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:selectionToUse-currentFilters'),\n value: 'currentFilters',\n },\n {\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:selectionToUse-allDocuments'),\n value: 'all',\n },\n ],\n virtual: true,\n },\n {\n name: 'fields',\n type: 'text',\n admin: {\n components: {\n Field: '@payloadcms/plugin-import-export/rsc#FieldsToExport',\n },\n },\n hasMany: true,\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:field-fields-label'),\n },\n {\n name: 'collectionSlug',\n type: 'text',\n admin: {\n components: {\n Field: '@payloadcms/plugin-import-export/rsc#CollectionField',\n },\n },\n required: true,\n },\n {\n name: 'where',\n type: 'json',\n admin: {\n hidden: true,\n },\n defaultValue: {},\n hooks: {\n beforeValidate: [\n ({ value }) => {\n return value ?? {}\n },\n ],\n },\n },\n ],\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:exportOptions'),\n },\n {\n name: 'preview',\n type: 'ui',\n admin: {\n components: {\n Field: '@payloadcms/plugin-import-export/rsc#Preview',\n },\n },\n },\n ]\n}\n"],"names":["validateLimitValue","getFilename","getFields","config","pluginConfig","localeField","localization","name","type","admin","width","defaultValue","label","t","options","value","locales","map","locale","code","fields","condition","format","required","placeholder","step","validate","req","components","Field","limit","sort","trim","length","data","collectionConfig","collections","find","collection","slug","collectionSlug","Boolean","versions","drafts","virtual","hasMany","hidden","hooks","beforeValidate"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/export/getFields.ts"],"sourcesContent":["import type { TFunction } from '@payloadcms/translations'\nimport type { Config, Field, SelectField } from 'payload'\n\nimport { getFilename } from '../utilities/getFilename.js'\nimport { validateLimitValue } from '../utilities/validateLimitValue.js'\n\ntype GetFieldsOptions = {\n /**\n * Force a specific format, hiding the format dropdown\n */\n format?: 'csv' | 'json'\n}\n\nexport const getFields = (config: Config, options?: GetFieldsOptions): Field[] => {\n const format = options?.format\n let localeField: SelectField | undefined\n if (config.localization) {\n localeField = {\n name: 'locale',\n type: 'select',\n admin: {\n width: '25%',\n },\n defaultValue: 'all',\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:field-locale-label'),\n options: [\n {\n label: ({ t }) => t('general:allLocales'),\n value: 'all',\n },\n ...config.localization.locales.map((locale) => ({\n label: typeof locale === 'string' ? locale : locale.label,\n value: typeof locale === 'string' ? locale : locale.code,\n })),\n ],\n }\n }\n\n return [\n {\n type: 'collapsible',\n fields: [\n {\n name: 'name',\n type: 'text',\n defaultValue: () => getFilename(),\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:field-name-label'),\n },\n {\n type: 'row',\n fields: [\n {\n name: 'format',\n type: 'select',\n admin: {\n // Hide if a forced format is set via config\n condition: () => !format,\n width: '33.3333%',\n },\n defaultValue: format ?? 'csv',\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:field-format-label'),\n options: [\n {\n label: 'CSV',\n value: 'csv',\n },\n {\n label: 'JSON',\n value: 'json',\n },\n ],\n required: true,\n },\n {\n name: 'limit',\n type: 'number',\n admin: {\n placeholder: 'No limit',\n step: 100,\n width: '33.3333%',\n },\n validate: (value: null | number | undefined, { req }: { req: { t: TFunction } }) => {\n return validateLimitValue(value, req.t) ?? true\n },\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:field-limit-label'),\n },\n {\n name: 'page',\n type: 'number',\n admin: {\n components: {\n Field: '@payloadcms/plugin-import-export/rsc#Page',\n },\n condition: ({ limit }) => {\n // Show the page field only if limit is set\n return typeof limit === 'number' && limit !== 0\n },\n width: '33.3333%',\n },\n defaultValue: 1,\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:field-page-label'),\n },\n ],\n },\n {\n type: 'row',\n fields: [\n {\n name: 'sort',\n type: 'text',\n admin: {\n components: {\n Field: '@payloadcms/plugin-import-export/rsc#SortBy',\n },\n },\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:field-sort-label'),\n },\n {\n name: 'sortOrder',\n type: 'select',\n admin: {\n components: {\n Field: '@payloadcms/plugin-import-export/rsc#SortOrder',\n },\n // Only show when `sort` has a value\n condition: ({ sort }) => typeof sort === 'string' && sort.trim().length > 0,\n },\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:field-sort-order-label'),\n options: [\n { label: 'Ascending', value: 'asc' },\n { label: 'Descending', value: 'desc' },\n ],\n },\n ...(localeField ? [localeField] : []),\n {\n name: 'drafts',\n type: 'select',\n admin: {\n condition: (data) => {\n const collectionConfig = (config.collections ?? []).find(\n (collection) => collection.slug === data.collectionSlug,\n )\n return Boolean(\n typeof collectionConfig?.versions === 'object' &&\n collectionConfig?.versions?.drafts,\n )\n },\n width: '25%',\n },\n defaultValue: 'yes',\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:field-drafts-label'),\n options: [\n {\n label: ({ t }) => t('general:yes'),\n value: 'yes',\n },\n {\n label: ({ t }) => t('general:no'),\n value: 'no',\n },\n ],\n },\n // {\n // name: 'depth',\n // type: 'number',\n // // @ts-expect-error - this is not correctly typed in plugins right now\n // label: ({ t }) => t('plugin-import-export:field-depth-label'),\n // admin: {\n // width: '33%',\n // },\n // defaultValue: 1,\n // required: true,\n // },\n ],\n },\n {\n name: 'selectionToUse',\n type: 'radio',\n admin: {\n components: {\n Field: '@payloadcms/plugin-import-export/rsc#SelectionToUseField',\n },\n },\n options: [\n {\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:selectionToUse-currentSelection'),\n value: 'currentSelection',\n },\n {\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:selectionToUse-currentFilters'),\n value: 'currentFilters',\n },\n {\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:selectionToUse-allDocuments'),\n value: 'all',\n },\n ],\n virtual: true,\n },\n {\n name: 'fields',\n type: 'text',\n admin: {\n components: {\n Field: '@payloadcms/plugin-import-export/rsc#FieldsToExport',\n },\n },\n hasMany: true,\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:field-fields-label'),\n },\n {\n name: 'collectionSlug',\n type: 'text',\n admin: {\n components: {\n Field: '@payloadcms/plugin-import-export/rsc#CollectionField',\n },\n },\n required: true,\n },\n {\n name: 'where',\n type: 'json',\n admin: {\n hidden: true,\n },\n defaultValue: {},\n hooks: {\n beforeValidate: [\n ({ value }) => {\n return value ?? {}\n },\n ],\n },\n },\n ],\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: ({ t }) => t('plugin-import-export:exportOptions'),\n },\n {\n name: 'preview',\n type: 'ui',\n admin: {\n components: {\n Field: '@payloadcms/plugin-import-export/rsc#ExportPreview',\n },\n },\n },\n ]\n}\n"],"names":["getFilename","validateLimitValue","getFields","config","options","format","localeField","localization","name","type","admin","width","defaultValue","label","t","value","locales","map","locale","code","fields","condition","required","placeholder","step","validate","req","components","Field","limit","sort","trim","length","data","collectionConfig","collections","find","collection","slug","collectionSlug","Boolean","versions","drafts","virtual","hasMany","hidden","hooks","beforeValidate"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleDownload.d.ts","sourceRoot":"","sources":["../../src/export/handleDownload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAM7C,eAAO,MAAM,cAAc,QAAe,cAAc,uCAqCvD,CAAA"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { APIError } from 'payload';
|
|
2
|
+
import { createExport } from './createExport.js';
|
|
3
|
+
export const handleDownload = async (req, debug = false)=>{
|
|
4
|
+
try {
|
|
5
|
+
let body;
|
|
6
|
+
if (typeof req?.json === 'function') {
|
|
7
|
+
body = await req.json();
|
|
8
|
+
}
|
|
9
|
+
if (!body || !body.data) {
|
|
10
|
+
throw new APIError('Request data is required.');
|
|
11
|
+
}
|
|
12
|
+
const { collectionSlug } = body.data || {};
|
|
13
|
+
req.payload.logger.info(`Download request received ${collectionSlug}`);
|
|
14
|
+
const { user } = req;
|
|
15
|
+
body.data.userID = user?.id || user?.user?.id;
|
|
16
|
+
body.data.userCollection = user?.collection || user?.user?.collection;
|
|
17
|
+
const res = await createExport({
|
|
18
|
+
...body.data,
|
|
19
|
+
debug,
|
|
20
|
+
download: true,
|
|
21
|
+
req,
|
|
22
|
+
user: req.user
|
|
23
|
+
});
|
|
24
|
+
return res;
|
|
25
|
+
} catch (err) {
|
|
26
|
+
// Return JSON for front-end toast
|
|
27
|
+
return new Response(JSON.stringify({
|
|
28
|
+
errors: [
|
|
29
|
+
{
|
|
30
|
+
message: err.message || 'Something went wrong'
|
|
31
|
+
}
|
|
32
|
+
]
|
|
33
|
+
}), {
|
|
34
|
+
headers: {
|
|
35
|
+
'Content-Type': 'application/json'
|
|
36
|
+
},
|
|
37
|
+
status: 400
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
//# sourceMappingURL=handleDownload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/export/handleDownload.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\n\nimport { APIError } from 'payload'\n\nimport { createExport } from './createExport.js'\n\nexport const handleDownload = async (req: PayloadRequest, debug = false) => {\n try {\n let body\n\n if (typeof req?.json === 'function') {\n body = await req.json()\n }\n\n if (!body || !body.data) {\n throw new APIError('Request data is required.')\n }\n\n const { collectionSlug } = body.data || {}\n\n req.payload.logger.info(`Download request received ${collectionSlug}`)\n\n const { user } = req\n\n body.data.userID = user?.id || user?.user?.id\n body.data.userCollection = user?.collection || user?.user?.collection\n\n const res = await createExport({\n ...body.data,\n debug,\n download: true,\n req,\n user: req.user,\n })\n\n return res as Response\n } catch (err) {\n // Return JSON for front-end toast\n return new Response(\n JSON.stringify({ errors: [{ message: (err as Error).message || 'Something went wrong' }] }),\n { headers: { 'Content-Type': 'application/json' }, status: 400 },\n )\n }\n}\n"],"names":["APIError","createExport","handleDownload","req","debug","body","json","data","collectionSlug","payload","logger","info","user","userID","id","userCollection","collection","res","download","err","Response","JSON","stringify","errors","message","headers","status"],"mappings":"AAEA,SAASA,QAAQ,QAAQ,UAAS;AAElC,SAASC,YAAY,QAAQ,oBAAmB;AAEhD,OAAO,MAAMC,iBAAiB,OAAOC,KAAqBC,QAAQ,KAAK;IACrE,IAAI;QACF,IAAIC;QAEJ,IAAI,OAAOF,KAAKG,SAAS,YAAY;YACnCD,OAAO,MAAMF,IAAIG,IAAI;QACvB;QAEA,IAAI,CAACD,QAAQ,CAACA,KAAKE,IAAI,EAAE;YACvB,MAAM,IAAIP,SAAS;QACrB;QAEA,MAAM,EAAEQ,cAAc,EAAE,GAAGH,KAAKE,IAAI,IAAI,CAAC;QAEzCJ,IAAIM,OAAO,CAACC,MAAM,CAACC,IAAI,CAAC,CAAC,0BAA0B,EAAEH,gBAAgB;QAErE,MAAM,EAAEI,IAAI,EAAE,GAAGT;QAEjBE,KAAKE,IAAI,CAACM,MAAM,GAAGD,MAAME,MAAMF,MAAMA,MAAME;QAC3CT,KAAKE,IAAI,CAACQ,cAAc,GAAGH,MAAMI,cAAcJ,MAAMA,MAAMI;QAE3D,MAAMC,MAAM,MAAMhB,aAAa;YAC7B,GAAGI,KAAKE,IAAI;YACZH;YACAc,UAAU;YACVf;YACAS,MAAMT,IAAIS,IAAI;QAChB;QAEA,OAAOK;IACT,EAAE,OAAOE,KAAK;QACZ,kCAAkC;QAClC,OAAO,IAAIC,SACTC,KAAKC,SAAS,CAAC;YAAEC,QAAQ;gBAAC;oBAAEC,SAAS,AAACL,IAAcK,OAAO,IAAI;gBAAuB;aAAE;QAAC,IACzF;YAAEC,SAAS;gBAAE,gBAAgB;YAAmB;YAAGC,QAAQ;QAAI;IAEnE;AACF,EAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlePreview.d.ts","sourceRoot":"","sources":["../../src/export/handlePreview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,cAAc,EAAS,MAAM,SAAS,CAAA;AAqBpE,eAAO,MAAM,aAAa,QAAe,cAAc,KAAG,OAAO,CAAC,QAAQ,CA0MzE,CAAA"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { addDataAndFileToRequest } from 'payload';
|
|
2
|
+
import { DEFAULT_PREVIEW_LIMIT, MAX_PREVIEW_LIMIT, MIN_PREVIEW_LIMIT, MIN_PREVIEW_PAGE } from '../constants.js';
|
|
3
|
+
import { flattenObject } from '../utilities/flattenObject.js';
|
|
4
|
+
import { getExportFieldFunctions } from '../utilities/getExportFieldFunctions.js';
|
|
5
|
+
import { getFlattenedFieldKeys } from '../utilities/getFlattenedFieldKeys.js';
|
|
6
|
+
import { getSchemaColumns } from '../utilities/getSchemaColumns.js';
|
|
7
|
+
import { getSelect } from '../utilities/getSelect.js';
|
|
8
|
+
import { getValueAtPath } from '../utilities/getvalueAtPath.js';
|
|
9
|
+
import { removeDisabledFields } from '../utilities/removeDisabledFields.js';
|
|
10
|
+
import { setNestedValue } from '../utilities/setNestedValue.js';
|
|
11
|
+
export const handlePreview = async (req)=>{
|
|
12
|
+
await addDataAndFileToRequest(req);
|
|
13
|
+
const { collectionSlug, draft: draftFromReq, fields, limit: exportLimit, locale, previewLimit: rawPreviewLimit = DEFAULT_PREVIEW_LIMIT, previewPage: rawPreviewPage = 1, sort, where: whereFromReq = {} } = req.data;
|
|
14
|
+
// Validate and clamp pagination values to safe bounds
|
|
15
|
+
const previewLimit = Math.max(MIN_PREVIEW_LIMIT, Math.min(rawPreviewLimit, MAX_PREVIEW_LIMIT));
|
|
16
|
+
const previewPage = Math.max(MIN_PREVIEW_PAGE, rawPreviewPage);
|
|
17
|
+
const targetCollection = req.payload.collections[collectionSlug];
|
|
18
|
+
if (!targetCollection) {
|
|
19
|
+
return Response.json({
|
|
20
|
+
error: `Collection with slug ${collectionSlug} not found`
|
|
21
|
+
}, {
|
|
22
|
+
status: 400
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
const select = Array.isArray(fields) && fields.length > 0 ? getSelect(fields) : undefined;
|
|
26
|
+
const draft = draftFromReq === 'yes';
|
|
27
|
+
const collectionHasVersions = Boolean(targetCollection.config.versions);
|
|
28
|
+
// Only filter by _status for versioned collections
|
|
29
|
+
const publishedWhere = collectionHasVersions ? {
|
|
30
|
+
_status: {
|
|
31
|
+
equals: 'published'
|
|
32
|
+
}
|
|
33
|
+
} : {};
|
|
34
|
+
const where = {
|
|
35
|
+
and: [
|
|
36
|
+
whereFromReq,
|
|
37
|
+
draft ? {} : publishedWhere
|
|
38
|
+
]
|
|
39
|
+
};
|
|
40
|
+
// Count total docs matching export criteria
|
|
41
|
+
const countResult = await req.payload.count({
|
|
42
|
+
collection: collectionSlug,
|
|
43
|
+
overrideAccess: false,
|
|
44
|
+
req,
|
|
45
|
+
where
|
|
46
|
+
});
|
|
47
|
+
const totalMatchingDocs = countResult.totalDocs;
|
|
48
|
+
// Calculate actual export count (respecting export limit)
|
|
49
|
+
const exportTotalDocs = exportLimit && exportLimit > 0 ? Math.min(totalMatchingDocs, exportLimit) : totalMatchingDocs;
|
|
50
|
+
// Calculate preview pagination that respects export limit
|
|
51
|
+
// Preview should only show docs that will actually be exported
|
|
52
|
+
const previewStartIndex = (previewPage - 1) * previewLimit;
|
|
53
|
+
// Calculate pagination info based on export limit (not raw DB results)
|
|
54
|
+
const previewTotalPages = exportTotalDocs === 0 ? 0 : Math.ceil(exportTotalDocs / previewLimit);
|
|
55
|
+
const isCSV = req?.data?.format === 'csv';
|
|
56
|
+
// Get locale codes for locale expansion when locale='all'
|
|
57
|
+
const localeCodes = locale === 'all' && req.payload.config.localization ? req.payload.config.localization.localeCodes : undefined;
|
|
58
|
+
// Get disabled fields configuration
|
|
59
|
+
const disabledFields = targetCollection.config.admin?.custom?.['plugin-import-export']?.disabledFields ?? [];
|
|
60
|
+
// Always compute columns for CSV (even if no docs) for consistent schema
|
|
61
|
+
const columns = isCSV ? getSchemaColumns({
|
|
62
|
+
collectionConfig: targetCollection.config,
|
|
63
|
+
disabledFields,
|
|
64
|
+
fields,
|
|
65
|
+
locale: locale ?? undefined,
|
|
66
|
+
localeCodes
|
|
67
|
+
}) : undefined;
|
|
68
|
+
// If we're beyond the export limit, return empty docs with columns
|
|
69
|
+
if (exportLimit && exportLimit > 0 && previewStartIndex >= exportLimit) {
|
|
70
|
+
const response = {
|
|
71
|
+
columns,
|
|
72
|
+
docs: [],
|
|
73
|
+
exportTotalDocs,
|
|
74
|
+
hasNextPage: false,
|
|
75
|
+
hasPrevPage: previewPage > 1,
|
|
76
|
+
limit: previewLimit,
|
|
77
|
+
page: previewPage,
|
|
78
|
+
totalDocs: exportTotalDocs,
|
|
79
|
+
totalPages: previewTotalPages
|
|
80
|
+
};
|
|
81
|
+
return Response.json(response);
|
|
82
|
+
}
|
|
83
|
+
// Fetch preview page with full previewLimit to maintain consistent pagination offsets
|
|
84
|
+
// We'll trim the results afterwards if needed to respect export limit
|
|
85
|
+
const result = await req.payload.find({
|
|
86
|
+
collection: collectionSlug,
|
|
87
|
+
depth: 1,
|
|
88
|
+
draft,
|
|
89
|
+
limit: previewLimit,
|
|
90
|
+
locale,
|
|
91
|
+
overrideAccess: false,
|
|
92
|
+
page: previewPage,
|
|
93
|
+
req,
|
|
94
|
+
select,
|
|
95
|
+
sort,
|
|
96
|
+
where
|
|
97
|
+
});
|
|
98
|
+
// Trim docs to respect export limit boundary
|
|
99
|
+
let docs = result.docs;
|
|
100
|
+
if (exportLimit && exportLimit > 0) {
|
|
101
|
+
const remainingInExport = exportLimit - previewStartIndex;
|
|
102
|
+
if (remainingInExport < docs.length) {
|
|
103
|
+
docs = docs.slice(0, remainingInExport);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Transform docs based on format
|
|
107
|
+
let transformed;
|
|
108
|
+
if (isCSV) {
|
|
109
|
+
const toCSVFunctions = getExportFieldFunctions({
|
|
110
|
+
fields: targetCollection.config.fields
|
|
111
|
+
});
|
|
112
|
+
const possibleKeys = getFlattenedFieldKeys(targetCollection.config.fields, '', {
|
|
113
|
+
localeCodes
|
|
114
|
+
});
|
|
115
|
+
transformed = docs.map((doc)=>{
|
|
116
|
+
const row = flattenObject({
|
|
117
|
+
doc,
|
|
118
|
+
fields,
|
|
119
|
+
toCSVFunctions
|
|
120
|
+
});
|
|
121
|
+
for (const key of possibleKeys){
|
|
122
|
+
if (!(key in row)) {
|
|
123
|
+
row[key] = null;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return row;
|
|
127
|
+
});
|
|
128
|
+
} else {
|
|
129
|
+
transformed = docs.map((doc)=>{
|
|
130
|
+
let output = {
|
|
131
|
+
...doc
|
|
132
|
+
};
|
|
133
|
+
// Remove disabled fields first
|
|
134
|
+
output = removeDisabledFields(output, disabledFields);
|
|
135
|
+
// Then trim to selected fields only (if fields are provided)
|
|
136
|
+
if (Array.isArray(fields) && fields.length > 0) {
|
|
137
|
+
const trimmed = {};
|
|
138
|
+
for (const key of fields){
|
|
139
|
+
const value = getValueAtPath(output, key);
|
|
140
|
+
setNestedValue(trimmed, key, value ?? null);
|
|
141
|
+
}
|
|
142
|
+
output = trimmed;
|
|
143
|
+
}
|
|
144
|
+
return output;
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
const hasNextPage = previewPage < previewTotalPages;
|
|
148
|
+
const hasPrevPage = previewPage > 1;
|
|
149
|
+
const response = {
|
|
150
|
+
columns,
|
|
151
|
+
docs: transformed,
|
|
152
|
+
exportTotalDocs,
|
|
153
|
+
hasNextPage,
|
|
154
|
+
hasPrevPage,
|
|
155
|
+
limit: previewLimit,
|
|
156
|
+
page: previewPage,
|
|
157
|
+
totalDocs: exportTotalDocs,
|
|
158
|
+
totalPages: previewTotalPages
|
|
159
|
+
};
|
|
160
|
+
return Response.json(response);
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
//# sourceMappingURL=handlePreview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/export/handlePreview.ts"],"sourcesContent":["import type { FlattenedField, PayloadRequest, Where } from 'payload'\n\nimport { addDataAndFileToRequest } from 'payload'\n\nimport type { ExportPreviewResponse } from '../types.js'\n\nimport {\n DEFAULT_PREVIEW_LIMIT,\n MAX_PREVIEW_LIMIT,\n MIN_PREVIEW_LIMIT,\n MIN_PREVIEW_PAGE,\n} from '../constants.js'\nimport { flattenObject } from '../utilities/flattenObject.js'\nimport { getExportFieldFunctions } from '../utilities/getExportFieldFunctions.js'\nimport { getFlattenedFieldKeys } from '../utilities/getFlattenedFieldKeys.js'\nimport { getSchemaColumns } from '../utilities/getSchemaColumns.js'\nimport { getSelect } from '../utilities/getSelect.js'\nimport { getValueAtPath } from '../utilities/getvalueAtPath.js'\nimport { removeDisabledFields } from '../utilities/removeDisabledFields.js'\nimport { setNestedValue } from '../utilities/setNestedValue.js'\n\nexport const handlePreview = async (req: PayloadRequest): Promise<Response> => {\n await addDataAndFileToRequest(req)\n\n const {\n collectionSlug,\n draft: draftFromReq,\n fields,\n limit: exportLimit,\n locale,\n previewLimit: rawPreviewLimit = DEFAULT_PREVIEW_LIMIT,\n previewPage: rawPreviewPage = 1,\n sort,\n where: whereFromReq = {},\n } = req.data as {\n collectionSlug: string\n draft?: 'no' | 'yes'\n fields?: string[]\n format?: 'csv' | 'json'\n limit?: number\n locale?: string\n previewLimit?: number\n previewPage?: number\n sort?: any\n where?: any\n }\n\n // Validate and clamp pagination values to safe bounds\n const previewLimit = Math.max(MIN_PREVIEW_LIMIT, Math.min(rawPreviewLimit, MAX_PREVIEW_LIMIT))\n const previewPage = Math.max(MIN_PREVIEW_PAGE, rawPreviewPage)\n\n const targetCollection = req.payload.collections[collectionSlug]\n if (!targetCollection) {\n return Response.json(\n { error: `Collection with slug ${collectionSlug} not found` },\n { status: 400 },\n )\n }\n\n const select = Array.isArray(fields) && fields.length > 0 ? getSelect(fields) : undefined\n const draft = draftFromReq === 'yes'\n const collectionHasVersions = Boolean(targetCollection.config.versions)\n\n // Only filter by _status for versioned collections\n const publishedWhere: Where = collectionHasVersions ? { _status: { equals: 'published' } } : {}\n\n const where: Where = {\n and: [whereFromReq, draft ? {} : publishedWhere],\n }\n\n // Count total docs matching export criteria\n const countResult = await req.payload.count({\n collection: collectionSlug,\n overrideAccess: false,\n req,\n where,\n })\n\n const totalMatchingDocs = countResult.totalDocs\n\n // Calculate actual export count (respecting export limit)\n const exportTotalDocs =\n exportLimit && exportLimit > 0 ? Math.min(totalMatchingDocs, exportLimit) : totalMatchingDocs\n\n // Calculate preview pagination that respects export limit\n // Preview should only show docs that will actually be exported\n const previewStartIndex = (previewPage - 1) * previewLimit\n\n // Calculate pagination info based on export limit (not raw DB results)\n const previewTotalPages = exportTotalDocs === 0 ? 0 : Math.ceil(exportTotalDocs / previewLimit)\n\n const isCSV = req?.data?.format === 'csv'\n\n // Get locale codes for locale expansion when locale='all'\n const localeCodes =\n locale === 'all' && req.payload.config.localization\n ? req.payload.config.localization.localeCodes\n : undefined\n\n // Get disabled fields configuration\n const disabledFields =\n targetCollection.config.admin?.custom?.['plugin-import-export']?.disabledFields ?? []\n\n // Always compute columns for CSV (even if no docs) for consistent schema\n const columns = isCSV\n ? getSchemaColumns({\n collectionConfig: targetCollection.config,\n disabledFields,\n fields,\n locale: locale ?? undefined,\n localeCodes,\n })\n : undefined\n\n // If we're beyond the export limit, return empty docs with columns\n if (exportLimit && exportLimit > 0 && previewStartIndex >= exportLimit) {\n const response: ExportPreviewResponse = {\n columns,\n docs: [],\n exportTotalDocs,\n hasNextPage: false,\n hasPrevPage: previewPage > 1,\n limit: previewLimit,\n page: previewPage,\n totalDocs: exportTotalDocs,\n totalPages: previewTotalPages,\n }\n return Response.json(response)\n }\n\n // Fetch preview page with full previewLimit to maintain consistent pagination offsets\n // We'll trim the results afterwards if needed to respect export limit\n const result = await req.payload.find({\n collection: collectionSlug,\n depth: 1,\n draft,\n limit: previewLimit,\n locale,\n overrideAccess: false,\n page: previewPage,\n req,\n select,\n sort,\n where,\n })\n\n // Trim docs to respect export limit boundary\n let docs = result.docs\n if (exportLimit && exportLimit > 0) {\n const remainingInExport = exportLimit - previewStartIndex\n if (remainingInExport < docs.length) {\n docs = docs.slice(0, remainingInExport)\n }\n }\n\n // Transform docs based on format\n let transformed: Record<string, unknown>[]\n\n if (isCSV) {\n const toCSVFunctions = getExportFieldFunctions({\n fields: targetCollection.config.fields as FlattenedField[],\n })\n\n const possibleKeys = getFlattenedFieldKeys(\n targetCollection.config.fields as FlattenedField[],\n '',\n { localeCodes },\n )\n\n transformed = docs.map((doc) => {\n const row = flattenObject({\n doc,\n fields,\n toCSVFunctions,\n })\n\n for (const key of possibleKeys) {\n if (!(key in row)) {\n row[key] = null\n }\n }\n\n return row\n })\n } else {\n transformed = docs.map((doc) => {\n let output: Record<string, unknown> = { ...doc }\n\n // Remove disabled fields first\n output = removeDisabledFields(output, disabledFields)\n\n // Then trim to selected fields only (if fields are provided)\n if (Array.isArray(fields) && fields.length > 0) {\n const trimmed: Record<string, unknown> = {}\n\n for (const key of fields) {\n const value = getValueAtPath(output, key)\n setNestedValue(trimmed, key, value ?? null)\n }\n\n output = trimmed\n }\n\n return output\n })\n }\n\n const hasNextPage = previewPage < previewTotalPages\n const hasPrevPage = previewPage > 1\n\n const response: ExportPreviewResponse = {\n columns,\n docs: transformed,\n exportTotalDocs,\n hasNextPage,\n hasPrevPage,\n limit: previewLimit,\n page: previewPage,\n totalDocs: exportTotalDocs,\n totalPages: previewTotalPages,\n }\n\n return Response.json(response)\n}\n"],"names":["addDataAndFileToRequest","DEFAULT_PREVIEW_LIMIT","MAX_PREVIEW_LIMIT","MIN_PREVIEW_LIMIT","MIN_PREVIEW_PAGE","flattenObject","getExportFieldFunctions","getFlattenedFieldKeys","getSchemaColumns","getSelect","getValueAtPath","removeDisabledFields","setNestedValue","handlePreview","req","collectionSlug","draft","draftFromReq","fields","limit","exportLimit","locale","previewLimit","rawPreviewLimit","previewPage","rawPreviewPage","sort","where","whereFromReq","data","Math","max","min","targetCollection","payload","collections","Response","json","error","status","select","Array","isArray","length","undefined","collectionHasVersions","Boolean","config","versions","publishedWhere","_status","equals","and","countResult","count","collection","overrideAccess","totalMatchingDocs","totalDocs","exportTotalDocs","previewStartIndex","previewTotalPages","ceil","isCSV","format","localeCodes","localization","disabledFields","admin","custom","columns","collectionConfig","response","docs","hasNextPage","hasPrevPage","page","totalPages","result","find","depth","remainingInExport","slice","transformed","toCSVFunctions","possibleKeys","map","doc","row","key","output","trimmed","value"],"mappings":"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"}
|
package/dist/exports/rsc.d.ts
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
export { CollectionField } from '../components/CollectionField/index.js';
|
|
2
2
|
export { ExportListMenuItem } from '../components/ExportListMenuItem/index.js';
|
|
3
|
+
export { ExportPreview } from '../components/ExportPreview/index.js';
|
|
3
4
|
export { ExportSaveButton } from '../components/ExportSaveButton/index.js';
|
|
4
5
|
export { FieldsToExport } from '../components/FieldsToExport/index.js';
|
|
6
|
+
export { ImportCollectionField } from '../components/ImportCollectionField/index.js';
|
|
5
7
|
export { ImportExportProvider } from '../components/ImportExportProvider/index.js';
|
|
8
|
+
export { ImportListMenuItem } from '../components/ImportListMenuItem/index.js';
|
|
9
|
+
export { ImportPreview } from '../components/ImportPreview/index.js';
|
|
10
|
+
export { ImportSaveButton } from '../components/ImportSaveButton/index.js';
|
|
6
11
|
export { Page } from '../components/Page/index.js';
|
|
7
|
-
export { Preview } from '../components/Preview/index.js';
|
|
8
12
|
export { SelectionToUseField } from '../components/SelectionToUseField/index.js';
|
|
9
13
|
export { SortBy } from '../components/SortBy/index.js';
|
|
10
14
|
export { SortOrder } from '../components/SortOrder/index.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rsc.d.ts","sourceRoot":"","sources":["../../src/exports/rsc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAA;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAA;AAClF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"rsc.d.ts","sourceRoot":"","sources":["../../src/exports/rsc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAA;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAA;AACpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAA;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAA;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAA;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA"}
|
package/dist/exports/rsc.js
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
export { CollectionField } from '../components/CollectionField/index.js';
|
|
2
2
|
export { ExportListMenuItem } from '../components/ExportListMenuItem/index.js';
|
|
3
|
+
export { ExportPreview } from '../components/ExportPreview/index.js';
|
|
3
4
|
export { ExportSaveButton } from '../components/ExportSaveButton/index.js';
|
|
4
5
|
export { FieldsToExport } from '../components/FieldsToExport/index.js';
|
|
6
|
+
export { ImportCollectionField } from '../components/ImportCollectionField/index.js';
|
|
5
7
|
export { ImportExportProvider } from '../components/ImportExportProvider/index.js';
|
|
8
|
+
export { ImportListMenuItem } from '../components/ImportListMenuItem/index.js';
|
|
9
|
+
export { ImportPreview } from '../components/ImportPreview/index.js';
|
|
10
|
+
export { ImportSaveButton } from '../components/ImportSaveButton/index.js';
|
|
6
11
|
export { Page } from '../components/Page/index.js';
|
|
7
|
-
export { Preview } from '../components/Preview/index.js';
|
|
8
12
|
export { SelectionToUseField } from '../components/SelectionToUseField/index.js';
|
|
9
13
|
export { SortBy } from '../components/SortBy/index.js';
|
|
10
14
|
export { SortOrder } from '../components/SortOrder/index.js';
|
package/dist/exports/rsc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/exports/rsc.ts"],"sourcesContent":["export { CollectionField } from '../components/CollectionField/index.js'\nexport { ExportListMenuItem } from '../components/ExportListMenuItem/index.js'\nexport { ExportSaveButton } from '../components/ExportSaveButton/index.js'\nexport { FieldsToExport } from '../components/FieldsToExport/index.js'\nexport { ImportExportProvider } from '../components/ImportExportProvider/index.js'\nexport {
|
|
1
|
+
{"version":3,"sources":["../../src/exports/rsc.ts"],"sourcesContent":["export { CollectionField } from '../components/CollectionField/index.js'\nexport { ExportListMenuItem } from '../components/ExportListMenuItem/index.js'\nexport { ExportPreview } from '../components/ExportPreview/index.js'\nexport { ExportSaveButton } from '../components/ExportSaveButton/index.js'\nexport { FieldsToExport } from '../components/FieldsToExport/index.js'\nexport { ImportCollectionField } from '../components/ImportCollectionField/index.js'\nexport { ImportExportProvider } from '../components/ImportExportProvider/index.js'\nexport { ImportListMenuItem } from '../components/ImportListMenuItem/index.js'\nexport { ImportPreview } from '../components/ImportPreview/index.js'\nexport { ImportSaveButton } from '../components/ImportSaveButton/index.js'\nexport { Page } from '../components/Page/index.js'\nexport { SelectionToUseField } from '../components/SelectionToUseField/index.js'\nexport { SortBy } from '../components/SortBy/index.js'\nexport { SortOrder } from '../components/SortOrder/index.js'\n"],"names":["CollectionField","ExportListMenuItem","ExportPreview","ExportSaveButton","FieldsToExport","ImportCollectionField","ImportExportProvider","ImportListMenuItem","ImportPreview","ImportSaveButton","Page","SelectionToUseField","SortBy","SortOrder"],"mappings":"AAAA,SAASA,eAAe,QAAQ,yCAAwC;AACxE,SAASC,kBAAkB,QAAQ,4CAA2C;AAC9E,SAASC,aAAa,QAAQ,uCAAsC;AACpE,SAASC,gBAAgB,QAAQ,0CAAyC;AAC1E,SAASC,cAAc,QAAQ,wCAAuC;AACtE,SAASC,qBAAqB,QAAQ,+CAA8C;AACpF,SAASC,oBAAoB,QAAQ,8CAA6C;AAClF,SAASC,kBAAkB,QAAQ,4CAA2C;AAC9E,SAASC,aAAa,QAAQ,uCAAsC;AACpE,SAASC,gBAAgB,QAAQ,0CAAyC;AAC1E,SAASC,IAAI,QAAQ,8BAA6B;AAClD,SAASC,mBAAmB,QAAQ,6CAA4C;AAChF,SAASC,MAAM,QAAQ,gCAA+B;AACtD,SAASC,SAAS,QAAQ,mCAAkC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { PayloadRequest, TypedUser } from 'payload';
|
|
2
|
+
import type { ImportMode, ImportResult } from './createImport.js';
|
|
3
|
+
import { type BatchError } from '../utilities/useBatchProcessor.js';
|
|
4
|
+
/**
|
|
5
|
+
* Import-specific batch processor options
|
|
6
|
+
*/
|
|
7
|
+
export interface ImportBatchProcessorOptions {
|
|
8
|
+
batchSize?: number;
|
|
9
|
+
defaultVersionStatus?: 'draft' | 'published';
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Import-specific error type extending the generic BatchError
|
|
13
|
+
*/
|
|
14
|
+
export interface ImportError extends BatchError<Record<string, unknown>> {
|
|
15
|
+
documentData: Record<string, unknown>;
|
|
16
|
+
field?: string;
|
|
17
|
+
fieldLabel?: string;
|
|
18
|
+
rowNumber: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Result from processing a single import batch
|
|
22
|
+
*/
|
|
23
|
+
export interface ImportBatchResult {
|
|
24
|
+
failed: Array<ImportError>;
|
|
25
|
+
successful: Array<{
|
|
26
|
+
document: Record<string, unknown>;
|
|
27
|
+
index: number;
|
|
28
|
+
operation?: 'created' | 'updated';
|
|
29
|
+
result: Record<string, unknown>;
|
|
30
|
+
}>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Options for processing an import operation
|
|
34
|
+
*/
|
|
35
|
+
export interface ImportProcessOptions {
|
|
36
|
+
collectionSlug: string;
|
|
37
|
+
documents: Record<string, unknown>[];
|
|
38
|
+
importMode: ImportMode;
|
|
39
|
+
matchField?: string;
|
|
40
|
+
req: PayloadRequest;
|
|
41
|
+
user?: TypedUser;
|
|
42
|
+
}
|
|
43
|
+
export declare function createImportBatchProcessor(options?: ImportBatchProcessorOptions): {
|
|
44
|
+
processImport: (processOptions: ImportProcessOptions) => Promise<ImportResult>;
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=batchProcessor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batchProcessor.d.ts","sourceRoot":"","sources":["../../src/import/batchProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEjE,OAAO,EACL,KAAK,UAAU,EAIhB,MAAM,mCAAmC,CAAA;AAE1C;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oBAAoB,CAAC,EAAE,OAAO,GAAG,WAAW,CAAA;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,CAAA;IAC1B,UAAU,EAAE,KAAK,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACjC,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;QACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAChC,CAAC,CAAA;CACH;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IACpC,UAAU,EAAE,UAAU,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,cAAc,CAAA;IACnB,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AA8gBD,wBAAgB,0BAA0B,CAAC,OAAO,GAAE,2BAAgC;oCAMrC,oBAAoB,KAAG,OAAO,CAAC,YAAY,CAAC;EA2D1F"}
|