@payloadcms/plugin-import-export 3.77.0-canary.8 → 3.77.0-internal-debug.98d2e4d
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ExportPreview/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ExportPreview/index.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAqD,MAAM,OAAO,CAAA;AASzE,OAAO,cAAc,CAAA;AAKrB,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAkRjC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/ExportPreview/index.tsx"],"sourcesContent":["'use client'\nimport type { Column } from '@payloadcms/ui'\nimport type { ClientField, PaginatedDocs, Where } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n CodeEditorLazy,\n Pagination,\n PerPage,\n Table,\n Translation,\n useConfig,\n useDebouncedEffect,\n useDocumentInfo,\n useFormFields,\n useTranslation,\n} from '@payloadcms/ui'\nimport React, { useEffect, useRef, useState, useTransition } from 'react'\n\nimport type {\n PluginImportExportTranslationKeys,\n PluginImportExportTranslations,\n} from '../../translations/index.js'\nimport type { ExportPreviewResponse } from '../../types.js'\n\nimport { DEFAULT_PREVIEW_LIMIT, PREVIEW_LIMIT_OPTIONS } from '../../constants.js'\nimport './index.scss'\nimport { useImportExport } from '../ImportExportProvider/index.js'\n\nconst baseClass = 'export-preview'\n\nexport const ExportPreview: React.FC = () => {\n const [isPending, startTransition] = useTransition()\n const { collection } = useImportExport()\n const {\n config,\n config: { routes },\n } = useConfig()\n const { collectionSlug } = useDocumentInfo()\n const { draft, fields, format, limit, locale, sort, where } = useFormFields(([fields]) => {\n return {\n draft: fields['drafts']?.value,\n fields: fields['fields']?.value,\n format: fields['format']?.value,\n limit: fields['limit']?.value as number,\n locale: fields['locale']?.value as string,\n sort: fields['sort']?.value as string,\n where: fields['where']?.value as Where,\n }\n })\n const [dataToRender, setDataToRender] = useState<any[]>([])\n const [exportTotalDocs, setExportTotalDocs] = useState<number>(0)\n const [maxLimit, setMaxLimit] = useState<number | undefined>(undefined)\n const [columns, setColumns] = useState<Column[]>([])\n const { i18n, t } = useTranslation<\n PluginImportExportTranslations,\n PluginImportExportTranslationKeys\n >()\n\n // Preview pagination state (separate from export config)\n const [previewPage, setPreviewPage] = useState(1)\n const [previewLimit, setPreviewLimit] = useState(DEFAULT_PREVIEW_LIMIT)\n const [paginationData, setPaginationData] = useState<null | Pick<\n PaginatedDocs,\n 'hasNextPage' | 'hasPrevPage' | 'limit' | 'nextPage' | 'page' | 'prevPage' | 'totalPages'\n >>(null)\n\n // Track previous export config to reset preview page when it changes\n const prevExportConfigRef = useRef({ draft, fields, format, limit, locale, sort, where })\n\n // Reset preview page when export config changes\n useEffect(() => {\n const prevConfig = prevExportConfigRef.current\n const configChanged =\n prevConfig.draft !== draft ||\n prevConfig.limit !== limit ||\n prevConfig.locale !== locale ||\n prevConfig.sort !== sort ||\n JSON.stringify(prevConfig.fields) !== JSON.stringify(fields) ||\n JSON.stringify(prevConfig.where) !== JSON.stringify(where)\n\n if (configChanged) {\n setPreviewPage(1)\n prevExportConfigRef.current = { draft, fields, format, limit, locale, sort, where }\n }\n }, [draft, fields, format, limit, locale, sort, where])\n\n const targetCollectionSlug = typeof collection === 'string' && collection\n\n const isCSV = format === 'csv'\n\n useDebouncedEffect(\n () => {\n if (!collectionSlug || !targetCollectionSlug) {\n return\n }\n\n const abortController = new AbortController()\n\n const fetchData = async () => {\n try {\n const res = await fetch(`${routes.api}/${collectionSlug}/export-preview`, {\n body: JSON.stringify({\n collectionSlug: targetCollectionSlug,\n draft,\n fields,\n format,\n limit,\n locale,\n previewLimit,\n previewPage,\n sort,\n where,\n }),\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n method: 'POST',\n signal: abortController.signal,\n })\n\n if (!res.ok) {\n return\n }\n\n const {\n columns: serverColumns,\n docs,\n exportTotalDocs: serverExportTotalDocs,\n hasNextPage,\n hasPrevPage,\n limit: responseLimit,\n maxLimit: serverMaxLimit,\n page: responsePage,\n totalPages,\n }: ExportPreviewResponse = await res.json()\n\n // For CSV: use server-provided columns (from getSchemaColumns) for consistent ordering\n // For JSON: derive keys from docs\n const allKeys = Array.from(new Set(docs.flatMap((doc) => Object.keys(doc))))\n\n // Use server columns if available (CSV format), otherwise fall back to data-derived keys\n const fieldKeys = serverColumns && serverColumns.length > 0 ? serverColumns : allKeys\n\n // Build columns based on field keys\n const newColumns: Column[] = fieldKeys.map((key) => ({\n accessor: key,\n active: true,\n field: { name: key } as ClientField,\n Heading: getTranslation(key, i18n),\n renderedCells: docs.map((doc: Record<string, unknown>) => {\n const val = doc[key]\n\n if (val === undefined || val === null) {\n return null\n }\n\n // Avoid ESLint warning by type-checking before calling String()\n if (typeof val === 'string' || typeof val === 'number' || typeof val === 'boolean') {\n return String(val)\n }\n\n if (Array.isArray(val)) {\n return val.map(String).join(', ')\n }\n\n return JSON.stringify(val)\n }),\n }))\n\n setExportTotalDocs(serverExportTotalDocs)\n setMaxLimit(serverMaxLimit)\n setPaginationData({\n hasNextPage,\n hasPrevPage,\n limit: responseLimit,\n nextPage: responsePage + 1,\n page: responsePage,\n prevPage: responsePage - 1,\n totalPages,\n })\n setColumns(newColumns)\n setDataToRender(docs)\n } catch (error) {\n console.error('Error fetching preview data:', error)\n }\n }\n\n startTransition(async () => await fetchData())\n\n return () => {\n if (!abortController.signal.aborted) {\n abortController.abort('Component unmounted')\n }\n }\n },\n [\n collectionSlug,\n draft,\n fields,\n format,\n i18n,\n limit,\n locale,\n previewLimit,\n previewPage,\n sort,\n where,\n routes.api,\n targetCollectionSlug,\n ],\n 500,\n )\n\n const handlePageChange = (page: number) => {\n setPreviewPage(page)\n }\n\n const handlePerPageChange = (newLimit: number) => {\n setPreviewLimit(newLimit)\n setPreviewPage(1)\n }\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n <h3>\n <Translation i18nKey=\"version:preview\" t={t} />\n </h3>\n {exportTotalDocs > 0 && !isPending && (\n <div className={`${baseClass}__export-info`}>\n <span className={`${baseClass}__export-count`}>\n <Translation\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n i18nKey=\"plugin-import-export:documentsToExport\"\n t={t}\n variables={{\n count: exportTotalDocs,\n }}\n />\n </span>\n {typeof maxLimit === 'number' &&\n maxLimit > 0 &&\n typeof limit === 'number' &&\n limit > maxLimit && (\n <span className={`${baseClass}__limit-capped`}>\n <Translation\n // @ts-expect-error - plugin translations not typed\n i18nKey=\"plugin-import-export:limitCapped\"\n t={t}\n variables={{\n limit: maxLimit,\n }}\n />\n </span>\n )}\n </div>\n )}\n </div>\n {isPending && !dataToRender && (\n <div className={`${baseClass}__loading`}>\n <Translation i18nKey=\"general:loading\" t={t} />\n </div>\n )}\n {dataToRender &&\n (isCSV ? (\n <Table columns={columns} data={dataToRender} />\n ) : (\n <CodeEditorLazy language=\"json\" readOnly value={JSON.stringify(dataToRender, null, 2)} />\n ))}\n {paginationData && exportTotalDocs > 0 && (\n <div className={`${baseClass}__pagination`}>\n {paginationData.totalPages > 1 && (\n <Pagination\n hasNextPage={paginationData.hasNextPage}\n hasPrevPage={paginationData.hasPrevPage}\n nextPage={paginationData.nextPage ?? undefined}\n numberOfNeighbors={1}\n onChange={handlePageChange}\n page={paginationData.page}\n prevPage={paginationData.prevPage ?? undefined}\n totalPages={paginationData.totalPages}\n />\n )}\n <span className={`${baseClass}__page-info`}>\n <Translation\n // @ts-expect-error - plugin translations not typed\n i18nKey=\"plugin-import-export:previewPageInfo\"\n t={t}\n variables={{\n end: Math.min((paginationData.page ?? 1) * previewLimit, exportTotalDocs),\n start: ((paginationData.page ?? 1) - 1) * previewLimit + 1,\n total: exportTotalDocs,\n }}\n />\n </span>\n <PerPage\n handleChange={handlePerPageChange}\n limit={previewLimit}\n limits={PREVIEW_LIMIT_OPTIONS}\n />\n </div>\n )}\n </div>\n )\n}\n"],"names":["getTranslation","CodeEditorLazy","Pagination","PerPage","Table","Translation","useConfig","useDebouncedEffect","useDocumentInfo","useFormFields","useTranslation","React","useEffect","useRef","useState","useTransition","DEFAULT_PREVIEW_LIMIT","PREVIEW_LIMIT_OPTIONS","useImportExport","baseClass","ExportPreview","isPending","startTransition","collection","config","routes","collectionSlug","draft","fields","format","limit","locale","sort","where","value","dataToRender","setDataToRender","exportTotalDocs","setExportTotalDocs","maxLimit","setMaxLimit","undefined","columns","setColumns","i18n","t","previewPage","setPreviewPage","previewLimit","setPreviewLimit","paginationData","setPaginationData","prevExportConfigRef","prevConfig","current","configChanged","JSON","stringify","targetCollectionSlug","isCSV","abortController","AbortController","fetchData","res","fetch","api","body","credentials","headers","method","signal","ok","serverColumns","docs","serverExportTotalDocs","hasNextPage","hasPrevPage","responseLimit","serverMaxLimit","page","responsePage","totalPages","json","allKeys","Array","from","Set","flatMap","doc","Object","keys","fieldKeys","length","newColumns","map","key","accessor","active","field","name","Heading","renderedCells","val","String","isArray","join","nextPage","prevPage","error","console","aborted","abort","handlePageChange","handlePerPageChange","newLimit","div","className","h3","i18nKey","span","variables","count","data","language","readOnly","numberOfNeighbors","onChange","end","Math","min","start","total","handleChange","limits"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/ExportPreview/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientField, Column, PaginatedDocs, Where } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n CodeEditorLazy,\n Pagination,\n PerPage,\n Table,\n Translation,\n useConfig,\n useDebouncedEffect,\n useDocumentInfo,\n useFormFields,\n useTranslation,\n} from '@payloadcms/ui'\nimport React, { useEffect, useRef, useState, useTransition } from 'react'\n\nimport type {\n PluginImportExportTranslationKeys,\n PluginImportExportTranslations,\n} from '../../translations/index.js'\nimport type { ExportPreviewResponse } from '../../types.js'\n\nimport { DEFAULT_PREVIEW_LIMIT, PREVIEW_LIMIT_OPTIONS } from '../../constants.js'\nimport './index.scss'\nimport { useImportExport } from '../ImportExportProvider/index.js'\n\nconst baseClass = 'export-preview'\n\nexport const ExportPreview: React.FC = () => {\n const [isPending, startTransition] = useTransition()\n const { collection } = useImportExport()\n const {\n config,\n config: { routes },\n } = useConfig()\n const { collectionSlug } = useDocumentInfo()\n const { draft, fields, format, limit, locale, sort, where } = useFormFields(([fields]) => {\n return {\n draft: fields['drafts']?.value,\n fields: fields['fields']?.value,\n format: fields['format']?.value,\n limit: fields['limit']?.value as number,\n locale: fields['locale']?.value as string,\n sort: fields['sort']?.value as string,\n where: fields['where']?.value as Where,\n }\n })\n const [dataToRender, setDataToRender] = useState<any[]>([])\n const [exportTotalDocs, setExportTotalDocs] = useState<number>(0)\n const [maxLimit, setMaxLimit] = useState<number | undefined>(undefined)\n const [columns, setColumns] = useState<Column[]>([])\n const { i18n, t } = useTranslation<\n PluginImportExportTranslations,\n PluginImportExportTranslationKeys\n >()\n\n // Preview pagination state (separate from export config)\n const [previewPage, setPreviewPage] = useState(1)\n const [previewLimit, setPreviewLimit] = useState(DEFAULT_PREVIEW_LIMIT)\n const [paginationData, setPaginationData] = useState<null | Pick<\n PaginatedDocs,\n 'hasNextPage' | 'hasPrevPage' | 'limit' | 'nextPage' | 'page' | 'prevPage' | 'totalPages'\n >>(null)\n\n // Track previous export config to reset preview page when it changes\n const prevExportConfigRef = useRef({ draft, fields, format, limit, locale, sort, where })\n\n // Reset preview page when export config changes\n useEffect(() => {\n const prevConfig = prevExportConfigRef.current\n const configChanged =\n prevConfig.draft !== draft ||\n prevConfig.limit !== limit ||\n prevConfig.locale !== locale ||\n prevConfig.sort !== sort ||\n JSON.stringify(prevConfig.fields) !== JSON.stringify(fields) ||\n JSON.stringify(prevConfig.where) !== JSON.stringify(where)\n\n if (configChanged) {\n setPreviewPage(1)\n prevExportConfigRef.current = { draft, fields, format, limit, locale, sort, where }\n }\n }, [draft, fields, format, limit, locale, sort, where])\n\n const targetCollectionSlug = typeof collection === 'string' && collection\n\n const isCSV = format === 'csv'\n\n useDebouncedEffect(\n () => {\n if (!collectionSlug || !targetCollectionSlug) {\n return\n }\n\n const abortController = new AbortController()\n\n const fetchData = async () => {\n try {\n const res = await fetch(`${routes.api}/${collectionSlug}/export-preview`, {\n body: JSON.stringify({\n collectionSlug: targetCollectionSlug,\n draft,\n fields,\n format,\n limit,\n locale,\n previewLimit,\n previewPage,\n sort,\n where,\n }),\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n method: 'POST',\n signal: abortController.signal,\n })\n\n if (!res.ok) {\n return\n }\n\n const {\n columns: serverColumns,\n docs,\n exportTotalDocs: serverExportTotalDocs,\n hasNextPage,\n hasPrevPage,\n limit: responseLimit,\n maxLimit: serverMaxLimit,\n page: responsePage,\n totalPages,\n }: ExportPreviewResponse = await res.json()\n\n // For CSV: use server-provided columns (from getSchemaColumns) for consistent ordering\n // For JSON: derive keys from docs\n const allKeys = Array.from(new Set(docs.flatMap((doc) => Object.keys(doc))))\n\n // Use server columns if available (CSV format), otherwise fall back to data-derived keys\n const fieldKeys = serverColumns && serverColumns.length > 0 ? serverColumns : allKeys\n\n // Build columns based on field keys\n const newColumns: Column[] = fieldKeys.map((key) => ({\n accessor: key,\n active: true,\n field: { name: key } as ClientField,\n Heading: getTranslation(key, i18n),\n renderedCells: docs.map((doc: Record<string, unknown>) => {\n const val = doc[key]\n\n if (val === undefined || val === null) {\n return null\n }\n\n // Avoid ESLint warning by type-checking before calling String()\n if (typeof val === 'string' || typeof val === 'number' || typeof val === 'boolean') {\n return String(val)\n }\n\n if (Array.isArray(val)) {\n return val.map(String).join(', ')\n }\n\n return JSON.stringify(val)\n }),\n }))\n\n setExportTotalDocs(serverExportTotalDocs)\n setMaxLimit(serverMaxLimit)\n setPaginationData({\n hasNextPage,\n hasPrevPage,\n limit: responseLimit,\n nextPage: responsePage + 1,\n page: responsePage,\n prevPage: responsePage - 1,\n totalPages,\n })\n setColumns(newColumns)\n setDataToRender(docs)\n } catch (error) {\n console.error('Error fetching preview data:', error)\n }\n }\n\n startTransition(async () => await fetchData())\n\n return () => {\n if (!abortController.signal.aborted) {\n abortController.abort('Component unmounted')\n }\n }\n },\n [\n collectionSlug,\n draft,\n fields,\n format,\n i18n,\n limit,\n locale,\n previewLimit,\n previewPage,\n sort,\n where,\n routes.api,\n targetCollectionSlug,\n ],\n 500,\n )\n\n const handlePageChange = (page: number) => {\n setPreviewPage(page)\n }\n\n const handlePerPageChange = (newLimit: number) => {\n setPreviewLimit(newLimit)\n setPreviewPage(1)\n }\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n <h3>\n <Translation i18nKey=\"version:preview\" t={t} />\n </h3>\n {exportTotalDocs > 0 && !isPending && (\n <div className={`${baseClass}__export-info`}>\n <span className={`${baseClass}__export-count`}>\n <Translation\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n i18nKey=\"plugin-import-export:documentsToExport\"\n t={t}\n variables={{\n count: exportTotalDocs,\n }}\n />\n </span>\n {typeof maxLimit === 'number' &&\n maxLimit > 0 &&\n typeof limit === 'number' &&\n limit > maxLimit && (\n <span className={`${baseClass}__limit-capped`}>\n <Translation\n // @ts-expect-error - plugin translations not typed\n i18nKey=\"plugin-import-export:limitCapped\"\n t={t}\n variables={{\n limit: maxLimit,\n }}\n />\n </span>\n )}\n </div>\n )}\n </div>\n {isPending && !dataToRender && (\n <div className={`${baseClass}__loading`}>\n <Translation i18nKey=\"general:loading\" t={t} />\n </div>\n )}\n {dataToRender &&\n (isCSV ? (\n <Table columns={columns} data={dataToRender} />\n ) : (\n <CodeEditorLazy language=\"json\" readOnly value={JSON.stringify(dataToRender, null, 2)} />\n ))}\n {paginationData && exportTotalDocs > 0 && (\n <div className={`${baseClass}__pagination`}>\n {paginationData.totalPages > 1 && (\n <Pagination\n hasNextPage={paginationData.hasNextPage}\n hasPrevPage={paginationData.hasPrevPage}\n nextPage={paginationData.nextPage ?? undefined}\n numberOfNeighbors={1}\n onChange={handlePageChange}\n page={paginationData.page}\n prevPage={paginationData.prevPage ?? undefined}\n totalPages={paginationData.totalPages}\n />\n )}\n <span className={`${baseClass}__page-info`}>\n <Translation\n // @ts-expect-error - plugin translations not typed\n i18nKey=\"plugin-import-export:previewPageInfo\"\n t={t}\n variables={{\n end: Math.min((paginationData.page ?? 1) * previewLimit, exportTotalDocs),\n start: ((paginationData.page ?? 1) - 1) * previewLimit + 1,\n total: exportTotalDocs,\n }}\n />\n </span>\n <PerPage\n handleChange={handlePerPageChange}\n limit={previewLimit}\n limits={PREVIEW_LIMIT_OPTIONS}\n />\n </div>\n )}\n </div>\n )\n}\n"],"names":["getTranslation","CodeEditorLazy","Pagination","PerPage","Table","Translation","useConfig","useDebouncedEffect","useDocumentInfo","useFormFields","useTranslation","React","useEffect","useRef","useState","useTransition","DEFAULT_PREVIEW_LIMIT","PREVIEW_LIMIT_OPTIONS","useImportExport","baseClass","ExportPreview","isPending","startTransition","collection","config","routes","collectionSlug","draft","fields","format","limit","locale","sort","where","value","dataToRender","setDataToRender","exportTotalDocs","setExportTotalDocs","maxLimit","setMaxLimit","undefined","columns","setColumns","i18n","t","previewPage","setPreviewPage","previewLimit","setPreviewLimit","paginationData","setPaginationData","prevExportConfigRef","prevConfig","current","configChanged","JSON","stringify","targetCollectionSlug","isCSV","abortController","AbortController","fetchData","res","fetch","api","body","credentials","headers","method","signal","ok","serverColumns","docs","serverExportTotalDocs","hasNextPage","hasPrevPage","responseLimit","serverMaxLimit","page","responsePage","totalPages","json","allKeys","Array","from","Set","flatMap","doc","Object","keys","fieldKeys","length","newColumns","map","key","accessor","active","field","name","Heading","renderedCells","val","String","isArray","join","nextPage","prevPage","error","console","aborted","abort","handlePageChange","handlePerPageChange","newLimit","div","className","h3","i18nKey","span","variables","count","data","language","readOnly","numberOfNeighbors","onChange","end","Math","min","start","total","handleChange","limits"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ImportPreview/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ImportPreview/index.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAkC,MAAM,OAAO,CAAA;AAStD,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EA2mBjC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/ImportPreview/index.tsx"],"sourcesContent":["'use client'\nimport type { Column } from '@payloadcms/ui'\nimport type { ClientField, PaginatedDocs } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Pagination,\n PerPage,\n Table,\n Translation,\n useConfig,\n useDebouncedEffect,\n useDocumentInfo,\n useField,\n useFormFields,\n useTranslation,\n} from '@payloadcms/ui'\nimport { formatDocTitle } from '@payloadcms/ui/shared'\nimport { fieldAffectsData, getObjectDotNotation } from 'payload/shared'\nimport React, { useState, useTransition } from 'react'\n\nimport type {\n PluginImportExportTranslationKeys,\n PluginImportExportTranslations,\n} from '../../translations/index.js'\nimport type { ImportPreviewResponse } from '../../types.js'\n\nimport { DEFAULT_PREVIEW_LIMIT, PREVIEW_LIMIT_OPTIONS } from '../../constants.js'\nimport './index.scss'\n\nconst baseClass = 'import-preview'\n\nexport const ImportPreview: React.FC = () => {\n const [isPending, startTransition] = useTransition()\n const {\n config,\n config: { routes },\n } = useConfig()\n const { collectionSlug } = useDocumentInfo()\n const { i18n, t } = useTranslation<\n PluginImportExportTranslations,\n PluginImportExportTranslationKeys\n >()\n\n const { value: targetCollectionSlug } = useField<string>({ path: 'collectionSlug' })\n const { value: importMode } = useField<string>({ path: 'importMode' })\n const { value: matchField } = useField<string>({ path: 'matchField' })\n const { value: filename } = useField<string>({ path: 'filename' })\n const { value: url } = useField<string>({ path: 'url' })\n const { value: mimeType } = useField<string>({ path: 'mimeType' })\n const { value: status } = useField<string>({ path: 'status' })\n const { value: summary } = useField<any>({ path: 'summary' })\n\n // Access the file field directly from form fields\n const fileField = useFormFields(([fields]) => fields?.file || null)\n\n const [dataToRender, setDataToRender] = useState<Record<string, unknown>[]>([])\n const [columns, setColumns] = useState<Column[]>([])\n const [totalDocs, setTotalDocs] = useState<number>(0)\n const [error, setError] = useState<null | string>(null)\n\n // Preview pagination state\n const [previewPage, setPreviewPage] = useState(1)\n const [previewLimit, setPreviewLimit] = useState(DEFAULT_PREVIEW_LIMIT)\n const [paginationData, setPaginationData] = useState<null | Pick<\n PaginatedDocs,\n 'hasNextPage' | 'hasPrevPage' | 'limit' | 'nextPage' | 'page' | 'prevPage' | 'totalPages'\n >>(null)\n\n const collectionConfig = React.useMemo(\n () => config.collections.find((c) => c.slug === targetCollectionSlug),\n [targetCollectionSlug, config.collections],\n )\n\n useDebouncedEffect(\n () => {\n if (!collectionSlug || !targetCollectionSlug) {\n return\n }\n\n if (!targetCollectionSlug || (!url && !fileField?.value)) {\n setDataToRender([])\n setColumns([])\n setTotalDocs(0)\n setPaginationData(null)\n return\n }\n\n if (!collectionConfig) {\n setDataToRender([])\n setColumns([])\n setTotalDocs(0)\n setPaginationData(null)\n return\n }\n\n const abortController = new AbortController()\n\n const processFileData = async () => {\n setError(null)\n\n try {\n // Determine format from file\n let format: 'csv' | 'json' = 'json'\n if (fileField?.value && fileField.value instanceof File) {\n const file = fileField.value\n format = file.type === 'text/csv' || file.name?.endsWith('.csv') ? 'csv' : 'json'\n } else if (mimeType === 'text/csv' || filename?.endsWith('.csv')) {\n format = 'csv'\n }\n\n // Get file data as base64\n let fileData: string | undefined\n\n if (fileField?.value && fileField.value instanceof File) {\n // File is being uploaded, read its contents\n const arrayBuffer = await fileField.value.arrayBuffer()\n const base64 = Buffer.from(arrayBuffer).toString('base64')\n fileData = base64\n } else if (url) {\n // File has been saved, fetch from URL\n const response = await fetch(url, { signal: abortController.signal })\n if (!response.ok) {\n throw new Error('Failed to fetch file')\n }\n const arrayBuffer = await response.arrayBuffer()\n const base64 = Buffer.from(arrayBuffer).toString('base64')\n fileData = base64\n }\n\n if (!fileData) {\n setDataToRender([])\n setColumns([])\n setTotalDocs(0)\n setPaginationData(null)\n return\n }\n\n // Fetch transformed data from the server\n const res = await fetch(`${routes.api}/${collectionSlug}/preview-data`, {\n body: JSON.stringify({\n collectionSlug: targetCollectionSlug,\n fileData,\n format,\n previewLimit,\n previewPage,\n }),\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n method: 'POST',\n signal: abortController.signal,\n })\n\n if (!res.ok) {\n throw new Error('Failed to process file')\n }\n\n const {\n docs,\n hasNextPage,\n hasPrevPage,\n limit: responseLimit,\n page: responsePage,\n totalDocs: serverTotalDocs,\n totalPages,\n }: ImportPreviewResponse = await res.json()\n\n setTotalDocs(serverTotalDocs)\n setPaginationData({\n hasNextPage,\n hasPrevPage,\n limit: responseLimit,\n nextPage: responsePage + 1,\n page: responsePage,\n prevPage: responsePage - 1,\n totalPages,\n })\n\n if (!Array.isArray(docs) || docs.length === 0) {\n setDataToRender([])\n setColumns([])\n return\n }\n\n // Build columns from collection fields without traverseFields\n const buildColumnsFromFields = (\n fields: ClientField[],\n parentPath = '',\n parentLabel = '',\n ): Column[] => {\n const cols: Column[] = []\n\n fields.forEach((field) => {\n if (!fieldAffectsData(field) || field.admin?.disabled) {\n return\n }\n\n // Build the field path\n const fieldPath = parentPath ? `${parentPath}.${field.name}` : field.name\n\n // Get the field label\n let label = field.name\n if ('label' in field && field.label) {\n label = getTranslation(field.label, i18n)\n }\n\n // Add parent label prefix if in a group\n if (parentLabel) {\n label = `${parentLabel} > ${label}`\n }\n\n // Skip if this field doesn't exist in any document\n const hasData = docs.some((doc) => {\n const value = getObjectDotNotation(doc, fieldPath)\n return value !== undefined && value !== null\n })\n\n if (!hasData && field.type !== 'relationship') {\n return\n }\n\n cols.push({\n accessor: fieldPath,\n active: true,\n field,\n Heading: label,\n renderedCells: docs.map((doc) => {\n const value = getObjectDotNotation(doc, fieldPath)\n\n if (value === undefined || value === null) {\n return null\n }\n\n // Format based on field type\n if (field.type === 'relationship' || field.type === 'upload') {\n // Handle relationships\n if (typeof value === 'object' && !Array.isArray(value)) {\n // Single relationship\n const relationTo = Array.isArray(field.relationTo)\n ? (value as any).relationTo\n : field.relationTo\n\n const relatedConfig = config.collections.find((c) => c.slug === relationTo)\n if (relatedConfig && relatedConfig.admin?.useAsTitle) {\n const titleValue = (value as any)[relatedConfig.admin.useAsTitle]\n if (titleValue) {\n return formatDocTitle({\n collectionConfig: relatedConfig,\n data: value as any,\n dateFormat: config.admin.dateFormat,\n i18n,\n })\n }\n }\n\n // Fallback to ID\n const id = (value as any).id || value\n return `${getTranslation(relatedConfig?.labels?.singular || relationTo, i18n)}: ${id}`\n } else if (Array.isArray(value)) {\n // Multiple relationships\n return value\n .map((item) => {\n if (typeof item === 'object') {\n const relationTo = Array.isArray(field.relationTo)\n ? item.relationTo\n : field.relationTo\n const relatedConfig = config.collections.find(\n (c) => c.slug === relationTo,\n )\n\n if (relatedConfig && relatedConfig.admin?.useAsTitle) {\n const titleValue = item[relatedConfig.admin.useAsTitle]\n if (titleValue) {\n return formatDocTitle({\n collectionConfig: relatedConfig,\n data: item,\n dateFormat: config.admin.dateFormat,\n i18n,\n })\n }\n }\n\n return item.id || item\n }\n return item\n })\n .join(', ')\n }\n\n // Just an ID\n return String(value)\n } else if (field.type === 'date') {\n // Display date as string to avoid wrong locale/timezone conversion\n return String(value)\n } else if (field.type === 'checkbox') {\n return value ? '✓' : '✗'\n } else if (field.type === 'select' || field.type === 'radio') {\n // Show the label for select/radio options\n const option = field.options?.find((opt) => {\n if (typeof opt === 'string') {\n return opt === value\n }\n return opt.value === value\n })\n\n if (option && typeof option === 'object') {\n return getTranslation(option.label, i18n)\n }\n return String(value)\n } else if (field.type === 'number') {\n return String(value)\n } else if (Array.isArray(value)) {\n // Handle arrays\n if (field.type === 'blocks') {\n return value.map((block: any) => `${block.blockType || 'Block'}`).join(', ')\n }\n return `[${value.length} items]`\n } else if (typeof value === 'object') {\n // Handle objects\n if (field.type === 'group') {\n return '{...}'\n }\n return JSON.stringify(value)\n }\n\n return String(value)\n }),\n })\n\n // For groups, add nested fields with parent label\n if (field.type === 'group' && 'fields' in field) {\n const groupLabel =\n 'label' in field && field.label ? getTranslation(field.label, i18n) : field.name\n\n const nestedCols = buildColumnsFromFields(\n field.fields,\n fieldPath,\n parentLabel ? `${parentLabel} > ${groupLabel}` : groupLabel,\n )\n cols.push(...nestedCols)\n }\n\n // For tabs, process the fields within\n if ('tabs' in field && Array.isArray(field.tabs)) {\n field.tabs.forEach((tab) => {\n if ('name' in tab && tab.name) {\n // Named tab\n const tabPath = parentPath ? `${parentPath}.${tab.name}` : tab.name\n const tabLabel =\n 'label' in tab && tab.label ? getTranslation(tab.label, i18n) : tab.name\n\n const tabCols = buildColumnsFromFields(\n tab.fields,\n tabPath,\n parentLabel ? `${parentLabel} > ${tabLabel}` : tabLabel,\n )\n cols.push(...tabCols)\n } else {\n // Unnamed tab - fields go directly under parent\n const tabLabel =\n 'label' in tab && tab.label ? getTranslation(tab.label, i18n) : ''\n\n const tabCols = buildColumnsFromFields(\n tab.fields,\n parentPath,\n tabLabel && typeof tabLabel === 'string' && parentLabel\n ? `${parentLabel} > ${tabLabel}`\n : typeof tabLabel === 'string'\n ? tabLabel\n : parentLabel,\n )\n cols.push(...tabCols)\n }\n })\n }\n })\n\n return cols\n }\n\n const fieldColumns = buildColumnsFromFields(collectionConfig.fields)\n\n const existingAccessors = new Set(fieldColumns.map((column) => column.accessor))\n\n // Discover all fields from document data to determine column order\n // Respect the order fields appear in the data (e.g., CSV column order)\n const dataFieldOrder: string[] = []\n const dataFieldsSet = new Set<string>()\n\n // Collect all fields from all docs to get comprehensive field list\n docs.forEach((doc) => {\n Object.keys(doc).forEach((key) => {\n if (!dataFieldsSet.has(key) && doc[key] !== undefined && doc[key] !== null) {\n dataFieldsSet.add(key)\n dataFieldOrder.push(key)\n }\n })\n })\n\n // Helper to create a column for a field\n const createColumnForField = (fieldName: string): Column => ({\n accessor: fieldName,\n active: true,\n field: { name: fieldName } as ClientField,\n Heading: getTranslation(fieldName, i18n),\n renderedCells: docs.map((doc) => {\n const value = doc[fieldName]\n if (value === undefined || value === null) {\n return null\n }\n\n return String(value)\n }),\n })\n\n // Build columns respecting data order for fields not in config\n // For fields in config, use their natural order from fieldColumns\n const finalColumns: Column[] = []\n const addedAccessors = new Set<string>()\n\n // Process fields in the order they appear in the data\n dataFieldOrder.forEach((fieldName) => {\n if (existingAccessors.has(fieldName)) {\n // This field is from the collection config\n const configColumn = fieldColumns.find((col) => col.accessor === fieldName)\n if (configColumn && !addedAccessors.has(fieldName)) {\n finalColumns.push(configColumn)\n addedAccessors.add(fieldName)\n }\n } else {\n // This is an additional field (system field or extra data field)\n if (!addedAccessors.has(fieldName)) {\n finalColumns.push(createColumnForField(fieldName))\n addedAccessors.add(fieldName)\n }\n }\n })\n\n // Add any remaining config fields that weren't in the data\n fieldColumns.forEach((col) => {\n if (!addedAccessors.has(col.accessor)) {\n finalColumns.push(col)\n addedAccessors.add(col.accessor)\n }\n })\n\n setColumns(finalColumns)\n setDataToRender(docs)\n } catch (err) {\n console.error('Error processing file data:', err)\n setError(err instanceof Error ? err.message : 'Failed to load preview')\n setDataToRender([])\n setColumns([])\n setTotalDocs(0)\n setPaginationData(null)\n }\n }\n\n startTransition(async () => await processFileData())\n\n return () => {\n if (!abortController.signal.aborted) {\n abortController.abort('Component unmounted')\n }\n }\n },\n [\n collectionSlug,\n targetCollectionSlug,\n url,\n filename,\n mimeType,\n fileField?.value,\n collectionConfig,\n config,\n i18n,\n previewLimit,\n previewPage,\n routes.api,\n ],\n 500,\n )\n\n // If import has been processed, show results instead of preview\n if (status !== 'pending' && summary) {\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n <h3>\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:importResults\" t={t} />\n </h3>\n </div>\n <div className={`${baseClass}__results`}>\n <p>\n <strong>Status:</strong> {status}\n </p>\n <p>\n <strong>Imported:</strong> {summary.imported || 0}\n </p>\n <p>\n <strong>Updated:</strong> {summary.updated || 0}\n </p>\n <p>\n <strong>Total:</strong> {summary.total || 0}\n </p>\n {summary.issues > 0 && (\n <p>\n <strong>Issues:</strong> {summary.issues}\n </p>\n )}\n {summary.issueDetails && summary.issueDetails.length > 0 && (\n <div style={{ marginTop: '1rem' }}>\n <strong>Issue Details:</strong>\n <ul style={{ marginTop: '0.5rem' }}>\n {summary.issueDetails.slice(0, 10).map((issue: any, index: number) => (\n <li key={index}>\n Row {issue.row}: {issue.error}\n </li>\n ))}\n {summary.issueDetails.length > 10 && (\n <li>... and {summary.issueDetails.length - 10} more issues</li>\n )}\n </ul>\n </div>\n )}\n </div>\n </div>\n )\n }\n\n if (!targetCollectionSlug) {\n return (\n <div className={baseClass}>\n <p style={{ opacity: 0.6 }}>\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:collectionRequired\" t={t} />\n </p>\n </div>\n )\n }\n\n if (error) {\n return (\n <div className={baseClass}>\n <p style={{ color: 'red' }}>\n <Translation i18nKey=\"general:error\" t={t} />: {error}\n </p>\n </div>\n )\n }\n\n if (!url && !fileField?.value) {\n return (\n <div className={baseClass}>\n <p style={{ opacity: 0.6 }}>\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:uploadFileToSeePreview\" t={t} />\n </p>\n </div>\n )\n }\n\n const handlePageChange = (page: number) => {\n setPreviewPage(page)\n }\n\n const handlePerPageChange = (newLimit: number) => {\n setPreviewLimit(newLimit)\n setPreviewPage(1)\n }\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n <h3>\n <Translation i18nKey=\"version:preview\" t={t} />\n </h3>\n {totalDocs > 0 && !isPending && (\n <div className={`${baseClass}__info`}>\n <span className={`${baseClass}__import-count`}>\n <Translation\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n i18nKey=\"plugin-import-export:documentsToImport\"\n t={t}\n variables={{\n count: totalDocs,\n }}\n />\n </span>\n {' | '}\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:mode\" t={t} />: {importMode || 'create'}\n {importMode !== 'create' && (\n <>\n {' | '}\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:matchBy\" t={t} />: {matchField || 'id'}\n </>\n )}\n </div>\n )}\n </div>\n {isPending && !dataToRender.length && (\n <div className={`${baseClass}__loading`}>\n <Translation i18nKey=\"general:loading\" t={t} />\n </div>\n )}\n {dataToRender.length > 0 && <Table columns={columns} data={dataToRender} />}\n {!isPending && dataToRender.length === 0 && targetCollectionSlug && (\n <p>\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:noDataToPreview\" t={t} />\n </p>\n )}\n {paginationData && totalDocs > 0 && (\n <div className={`${baseClass}__pagination`}>\n {paginationData.totalPages > 1 && (\n <Pagination\n hasNextPage={paginationData.hasNextPage}\n hasPrevPage={paginationData.hasPrevPage}\n nextPage={paginationData.nextPage ?? undefined}\n numberOfNeighbors={1}\n onChange={handlePageChange}\n page={paginationData.page}\n prevPage={paginationData.prevPage ?? undefined}\n totalPages={paginationData.totalPages}\n />\n )}\n <span className={`${baseClass}__page-info`}>\n <Translation\n // @ts-expect-error - plugin translations not typed\n i18nKey=\"plugin-import-export:previewPageInfo\"\n t={t}\n variables={{\n end: Math.min((paginationData.page ?? 1) * previewLimit, totalDocs),\n start: ((paginationData.page ?? 1) - 1) * previewLimit + 1,\n total: totalDocs,\n }}\n />\n </span>\n <PerPage\n handleChange={handlePerPageChange}\n limit={previewLimit}\n limits={PREVIEW_LIMIT_OPTIONS}\n />\n </div>\n )}\n </div>\n )\n}\n"],"names":["getTranslation","Pagination","PerPage","Table","Translation","useConfig","useDebouncedEffect","useDocumentInfo","useField","useFormFields","useTranslation","formatDocTitle","fieldAffectsData","getObjectDotNotation","React","useState","useTransition","DEFAULT_PREVIEW_LIMIT","PREVIEW_LIMIT_OPTIONS","baseClass","ImportPreview","isPending","startTransition","config","routes","collectionSlug","i18n","t","value","targetCollectionSlug","path","importMode","matchField","filename","url","mimeType","status","summary","fileField","fields","file","dataToRender","setDataToRender","columns","setColumns","totalDocs","setTotalDocs","error","setError","previewPage","setPreviewPage","previewLimit","setPreviewLimit","paginationData","setPaginationData","collectionConfig","useMemo","collections","find","c","slug","abortController","AbortController","processFileData","format","File","type","name","endsWith","fileData","arrayBuffer","base64","Buffer","from","toString","response","fetch","signal","ok","Error","res","api","body","JSON","stringify","credentials","headers","method","docs","hasNextPage","hasPrevPage","limit","responseLimit","page","responsePage","serverTotalDocs","totalPages","json","nextPage","prevPage","Array","isArray","length","buildColumnsFromFields","parentPath","parentLabel","cols","forEach","field","admin","disabled","fieldPath","label","hasData","some","doc","undefined","push","accessor","active","Heading","renderedCells","map","relationTo","relatedConfig","useAsTitle","titleValue","data","dateFormat","id","labels","singular","item","join","String","option","options","opt","block","blockType","groupLabel","nestedCols","tabs","tab","tabPath","tabLabel","tabCols","fieldColumns","existingAccessors","Set","column","dataFieldOrder","dataFieldsSet","Object","keys","key","has","add","createColumnForField","fieldName","finalColumns","addedAccessors","configColumn","col","err","console","message","aborted","abort","div","className","h3","i18nKey","p","strong","imported","updated","total","issues","issueDetails","style","marginTop","ul","slice","issue","index","li","row","opacity","color","handlePageChange","handlePerPageChange","newLimit","span","variables","count","numberOfNeighbors","onChange","end","Math","min","start","handleChange","limits"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/ImportPreview/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientField, Column, PaginatedDocs } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Pagination,\n PerPage,\n Table,\n Translation,\n useConfig,\n useDebouncedEffect,\n useDocumentInfo,\n useField,\n useFormFields,\n useTranslation,\n} from '@payloadcms/ui'\nimport { formatDocTitle } from '@payloadcms/ui/shared'\nimport { fieldAffectsData, getObjectDotNotation } from 'payload/shared'\nimport React, { useState, useTransition } from 'react'\n\nimport type {\n PluginImportExportTranslationKeys,\n PluginImportExportTranslations,\n} from '../../translations/index.js'\nimport type { ImportPreviewResponse } from '../../types.js'\n\nimport { DEFAULT_PREVIEW_LIMIT, PREVIEW_LIMIT_OPTIONS } from '../../constants.js'\nimport './index.scss'\n\nconst baseClass = 'import-preview'\n\nexport const ImportPreview: React.FC = () => {\n const [isPending, startTransition] = useTransition()\n const {\n config,\n config: { routes },\n } = useConfig()\n const { collectionSlug } = useDocumentInfo()\n const { i18n, t } = useTranslation<\n PluginImportExportTranslations,\n PluginImportExportTranslationKeys\n >()\n\n const { value: targetCollectionSlug } = useField<string>({ path: 'collectionSlug' })\n const { value: importMode } = useField<string>({ path: 'importMode' })\n const { value: matchField } = useField<string>({ path: 'matchField' })\n const { value: filename } = useField<string>({ path: 'filename' })\n const { value: url } = useField<string>({ path: 'url' })\n const { value: mimeType } = useField<string>({ path: 'mimeType' })\n const { value: status } = useField<string>({ path: 'status' })\n const { value: summary } = useField<any>({ path: 'summary' })\n\n // Access the file field directly from form fields\n const fileField = useFormFields(([fields]) => fields?.file || null)\n\n const [dataToRender, setDataToRender] = useState<Record<string, unknown>[]>([])\n const [columns, setColumns] = useState<Column[]>([])\n const [totalDocs, setTotalDocs] = useState<number>(0)\n const [error, setError] = useState<null | string>(null)\n\n // Preview pagination state\n const [previewPage, setPreviewPage] = useState(1)\n const [previewLimit, setPreviewLimit] = useState(DEFAULT_PREVIEW_LIMIT)\n const [paginationData, setPaginationData] = useState<null | Pick<\n PaginatedDocs,\n 'hasNextPage' | 'hasPrevPage' | 'limit' | 'nextPage' | 'page' | 'prevPage' | 'totalPages'\n >>(null)\n\n const collectionConfig = React.useMemo(\n () => config.collections.find((c) => c.slug === targetCollectionSlug),\n [targetCollectionSlug, config.collections],\n )\n\n useDebouncedEffect(\n () => {\n if (!collectionSlug || !targetCollectionSlug) {\n return\n }\n\n if (!targetCollectionSlug || (!url && !fileField?.value)) {\n setDataToRender([])\n setColumns([])\n setTotalDocs(0)\n setPaginationData(null)\n return\n }\n\n if (!collectionConfig) {\n setDataToRender([])\n setColumns([])\n setTotalDocs(0)\n setPaginationData(null)\n return\n }\n\n const abortController = new AbortController()\n\n const processFileData = async () => {\n setError(null)\n\n try {\n // Determine format from file\n let format: 'csv' | 'json' = 'json'\n if (fileField?.value && fileField.value instanceof File) {\n const file = fileField.value\n format = file.type === 'text/csv' || file.name?.endsWith('.csv') ? 'csv' : 'json'\n } else if (mimeType === 'text/csv' || filename?.endsWith('.csv')) {\n format = 'csv'\n }\n\n // Get file data as base64\n let fileData: string | undefined\n\n if (fileField?.value && fileField.value instanceof File) {\n // File is being uploaded, read its contents\n const arrayBuffer = await fileField.value.arrayBuffer()\n const base64 = Buffer.from(arrayBuffer).toString('base64')\n fileData = base64\n } else if (url) {\n // File has been saved, fetch from URL\n const response = await fetch(url, { signal: abortController.signal })\n if (!response.ok) {\n throw new Error('Failed to fetch file')\n }\n const arrayBuffer = await response.arrayBuffer()\n const base64 = Buffer.from(arrayBuffer).toString('base64')\n fileData = base64\n }\n\n if (!fileData) {\n setDataToRender([])\n setColumns([])\n setTotalDocs(0)\n setPaginationData(null)\n return\n }\n\n // Fetch transformed data from the server\n const res = await fetch(`${routes.api}/${collectionSlug}/preview-data`, {\n body: JSON.stringify({\n collectionSlug: targetCollectionSlug,\n fileData,\n format,\n previewLimit,\n previewPage,\n }),\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n method: 'POST',\n signal: abortController.signal,\n })\n\n if (!res.ok) {\n throw new Error('Failed to process file')\n }\n\n const {\n docs,\n hasNextPage,\n hasPrevPage,\n limit: responseLimit,\n page: responsePage,\n totalDocs: serverTotalDocs,\n totalPages,\n }: ImportPreviewResponse = await res.json()\n\n setTotalDocs(serverTotalDocs)\n setPaginationData({\n hasNextPage,\n hasPrevPage,\n limit: responseLimit,\n nextPage: responsePage + 1,\n page: responsePage,\n prevPage: responsePage - 1,\n totalPages,\n })\n\n if (!Array.isArray(docs) || docs.length === 0) {\n setDataToRender([])\n setColumns([])\n return\n }\n\n // Build columns from collection fields without traverseFields\n const buildColumnsFromFields = (\n fields: ClientField[],\n parentPath = '',\n parentLabel = '',\n ): Column[] => {\n const cols: Column[] = []\n\n fields.forEach((field) => {\n if (!fieldAffectsData(field) || field.admin?.disabled) {\n return\n }\n\n // Build the field path\n const fieldPath = parentPath ? `${parentPath}.${field.name}` : field.name\n\n // Get the field label\n let label = field.name\n if ('label' in field && field.label) {\n label = getTranslation(field.label, i18n)\n }\n\n // Add parent label prefix if in a group\n if (parentLabel) {\n label = `${parentLabel} > ${label}`\n }\n\n // Skip if this field doesn't exist in any document\n const hasData = docs.some((doc) => {\n const value = getObjectDotNotation(doc, fieldPath)\n return value !== undefined && value !== null\n })\n\n if (!hasData && field.type !== 'relationship') {\n return\n }\n\n cols.push({\n accessor: fieldPath,\n active: true,\n field,\n Heading: label,\n renderedCells: docs.map((doc) => {\n const value = getObjectDotNotation(doc, fieldPath)\n\n if (value === undefined || value === null) {\n return null\n }\n\n // Format based on field type\n if (field.type === 'relationship' || field.type === 'upload') {\n // Handle relationships\n if (typeof value === 'object' && !Array.isArray(value)) {\n // Single relationship\n const relationTo = Array.isArray(field.relationTo)\n ? (value as any).relationTo\n : field.relationTo\n\n const relatedConfig = config.collections.find((c) => c.slug === relationTo)\n if (relatedConfig && relatedConfig.admin?.useAsTitle) {\n const titleValue = (value as any)[relatedConfig.admin.useAsTitle]\n if (titleValue) {\n return formatDocTitle({\n collectionConfig: relatedConfig,\n data: value as any,\n dateFormat: config.admin.dateFormat,\n i18n,\n })\n }\n }\n\n // Fallback to ID\n const id = (value as any).id || value\n return `${getTranslation(relatedConfig?.labels?.singular || relationTo, i18n)}: ${id}`\n } else if (Array.isArray(value)) {\n // Multiple relationships\n return value\n .map((item) => {\n if (typeof item === 'object') {\n const relationTo = Array.isArray(field.relationTo)\n ? item.relationTo\n : field.relationTo\n const relatedConfig = config.collections.find(\n (c) => c.slug === relationTo,\n )\n\n if (relatedConfig && relatedConfig.admin?.useAsTitle) {\n const titleValue = item[relatedConfig.admin.useAsTitle]\n if (titleValue) {\n return formatDocTitle({\n collectionConfig: relatedConfig,\n data: item,\n dateFormat: config.admin.dateFormat,\n i18n,\n })\n }\n }\n\n return item.id || item\n }\n return item\n })\n .join(', ')\n }\n\n // Just an ID\n return String(value)\n } else if (field.type === 'date') {\n // Display date as string to avoid wrong locale/timezone conversion\n return String(value)\n } else if (field.type === 'checkbox') {\n return value ? '✓' : '✗'\n } else if (field.type === 'select' || field.type === 'radio') {\n // Show the label for select/radio options\n const option = field.options?.find((opt) => {\n if (typeof opt === 'string') {\n return opt === value\n }\n return opt.value === value\n })\n\n if (option && typeof option === 'object') {\n return getTranslation(option.label, i18n)\n }\n return String(value)\n } else if (field.type === 'number') {\n return String(value)\n } else if (Array.isArray(value)) {\n // Handle arrays\n if (field.type === 'blocks') {\n return value.map((block: any) => `${block.blockType || 'Block'}`).join(', ')\n }\n return `[${value.length} items]`\n } else if (typeof value === 'object') {\n // Handle objects\n if (field.type === 'group') {\n return '{...}'\n }\n return JSON.stringify(value)\n }\n\n return String(value)\n }),\n })\n\n // For groups, add nested fields with parent label\n if (field.type === 'group' && 'fields' in field) {\n const groupLabel =\n 'label' in field && field.label ? getTranslation(field.label, i18n) : field.name\n\n const nestedCols = buildColumnsFromFields(\n field.fields,\n fieldPath,\n parentLabel ? `${parentLabel} > ${groupLabel}` : groupLabel,\n )\n cols.push(...nestedCols)\n }\n\n // For tabs, process the fields within\n if ('tabs' in field && Array.isArray(field.tabs)) {\n field.tabs.forEach((tab) => {\n if ('name' in tab && tab.name) {\n // Named tab\n const tabPath = parentPath ? `${parentPath}.${tab.name}` : tab.name\n const tabLabel =\n 'label' in tab && tab.label ? getTranslation(tab.label, i18n) : tab.name\n\n const tabCols = buildColumnsFromFields(\n tab.fields,\n tabPath,\n parentLabel ? `${parentLabel} > ${tabLabel}` : tabLabel,\n )\n cols.push(...tabCols)\n } else {\n // Unnamed tab - fields go directly under parent\n const tabLabel =\n 'label' in tab && tab.label ? getTranslation(tab.label, i18n) : ''\n\n const tabCols = buildColumnsFromFields(\n tab.fields,\n parentPath,\n tabLabel && typeof tabLabel === 'string' && parentLabel\n ? `${parentLabel} > ${tabLabel}`\n : typeof tabLabel === 'string'\n ? tabLabel\n : parentLabel,\n )\n cols.push(...tabCols)\n }\n })\n }\n })\n\n return cols\n }\n\n const fieldColumns = buildColumnsFromFields(collectionConfig.fields)\n\n const existingAccessors = new Set(fieldColumns.map((column) => column.accessor))\n\n // Discover all fields from document data to determine column order\n // Respect the order fields appear in the data (e.g., CSV column order)\n const dataFieldOrder: string[] = []\n const dataFieldsSet = new Set<string>()\n\n // Collect all fields from all docs to get comprehensive field list\n docs.forEach((doc) => {\n Object.keys(doc).forEach((key) => {\n if (!dataFieldsSet.has(key) && doc[key] !== undefined && doc[key] !== null) {\n dataFieldsSet.add(key)\n dataFieldOrder.push(key)\n }\n })\n })\n\n // Helper to create a column for a field\n const createColumnForField = (fieldName: string): Column => ({\n accessor: fieldName,\n active: true,\n field: { name: fieldName } as ClientField,\n Heading: getTranslation(fieldName, i18n),\n renderedCells: docs.map((doc) => {\n const value = doc[fieldName]\n if (value === undefined || value === null) {\n return null\n }\n\n return String(value)\n }),\n })\n\n // Build columns respecting data order for fields not in config\n // For fields in config, use their natural order from fieldColumns\n const finalColumns: Column[] = []\n const addedAccessors = new Set<string>()\n\n // Process fields in the order they appear in the data\n dataFieldOrder.forEach((fieldName) => {\n if (existingAccessors.has(fieldName)) {\n // This field is from the collection config\n const configColumn = fieldColumns.find((col) => col.accessor === fieldName)\n if (configColumn && !addedAccessors.has(fieldName)) {\n finalColumns.push(configColumn)\n addedAccessors.add(fieldName)\n }\n } else {\n // This is an additional field (system field or extra data field)\n if (!addedAccessors.has(fieldName)) {\n finalColumns.push(createColumnForField(fieldName))\n addedAccessors.add(fieldName)\n }\n }\n })\n\n // Add any remaining config fields that weren't in the data\n fieldColumns.forEach((col) => {\n if (!addedAccessors.has(col.accessor)) {\n finalColumns.push(col)\n addedAccessors.add(col.accessor)\n }\n })\n\n setColumns(finalColumns)\n setDataToRender(docs)\n } catch (err) {\n console.error('Error processing file data:', err)\n setError(err instanceof Error ? err.message : 'Failed to load preview')\n setDataToRender([])\n setColumns([])\n setTotalDocs(0)\n setPaginationData(null)\n }\n }\n\n startTransition(async () => await processFileData())\n\n return () => {\n if (!abortController.signal.aborted) {\n abortController.abort('Component unmounted')\n }\n }\n },\n [\n collectionSlug,\n targetCollectionSlug,\n url,\n filename,\n mimeType,\n fileField?.value,\n collectionConfig,\n config,\n i18n,\n previewLimit,\n previewPage,\n routes.api,\n ],\n 500,\n )\n\n // If import has been processed, show results instead of preview\n if (status !== 'pending' && summary) {\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n <h3>\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:importResults\" t={t} />\n </h3>\n </div>\n <div className={`${baseClass}__results`}>\n <p>\n <strong>Status:</strong> {status}\n </p>\n <p>\n <strong>Imported:</strong> {summary.imported || 0}\n </p>\n <p>\n <strong>Updated:</strong> {summary.updated || 0}\n </p>\n <p>\n <strong>Total:</strong> {summary.total || 0}\n </p>\n {summary.issues > 0 && (\n <p>\n <strong>Issues:</strong> {summary.issues}\n </p>\n )}\n {summary.issueDetails && summary.issueDetails.length > 0 && (\n <div style={{ marginTop: '1rem' }}>\n <strong>Issue Details:</strong>\n <ul style={{ marginTop: '0.5rem' }}>\n {summary.issueDetails.slice(0, 10).map((issue: any, index: number) => (\n <li key={index}>\n Row {issue.row}: {issue.error}\n </li>\n ))}\n {summary.issueDetails.length > 10 && (\n <li>... and {summary.issueDetails.length - 10} more issues</li>\n )}\n </ul>\n </div>\n )}\n </div>\n </div>\n )\n }\n\n if (!targetCollectionSlug) {\n return (\n <div className={baseClass}>\n <p style={{ opacity: 0.6 }}>\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:collectionRequired\" t={t} />\n </p>\n </div>\n )\n }\n\n if (error) {\n return (\n <div className={baseClass}>\n <p style={{ color: 'red' }}>\n <Translation i18nKey=\"general:error\" t={t} />: {error}\n </p>\n </div>\n )\n }\n\n if (!url && !fileField?.value) {\n return (\n <div className={baseClass}>\n <p style={{ opacity: 0.6 }}>\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:uploadFileToSeePreview\" t={t} />\n </p>\n </div>\n )\n }\n\n const handlePageChange = (page: number) => {\n setPreviewPage(page)\n }\n\n const handlePerPageChange = (newLimit: number) => {\n setPreviewLimit(newLimit)\n setPreviewPage(1)\n }\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n <h3>\n <Translation i18nKey=\"version:preview\" t={t} />\n </h3>\n {totalDocs > 0 && !isPending && (\n <div className={`${baseClass}__info`}>\n <span className={`${baseClass}__import-count`}>\n <Translation\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n i18nKey=\"plugin-import-export:documentsToImport\"\n t={t}\n variables={{\n count: totalDocs,\n }}\n />\n </span>\n {' | '}\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:mode\" t={t} />: {importMode || 'create'}\n {importMode !== 'create' && (\n <>\n {' | '}\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:matchBy\" t={t} />: {matchField || 'id'}\n </>\n )}\n </div>\n )}\n </div>\n {isPending && !dataToRender.length && (\n <div className={`${baseClass}__loading`}>\n <Translation i18nKey=\"general:loading\" t={t} />\n </div>\n )}\n {dataToRender.length > 0 && <Table columns={columns} data={dataToRender} />}\n {!isPending && dataToRender.length === 0 && targetCollectionSlug && (\n <p>\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:noDataToPreview\" t={t} />\n </p>\n )}\n {paginationData && totalDocs > 0 && (\n <div className={`${baseClass}__pagination`}>\n {paginationData.totalPages > 1 && (\n <Pagination\n hasNextPage={paginationData.hasNextPage}\n hasPrevPage={paginationData.hasPrevPage}\n nextPage={paginationData.nextPage ?? undefined}\n numberOfNeighbors={1}\n onChange={handlePageChange}\n page={paginationData.page}\n prevPage={paginationData.prevPage ?? undefined}\n totalPages={paginationData.totalPages}\n />\n )}\n <span className={`${baseClass}__page-info`}>\n <Translation\n // @ts-expect-error - plugin translations not typed\n i18nKey=\"plugin-import-export:previewPageInfo\"\n t={t}\n variables={{\n end: Math.min((paginationData.page ?? 1) * previewLimit, totalDocs),\n start: ((paginationData.page ?? 1) - 1) * previewLimit + 1,\n total: totalDocs,\n }}\n />\n </span>\n <PerPage\n handleChange={handlePerPageChange}\n limit={previewLimit}\n limits={PREVIEW_LIMIT_OPTIONS}\n />\n </div>\n )}\n </div>\n )\n}\n"],"names":["getTranslation","Pagination","PerPage","Table","Translation","useConfig","useDebouncedEffect","useDocumentInfo","useField","useFormFields","useTranslation","formatDocTitle","fieldAffectsData","getObjectDotNotation","React","useState","useTransition","DEFAULT_PREVIEW_LIMIT","PREVIEW_LIMIT_OPTIONS","baseClass","ImportPreview","isPending","startTransition","config","routes","collectionSlug","i18n","t","value","targetCollectionSlug","path","importMode","matchField","filename","url","mimeType","status","summary","fileField","fields","file","dataToRender","setDataToRender","columns","setColumns","totalDocs","setTotalDocs","error","setError","previewPage","setPreviewPage","previewLimit","setPreviewLimit","paginationData","setPaginationData","collectionConfig","useMemo","collections","find","c","slug","abortController","AbortController","processFileData","format","File","type","name","endsWith","fileData","arrayBuffer","base64","Buffer","from","toString","response","fetch","signal","ok","Error","res","api","body","JSON","stringify","credentials","headers","method","docs","hasNextPage","hasPrevPage","limit","responseLimit","page","responsePage","serverTotalDocs","totalPages","json","nextPage","prevPage","Array","isArray","length","buildColumnsFromFields","parentPath","parentLabel","cols","forEach","field","admin","disabled","fieldPath","label","hasData","some","doc","undefined","push","accessor","active","Heading","renderedCells","map","relationTo","relatedConfig","useAsTitle","titleValue","data","dateFormat","id","labels","singular","item","join","String","option","options","opt","block","blockType","groupLabel","nestedCols","tabs","tab","tabPath","tabLabel","tabCols","fieldColumns","existingAccessors","Set","column","dataFieldOrder","dataFieldsSet","Object","keys","key","has","add","createColumnForField","fieldName","finalColumns","addedAccessors","configColumn","col","err","console","message","aborted","abort","div","className","h3","i18nKey","p","strong","imported","updated","total","issues","issueDetails","style","marginTop","ul","slice","issue","index","li","row","opacity","color","handlePageChange","handlePerPageChange","newLimit","span","variables","count","numberOfNeighbors","onChange","end","Math","min","start","handleChange","limits"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/plugin-import-export",
|
|
3
|
-
"version": "3.77.0-
|
|
3
|
+
"version": "3.77.0-internal-debug.98d2e4d",
|
|
4
4
|
"description": "Import-Export plugin for Payload",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"payload",
|
|
@@ -64,17 +64,17 @@
|
|
|
64
64
|
"csv-parse": "5.6.0",
|
|
65
65
|
"csv-stringify": "6.5.2",
|
|
66
66
|
"qs-esm": "7.0.2",
|
|
67
|
-
"@payloadcms/
|
|
68
|
-
"@payloadcms/
|
|
67
|
+
"@payloadcms/translations": "3.77.0-internal-debug.98d2e4d",
|
|
68
|
+
"@payloadcms/ui": "3.77.0-internal-debug.98d2e4d"
|
|
69
69
|
},
|
|
70
70
|
"devDependencies": {
|
|
71
|
-
"@payloadcms/
|
|
72
|
-
"
|
|
73
|
-
"
|
|
71
|
+
"@payloadcms/eslint-config": "3.28.0",
|
|
72
|
+
"@payloadcms/ui": "3.77.0-internal-debug.98d2e4d",
|
|
73
|
+
"payload": "3.77.0-internal-debug.98d2e4d"
|
|
74
74
|
},
|
|
75
75
|
"peerDependencies": {
|
|
76
|
-
"@payloadcms/ui": "3.77.0-
|
|
77
|
-
"payload": "3.77.0-
|
|
76
|
+
"@payloadcms/ui": "3.77.0-internal-debug.98d2e4d",
|
|
77
|
+
"payload": "3.77.0-internal-debug.98d2e4d"
|
|
78
78
|
},
|
|
79
79
|
"homepage:": "https://payloadcms.com",
|
|
80
80
|
"scripts": {
|