@payloadcms/plugin-form-builder
Version:
Form builder plugin for Payload CMS
211 lines • 5.82 kB
TypeScript
import type { Block, CollectionBeforeChangeHook, CollectionConfig, Field, TypeWithID } from 'payload';
export interface BlockConfig {
block: Block;
validate?: (value: unknown) => boolean | string;
}
export declare function isValidBlockConfig(blockConfig: BlockConfig | string): blockConfig is BlockConfig;
export interface FieldValues {
[key: string]: boolean | null | number | string | undefined;
}
export type PaymentFieldConfig = {
paymentProcessor: Partial<SelectField>;
} & Partial<Field>;
export type FieldConfig = Partial<Field> | PaymentFieldConfig;
export interface FieldsConfig {
[key: string]: boolean | FieldConfig | undefined;
checkbox?: boolean | FieldConfig;
country?: boolean | FieldConfig;
date?: boolean | FieldConfig;
email?: boolean | FieldConfig;
message?: boolean | FieldConfig;
number?: boolean | FieldConfig;
payment?: boolean | FieldConfig;
select?: boolean | FieldConfig;
state?: boolean | FieldConfig;
text?: boolean | FieldConfig;
textarea?: boolean | FieldConfig;
}
type BeforeChangeParams<T extends TypeWithID = any> = Parameters<CollectionBeforeChangeHook<T>>[0];
export type BeforeEmail<T extends TypeWithID = any> = (emails: FormattedEmail[], beforeChangeParams: BeforeChangeParams<T>) => FormattedEmail[] | Promise<FormattedEmail[]>;
export type HandlePayment = (data: any) => void;
export type FieldsOverride = (args: {
defaultFields: Field[];
}) => Field[];
export type FormBuilderPluginConfig = {
beforeEmail?: BeforeEmail;
/**
* Set a default email address to send form submissions to if no email is provided in the form configuration
* Falls back to the defaultFromAddress in the email configuration
*/
defaultToEmail?: string;
fields?: FieldsConfig;
formOverrides?: {
fields?: FieldsOverride;
} & Partial<Omit<CollectionConfig, 'fields'>>;
formSubmissionOverrides?: {
fields?: FieldsOverride;
} & Partial<Omit<CollectionConfig, 'fields'>>;
handlePayment?: HandlePayment;
redirectRelationships?: string[];
};
export interface TextField {
blockName?: string;
blockType: 'text';
defaultValue?: string;
label?: string;
name: string;
required?: boolean;
width?: number;
}
export interface TextAreaField {
blockName?: string;
blockType: 'textarea';
defaultValue?: string;
label?: string;
name: string;
required?: boolean;
width?: number;
}
export interface SelectFieldOption {
label: string;
value: string;
}
export interface SelectField {
blockName?: string;
blockType: 'select';
defaultValue?: string;
label?: string;
name: string;
options: SelectFieldOption[];
placeholder?: string;
required?: boolean;
width?: number;
}
export interface RadioField {
blockName?: string;
blockType: 'radio';
defaultValue?: string;
label?: string;
name: string;
options: SelectFieldOption[];
placeholder?: string;
required?: boolean;
width?: number;
}
export interface PriceCondition {
condition: 'equals' | 'hasValue' | 'notEquals';
fieldToUse: string;
operator: 'add' | 'divide' | 'multiply' | 'subtract';
valueForCondition: string;
valueForOperator: number | string;
valueType: 'static' | 'valueOfField';
}
export interface PaymentField {
basePrice: number;
blockName?: string;
blockType: 'payment';
defaultValue?: string;
label?: string;
name: string;
paymentProcessor: string;
priceConditions: PriceCondition[];
required?: boolean;
width?: number;
}
export interface EmailField {
blockName?: string;
blockType: 'email';
defaultValue?: string;
label?: string;
name: string;
required?: boolean;
width?: number;
}
export interface DateField {
blockName?: string;
blockType: 'date';
defaultValue?: string;
label?: string;
name: string;
required?: boolean;
width?: number;
}
export interface StateField {
blockName?: string;
blockType: 'state';
defaultValue?: string;
label?: string;
name: string;
required?: boolean;
width?: number;
}
export interface CountryField {
blockName?: string;
blockType: 'country';
defaultValue?: string;
label?: string;
name: string;
required?: boolean;
width?: number;
}
export interface CheckboxField {
blockName?: string;
blockType: 'checkbox';
defaultValue?: boolean;
label?: string;
name: string;
required?: boolean;
width?: number;
}
export interface MessageField {
blockName?: string;
blockType: 'message';
message: object;
}
export type FormFieldBlock = CheckboxField | CountryField | DateField | EmailField | MessageField | PaymentField | RadioField | SelectField | StateField | TextAreaField | TextField;
export interface Email {
bcc?: string;
cc?: string;
emailFrom: string;
emailTo: string;
message?: any;
replyTo?: string;
subject: string;
}
export interface FormattedEmail {
bcc?: string;
cc?: string;
from: string;
html: string;
replyTo: string;
subject: string;
to: string;
}
export interface Redirect {
reference?: {
relationTo: string;
value: string | unknown;
};
type: 'custom' | 'reference';
url: string;
}
export interface Form {
confirmationMessage?: any;
confirmationType: 'message' | 'redirect';
emails: Email[];
fields: FormFieldBlock[];
id: string;
redirect?: Redirect;
submitButtonLabel?: string;
title: string;
}
export interface SubmissionValue {
field: string;
value: unknown;
}
export interface FormSubmission {
form: Form | string;
submissionData: SubmissionValue[];
}
export {};
//# sourceMappingURL=types.d.ts.map