Unable to override FormBuilderPlugin fields with a join field (SQLite only)
Link to reproduction
https://github.com/mikecebul/payload/tree/traverse-fields-error
Environment Info
Binaries: Node: 20.14.0 npm: 10.7.0 Yarn: 1.22.22 pnpm: 9.1.4 Relevant Packages: payload: 3.0.0-beta.113 next: 15.0.0-canary.173 @payloadcms/email-resend: 3.0.0-beta.113 @payloadcms/graphql: 3.0.0-beta.113 @payloadcms/live-preview: 3.0.0-beta.113 @payloadcms/live-preview-react: 3.0.0-beta.113 @payloadcms/next/utilities: 3.0.0-beta.113 @payloadcms/plugin-cloud-storage: 3.0.0-beta.113 @payloadcms/plugin-form-builder: 3.0.0-beta.113 @payloadcms/plugin-redirects: 3.0.0-beta.113 @payloadcms/plugin-seo: 3.0.0-beta.113 @payloadcms/plugin-stripe: 3.0.0-beta.113 @payloadcms/richtext-lexical: 3.0.0-beta.113 @payloadcms/storage-s3: 3.0.0-beta.113 @payloadcms/translations: 3.0.0-beta.113 @payloadcms/ui/shared: 3.0.0-beta.113 react: 19.0.0-rc-3edc000d-20240926 react-dom: 19.0.0-rc-3edc000d-20240926 Operating System: Platform: linux Arch: x64 Version: #1 SMP Fri Mar 29 23:14:13 UTC 2024 Available memory (MB): 15847 Available CPU cores: 16
Describe the Bug
Error exists on beta > 111
Adding a join field after the default fields results in an error:
formBuilderPlugin({
formOverrides: {
fields: ({ defaultFields }) => {
const joinField: JoinField =
{
name: 'submissions',
collection: 'form-submissions',
type: 'join',
on: 'form',
}
return [...defaultFields, joinField]
},
},
}),
⨯ TypeError: Cannot read properties of undefined (reading 'targetField')
at eval (webpack://payload-monorepo/packages/db-sqlite/src/schema/traverseFields.ts?4329:942:24)
at Array.forEach (<anonymous>)
at field (webpack://payload-monorepo/packages/db-sqlite/src/schema/traverseFields.ts?4329:118:10)
at tableName (webpack://payload-monorepo/packages/db-sqlite/src/schema/build.ts?0366:138:21)
at eval (webpack://payload-monorepo/packages/db-sqlite/src/init.ts?7a40:68:15)
at Array.forEach (<anonymous>)
at Object.init (webpack://payload-monorepo/packages/db-sqlite/src/init.ts?7a40:40:35)
at reload (webpack://payload-monorepo/packages/next/src/utilities/getPayloadHMR.ts?586b:59:3)
at collections (webpack://payload-monorepo/packages/next/src/utilities/getPayloadHMR.ts?586b:81:7)
at permissions (webpack://payload-monorepo/packages/next/src/utilities/initPage/index.ts?6498:24:19)
at NotFoundPage (webpack://payload-monorepo/packages/next/src/views/NotFound/index.tsx?e192:60:26)
digest: "829711485"
Placing the join field in front of the the default fields does not cause an error:
formBuilderPlugin({
formOverrides: {
fields: ({ defaultFields }) => {
const joinField: JoinField =
{
name: 'submissions',
collection: 'form-submissions',
type: 'join',
on: 'form',
}
return [joinField, ...defaultFields]
},
},
}),
Reproduction Steps
- Start the plugin-form-builder test folder
pnpm dev plugin-form-builder - add sqlite as the db
- add a join field for form-submissions, at the end of the array o fields, to the form fields override.
If you add the join before the default fields it does not error
Adapters and Plugins
db-sqlite, plugin-form-builder