### What?
Fixes CSV export support for polymorphic relationship and upload fields.
### Why?
Polymorphic fields in Payload use a `{ relationTo, value }` structure.
The previous implementation incorrectly accessed `.id` directly on the
top-level object, which caused issues depending on query depth or data
shape. This led to missing or invalid values in exported CSVs.
### How?
- Updated getCustomFieldFunctions to safely access relationTo and
value.id from polymorphic fields
- Ensured `hasMany` polymorphic fields export each related ID and
relationTo as separate CSV columns
61 lines
1.7 KiB
TypeScript
61 lines
1.7 KiB
TypeScript
import { fileURLToPath } from 'node:url'
|
|
import path from 'path'
|
|
const filename = fileURLToPath(import.meta.url)
|
|
const dirname = path.dirname(filename)
|
|
import { importExportPlugin } from '@payloadcms/plugin-import-export'
|
|
import { en } from '@payloadcms/translations/languages/en'
|
|
import { es } from '@payloadcms/translations/languages/es'
|
|
|
|
import { buildConfigWithDefaults } from '../buildConfigWithDefaults.js'
|
|
import { Pages } from './collections/Pages.js'
|
|
import { Posts } from './collections/Posts.js'
|
|
import { Users } from './collections/Users.js'
|
|
import { seed } from './seed/index.js'
|
|
export default buildConfigWithDefaults({
|
|
admin: {
|
|
importMap: {
|
|
baseDir: path.resolve(dirname),
|
|
},
|
|
},
|
|
collections: [Users, Pages, Posts],
|
|
localization: {
|
|
defaultLocale: 'en',
|
|
fallback: true,
|
|
locales: ['en', 'es', 'de'],
|
|
},
|
|
i18n: {
|
|
supportedLanguages: {
|
|
en,
|
|
es,
|
|
},
|
|
fallbackLanguage: 'en',
|
|
},
|
|
onInit: async (payload) => {
|
|
await seed(payload)
|
|
},
|
|
plugins: [
|
|
importExportPlugin({
|
|
overrideExportCollection: (collection) => {
|
|
collection.admin.group = 'System'
|
|
collection.upload.staticDir = path.resolve(dirname, 'uploads')
|
|
return collection
|
|
},
|
|
disableJobsQueue: true,
|
|
}),
|
|
importExportPlugin({
|
|
collections: ['pages'],
|
|
overrideExportCollection: (collection) => {
|
|
collection.slug = 'exports-tasks'
|
|
if (collection.admin) {
|
|
collection.admin.group = 'System'
|
|
}
|
|
collection.upload.staticDir = path.resolve(dirname, 'uploads')
|
|
return collection
|
|
},
|
|
}),
|
|
],
|
|
typescript: {
|
|
outputFile: path.resolve(dirname, 'payload-types.ts'),
|
|
},
|
|
})
|