A plugin for Payload CMS to import and export JSON and CSV files. You can use this to change data for many records e.g. translate content... from collections.
All parsing and transformations are done on the client keeping the load from the server.
npm i "payload-plugin-import-export"
yarn add "payload-plugin-import-export"
pnpm add "payload-plugin-import-export"
import importExportPlugin from 'payload-plugin-import-export';
import type { User } from "payload/generated-types";
export const config = buildConfig({
serverUrl: process.env.PAYLOAD_PUBLIC_SERVER_URL //Required!
plugins: [
importExportPlugin({
enabled: true,
excludeCollections: ["users"],
redirectAfterImport: true,
// import User type from your payload-types.ts
canImport: (user:User) => user.roles.includes("admin")
}),
]
});
PROP | TYPE | DEFAULT | DESCRIPTION |
---|---|---|---|
enabled | boolean | true | Enable/disable plugin |
excludeCollections | string[] | undefined | List of collection slugs to not display the buttons |
redirectAfterImport | boolean | true | Redirect back to collection after import |
canImport | (user:unknown) => boolean | () => true | Restrict access to import. You have access to the user. |
The purpose lies solely on changing already existing records - new records will fail on import and you can download csv or json with the failed items.
On import and export you can select fields.
The filters set on the collections will also be used for exporting items.
This plugin obeys all access control rules, so exports will only include the fields with read access. On import missing permission on field level will not result in an error. The fields will just be ignored.
If localization is configured imports and export will be done in current selected locale. Caution: If field is not localized the "global" value will be overwritten.
When importing / exporting JSON the data will be shaped like via the REST API.
For CSV exports the data will be "flattened" for any field type which contains nested data (arrays,rows,tabs). e.g.:
[{
"id": "65e",
"title": "Foo",
"array": [
{
"title_array": "Bar",
},
{
"title_array": "Baz",
},
],
"tab": {
"title_tab": "Boz",
},
}]
will become
id | title | array.0.title_array | array.1.title_array | tab.title_tab |
---|---|---|---|---|
65e | Foo | Bar | Baz | Boz |
When importing the data will get "unflattened". Make sure to not change any header names.
MIT