feat: update types for multi-tenant forms + refactored ContactFormBlock

- forms + form-submissions now have tenant field
- ContactFormBlock: form relationship replaces recipientEmail
- New fields: successMessage, showContactInfo

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Martin Porwoll 2026-02-17 16:12:59 +00:00
parent 381bc291a0
commit c168832a12
3 changed files with 13393 additions and 164 deletions

13193
src/payload-types.ts Normal file

File diff suppressed because it is too large Load diff

View file

@ -70,6 +70,13 @@ export const BLOCK_TYPES = [
'series-detail-block', 'series-detail-block',
'video-embed-block', 'video-embed-block',
'featured-content-block', 'featured-content-block',
'checkbox',
'email',
'message',
'number',
'select',
'text',
'textarea',
] as const ] as const
export type BlockType = typeof BLOCK_TYPES[number] export type BlockType = typeof BLOCK_TYPES[number]

View file

@ -850,9 +850,14 @@ export interface Page {
blockType: 'cta-block'; blockType: 'cta-block';
} }
| { | {
/**
* Wählen Sie ein Formular aus der Formulare-Sammlung
*/
form: number | Form;
headline?: string | null; headline?: string | null;
description?: string | null; description?: string | null;
recipientEmail?: string | null; successMessage?: string | null;
showContactInfo?: boolean | null;
showPhone?: boolean | null; showPhone?: boolean | null;
showAddress?: boolean | null; showAddress?: boolean | null;
showSocials?: boolean | null; showSocials?: boolean | null;
@ -3080,6 +3085,168 @@ export interface Page {
updatedAt: string; updatedAt: string;
createdAt: string; createdAt: string;
} }
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "forms".
*/
export interface Form {
id: number;
title: string;
fields?:
| (
| {
name: string;
label?: string | null;
width?: number | null;
required?: boolean | null;
defaultValue?: boolean | null;
id?: string | null;
blockName?: string | null;
blockType: 'checkbox';
}
| {
name: string;
label?: string | null;
width?: number | null;
required?: boolean | null;
id?: string | null;
blockName?: string | null;
blockType: 'email';
}
| {
message?: {
root: {
type: string;
children: {
type: any;
version: number;
[k: string]: unknown;
}[];
direction: ('ltr' | 'rtl') | null;
format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '';
indent: number;
version: number;
};
[k: string]: unknown;
} | null;
id?: string | null;
blockName?: string | null;
blockType: 'message';
}
| {
name: string;
label?: string | null;
width?: number | null;
defaultValue?: number | null;
required?: boolean | null;
id?: string | null;
blockName?: string | null;
blockType: 'number';
}
| {
name: string;
label?: string | null;
width?: number | null;
defaultValue?: string | null;
placeholder?: string | null;
options?:
| {
label: string;
value: string;
id?: string | null;
}[]
| null;
required?: boolean | null;
id?: string | null;
blockName?: string | null;
blockType: 'select';
}
| {
name: string;
label?: string | null;
width?: number | null;
defaultValue?: string | null;
required?: boolean | null;
id?: string | null;
blockName?: string | null;
blockType: 'text';
}
| {
name: string;
label?: string | null;
width?: number | null;
defaultValue?: string | null;
required?: boolean | null;
id?: string | null;
blockName?: string | null;
blockType: 'textarea';
}
)[]
| null;
submitButtonLabel?: string | null;
/**
* Choose whether to display an on-page message or redirect to a different page after they submit the form.
*/
confirmationType?: ('message' | 'redirect') | null;
confirmationMessage?: {
root: {
type: string;
children: {
type: any;
version: number;
[k: string]: unknown;
}[];
direction: ('ltr' | 'rtl') | null;
format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '';
indent: number;
version: number;
};
[k: string]: unknown;
} | null;
redirect?: {
type?: ('reference' | 'custom') | null;
reference?: {
relationTo: 'pages';
value: number | Page;
} | null;
url?: string | null;
};
/**
* Send custom emails when the form submits. Use comma separated lists to send the same email to multiple recipients. To reference a value from this form, wrap that field's name with double curly brackets, i.e. {{firstName}}. You can use a wildcard {{*}} to output all data and {{*:table}} to format it as an HTML table in the email.
*/
emails?:
| {
emailTo?: string | null;
cc?: string | null;
bcc?: string | null;
replyTo?: string | null;
emailFrom?: string | null;
subject: string;
/**
* Enter the message that should be sent in this email.
*/
message?: {
root: {
type: string;
children: {
type: any;
version: number;
[k: string]: unknown;
}[];
direction: ('ltr' | 'rtl') | null;
format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '';
indent: number;
version: number;
};
[k: string]: unknown;
} | null;
id?: string | null;
}[]
| null;
tenant: number | Tenant;
updatedAt: string;
createdAt: string;
}
/** /**
* Video-Bibliothek für YouTube/Vimeo Embeds und hochgeladene Videos * Video-Bibliothek für YouTube/Vimeo Embeds und hochgeladene Videos
* *
@ -4441,167 +4608,6 @@ export interface Job {
updatedAt: string; updatedAt: string;
createdAt: string; createdAt: string;
} }
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "forms".
*/
export interface Form {
id: number;
title: string;
fields?:
| (
| {
name: string;
label?: string | null;
width?: number | null;
required?: boolean | null;
defaultValue?: boolean | null;
id?: string | null;
blockName?: string | null;
blockType: 'checkbox';
}
| {
name: string;
label?: string | null;
width?: number | null;
required?: boolean | null;
id?: string | null;
blockName?: string | null;
blockType: 'email';
}
| {
message?: {
root: {
type: string;
children: {
type: any;
version: number;
[k: string]: unknown;
}[];
direction: ('ltr' | 'rtl') | null;
format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '';
indent: number;
version: number;
};
[k: string]: unknown;
} | null;
id?: string | null;
blockName?: string | null;
blockType: 'message';
}
| {
name: string;
label?: string | null;
width?: number | null;
defaultValue?: number | null;
required?: boolean | null;
id?: string | null;
blockName?: string | null;
blockType: 'number';
}
| {
name: string;
label?: string | null;
width?: number | null;
defaultValue?: string | null;
placeholder?: string | null;
options?:
| {
label: string;
value: string;
id?: string | null;
}[]
| null;
required?: boolean | null;
id?: string | null;
blockName?: string | null;
blockType: 'select';
}
| {
name: string;
label?: string | null;
width?: number | null;
defaultValue?: string | null;
required?: boolean | null;
id?: string | null;
blockName?: string | null;
blockType: 'text';
}
| {
name: string;
label?: string | null;
width?: number | null;
defaultValue?: string | null;
required?: boolean | null;
id?: string | null;
blockName?: string | null;
blockType: 'textarea';
}
)[]
| null;
submitButtonLabel?: string | null;
/**
* Choose whether to display an on-page message or redirect to a different page after they submit the form.
*/
confirmationType?: ('message' | 'redirect') | null;
confirmationMessage?: {
root: {
type: string;
children: {
type: any;
version: number;
[k: string]: unknown;
}[];
direction: ('ltr' | 'rtl') | null;
format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '';
indent: number;
version: number;
};
[k: string]: unknown;
} | null;
redirect?: {
type?: ('reference' | 'custom') | null;
reference?: {
relationTo: 'pages';
value: number | Page;
} | null;
url?: string | null;
};
/**
* Send custom emails when the form submits. Use comma separated lists to send the same email to multiple recipients. To reference a value from this form, wrap that field's name with double curly brackets, i.e. {{firstName}}. You can use a wildcard {{*}} to output all data and {{*:table}} to format it as an HTML table in the email.
*/
emails?:
| {
emailTo?: string | null;
cc?: string | null;
bcc?: string | null;
replyTo?: string | null;
emailFrom?: string | null;
subject: string;
/**
* Enter the message that should be sent in this email.
*/
message?: {
root: {
type: string;
children: {
type: any;
version: number;
[k: string]: unknown;
}[];
direction: ('ltr' | 'rtl') | null;
format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '';
indent: number;
version: number;
};
[k: string]: unknown;
} | null;
id?: string | null;
}[]
| null;
updatedAt: string;
createdAt: string;
}
/** /**
* Produkte und Artikel * Produkte und Artikel
* *
@ -7563,6 +7569,24 @@ export interface MonitoringSnapshot {
| number | number
| boolean | boolean
| null; | null;
secrets?:
| {
[k: string]: unknown;
}
| unknown[]
| string
| number
| boolean
| null;
securityEvents?:
| {
[k: string]: unknown;
}
| unknown[]
| string
| number
| boolean
| null;
}; };
/** /**
* Performance-Metriken * Performance-Metriken
@ -7586,7 +7610,7 @@ export interface MonitoringSnapshot {
export interface MonitoringLog { export interface MonitoringLog {
id: number; id: number;
level: 'debug' | 'info' | 'warn' | 'error' | 'fatal'; level: 'debug' | 'info' | 'warn' | 'error' | 'fatal';
source: 'payload' | 'queue-worker' | 'cron' | 'email' | 'oauth' | 'sync'; source: 'payload' | 'queue-worker' | 'cron' | 'email' | 'oauth' | 'sync' | 'security';
message: string; message: string;
/** /**
* Strukturierte Metadaten * Strukturierte Metadaten
@ -8601,9 +8625,11 @@ export interface PagesSelect<T extends boolean = true> {
'contact-form-block'?: 'contact-form-block'?:
| T | T
| { | {
form?: T;
headline?: T; headline?: T;
description?: T; description?: T;
recipientEmail?: T; successMessage?: T;
showContactInfo?: T;
showPhone?: T; showPhone?: T;
showAddress?: T; showAddress?: T;
showSocials?: T; showSocials?: T;
@ -12584,6 +12610,8 @@ export interface MonitoringSnapshotsSelect<T extends boolean = true> {
metaOAuth?: T; metaOAuth?: T;
youtubeOAuth?: T; youtubeOAuth?: T;
cronJobs?: T; cronJobs?: T;
secrets?: T;
securityEvents?: T;
}; };
performance?: performance?:
| T | T
@ -12859,6 +12887,7 @@ export interface FormsSelect<T extends boolean = true> {
message?: T; message?: T;
id?: T; id?: T;
}; };
tenant?: T;
updatedAt?: T; updatedAt?: T;
createdAt?: T; createdAt?: T;
} }