export interface FormField { name: string; label: string; value?: string | null; overrideValue?: string; description?: string; placeholder?: string; type: | 'text' | 'email' | 'tel' | 'url' | 'date' | 'datetime-local' | 'number' | 'range' | 'select' | 'textarea' | 'checkbox' | 'hidden' | 'password'; step?: string; max?: string; min?: string; rows?: string; options?: { label: string; value: string; }[]; checked?: boolean; multiple?: boolean; required?: boolean; disabled?: boolean; readOnly?: boolean; extraClasses?: string; } export function getFormDataField(formData: FormData, field: string) { return ((formData.get(field) || '') as string).trim(); } export function getFormDataFieldArray(formData: FormData, field: string) { return ((formData.getAll(field) || []) as string[]).map((value) => value.trim()); } export function generateFieldHtml( field: FormField, formData: FormData, ) { let value = field.overrideValue || (field.multiple ? getFormDataFieldArray(formData, field.name) : getFormDataField(formData, field.name)) || field.value; if (typeof field.overrideValue !== 'undefined') { value = field.overrideValue; } if (field.type === 'hidden') { return generateInputHtml(field, value); } return (
); } function generateInputHtml( { name, placeholder, type, options, step, max, min, rows, checked, multiple, disabled, required, readOnly, }: FormField, value?: string | string[] | null, ) { const additionalAttributes: Record