feat(plugin-form-builder)!: update form builder plugin field overrides to use a function instead (#6497)
## Description
Changes the `fields` override for form builder plugin to use a function
instead so that we can actually override existing fields which currently
will not work.
```ts
//before
fields: [
{
name: 'custom',
type: 'text',
}
]
// current
fields: ({ defaultFields }) => {
return [
...defaultFields,
{
name: 'custom',
type: 'text',
},
]
}
```
## Type of change
- [x] Breaking change (fix or feature that would cause existing
functionality to not work as expected)
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
import type { CollectionConfig } from 'payload/types'
|
import type { CollectionConfig, Field } from 'payload/types'
|
||||||
|
|
||||||
import type { FormBuilderPluginConfig } from '../../types.js'
|
import type { FormBuilderPluginConfig } from '../../types.js'
|
||||||
|
|
||||||
@@ -11,20 +11,7 @@ export const generateSubmissionCollection = (
|
|||||||
): CollectionConfig => {
|
): CollectionConfig => {
|
||||||
const formSlug = formConfig?.formOverrides?.slug || 'forms'
|
const formSlug = formConfig?.formOverrides?.slug || 'forms'
|
||||||
|
|
||||||
const newConfig: CollectionConfig = {
|
const defaultFields: Field[] = [
|
||||||
...(formConfig?.formSubmissionOverrides || {}),
|
|
||||||
slug: formConfig?.formSubmissionOverrides?.slug || 'form-submissions',
|
|
||||||
access: {
|
|
||||||
create: () => true,
|
|
||||||
read: ({ req: { user } }) => !!user, // logged-in users,
|
|
||||||
update: () => false,
|
|
||||||
...(formConfig?.formSubmissionOverrides?.access || {}),
|
|
||||||
},
|
|
||||||
admin: {
|
|
||||||
...(formConfig?.formSubmissionOverrides?.admin || {}),
|
|
||||||
enableRichTextRelationship: false,
|
|
||||||
},
|
|
||||||
fields: [
|
|
||||||
{
|
{
|
||||||
name: 'form',
|
name: 'form',
|
||||||
type: 'relationship',
|
type: 'relationship',
|
||||||
@@ -90,8 +77,26 @@ export const generateSubmissionCollection = (
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
...(formConfig?.formSubmissionOverrides?.fields || []),
|
]
|
||||||
],
|
|
||||||
|
const newConfig: CollectionConfig = {
|
||||||
|
...(formConfig?.formSubmissionOverrides || {}),
|
||||||
|
slug: formConfig?.formSubmissionOverrides?.slug || 'form-submissions',
|
||||||
|
access: {
|
||||||
|
create: () => true,
|
||||||
|
read: ({ req: { user } }) => !!user, // logged-in users,
|
||||||
|
update: () => false,
|
||||||
|
...(formConfig?.formSubmissionOverrides?.access || {}),
|
||||||
|
},
|
||||||
|
admin: {
|
||||||
|
...(formConfig?.formSubmissionOverrides?.admin || {}),
|
||||||
|
enableRichTextRelationship: false,
|
||||||
|
},
|
||||||
|
fields:
|
||||||
|
formConfig?.formSubmissionOverrides?.fields &&
|
||||||
|
typeof formConfig?.formSubmissionOverrides?.fields === 'function'
|
||||||
|
? formConfig?.formSubmissionOverrides?.fields({ defaultFields })
|
||||||
|
: defaultFields,
|
||||||
hooks: {
|
hooks: {
|
||||||
...(formConfig?.formSubmissionOverrides?.hooks || {}),
|
...(formConfig?.formSubmissionOverrides?.hooks || {}),
|
||||||
beforeChange: [
|
beforeChange: [
|
||||||
|
|||||||
@@ -64,19 +64,7 @@ export const generateFormCollection = (formConfig: FormBuilderPluginConfig): Col
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const config: CollectionConfig = {
|
const defaultFields: Field[] = [
|
||||||
...(formConfig?.formOverrides || {}),
|
|
||||||
slug: formConfig?.formOverrides?.slug || 'forms',
|
|
||||||
access: {
|
|
||||||
read: () => true,
|
|
||||||
...(formConfig?.formOverrides?.access || {}),
|
|
||||||
},
|
|
||||||
admin: {
|
|
||||||
enableRichTextRelationship: false,
|
|
||||||
useAsTitle: 'title',
|
|
||||||
...(formConfig?.formOverrides?.admin || {}),
|
|
||||||
},
|
|
||||||
fields: [
|
|
||||||
{
|
{
|
||||||
name: 'title',
|
name: 'title',
|
||||||
type: 'text',
|
type: 'text',
|
||||||
@@ -227,8 +215,24 @@ export const generateFormCollection = (formConfig: FormBuilderPluginConfig): Col
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
...(formConfig?.formOverrides?.fields || []),
|
]
|
||||||
],
|
|
||||||
|
const config: CollectionConfig = {
|
||||||
|
...(formConfig?.formOverrides || {}),
|
||||||
|
slug: formConfig?.formOverrides?.slug || 'forms',
|
||||||
|
access: {
|
||||||
|
read: () => true,
|
||||||
|
...(formConfig?.formOverrides?.access || {}),
|
||||||
|
},
|
||||||
|
admin: {
|
||||||
|
enableRichTextRelationship: false,
|
||||||
|
useAsTitle: 'title',
|
||||||
|
...(formConfig?.formOverrides?.admin || {}),
|
||||||
|
},
|
||||||
|
fields:
|
||||||
|
formConfig?.formOverrides.fields && typeof formConfig?.formOverrides.fields === 'function'
|
||||||
|
? formConfig?.formOverrides.fields({ defaultFields })
|
||||||
|
: defaultFields,
|
||||||
}
|
}
|
||||||
|
|
||||||
return config
|
return config
|
||||||
|
|||||||
@@ -30,20 +30,6 @@ export const formBuilderPlugin =
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
...config,
|
...config,
|
||||||
// admin: {
|
|
||||||
// ...config.admin,
|
|
||||||
// webpack: (webpackConfig) => ({
|
|
||||||
// ...webpackConfig,
|
|
||||||
// resolve: {
|
|
||||||
// ...webpackConfig.resolve,
|
|
||||||
// alias: {
|
|
||||||
// ...webpackConfig.resolve.alias,
|
|
||||||
// [path.resolve(__dirname, 'collections/FormSubmissions/hooks/sendEmail.ts')]: path.resolve(__dirname, 'mocks/serverModule.js'),
|
|
||||||
// [path.resolve(__dirname, 'collections/FormSubmissions/hooks/createCharge.ts')]: path.resolve(__dirname, 'mocks/serverModule.js'),
|
|
||||||
// },
|
|
||||||
// },
|
|
||||||
// })
|
|
||||||
// },
|
|
||||||
collections: [
|
collections: [
|
||||||
...(config?.collections || []),
|
...(config?.collections || []),
|
||||||
generateFormCollection(formConfig),
|
generateFormCollection(formConfig),
|
||||||
|
|||||||
@@ -39,12 +39,13 @@ export interface FieldsConfig {
|
|||||||
|
|
||||||
export type BeforeEmail = (emails: FormattedEmail[]) => FormattedEmail[] | Promise<FormattedEmail[]>
|
export type BeforeEmail = (emails: FormattedEmail[]) => FormattedEmail[] | Promise<FormattedEmail[]>
|
||||||
export type HandlePayment = (data: any) => void
|
export type HandlePayment = (data: any) => void
|
||||||
|
export type FieldsOverride = (args: { defaultFields: Field[] }) => Field[]
|
||||||
|
|
||||||
export type FormBuilderPluginConfig = {
|
export type FormBuilderPluginConfig = {
|
||||||
beforeEmail?: BeforeEmail
|
beforeEmail?: BeforeEmail
|
||||||
fields?: FieldsConfig
|
fields?: FieldsConfig
|
||||||
formOverrides?: Partial<CollectionConfig>
|
formOverrides?: Partial<Omit<CollectionConfig, 'fields'>> & { fields: FieldsOverride }
|
||||||
formSubmissionOverrides?: Partial<CollectionConfig>
|
formSubmissionOverrides?: Partial<Omit<CollectionConfig, 'fields'>> & { fields: FieldsOverride }
|
||||||
handlePayment?: HandlePayment
|
handlePayment?: HandlePayment
|
||||||
redirectRelationships?: string[]
|
redirectRelationships?: string[]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,12 +73,26 @@ export default buildConfigWithDefaults({
|
|||||||
// singular: 'Contact Form',
|
// singular: 'Contact Form',
|
||||||
// plural: 'Contact Forms'
|
// plural: 'Contact Forms'
|
||||||
// },
|
// },
|
||||||
fields: [
|
fields: ({ defaultFields }) => {
|
||||||
|
return [
|
||||||
|
...defaultFields,
|
||||||
{
|
{
|
||||||
name: 'custom',
|
name: 'custom',
|
||||||
type: 'text',
|
type: 'text',
|
||||||
},
|
},
|
||||||
],
|
]
|
||||||
|
},
|
||||||
|
},
|
||||||
|
formSubmissionOverrides: {
|
||||||
|
fields: ({ defaultFields }) => {
|
||||||
|
return [
|
||||||
|
...defaultFields,
|
||||||
|
{
|
||||||
|
name: 'custom',
|
||||||
|
type: 'text',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
},
|
},
|
||||||
redirectRelationships: ['pages'],
|
redirectRelationships: ['pages'],
|
||||||
}),
|
}),
|
||||||
|
|||||||
Reference in New Issue
Block a user