payload icon indicating copy to clipboard operation
payload copied to clipboard

Unable to override FormBuilderPlugin fields with a join field (SQLite only)

Open mikecebul opened this issue 1 year ago • 0 comments

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

  1. Start the plugin-form-builder test folder pnpm dev plugin-form-builder
  2. add sqlite as the db
  3. 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

mikecebul avatar Oct 11 '24 17:10 mikecebul