import type { FieldValidation, FormFieldSchema, } from '../types/form-builder' import { defaultValueForControl, normalizeOption, type NormalizedControl, } from './controlSchemaNormalize' import { humanize, numericValue, } from './controlSchemaUtils' import type { ControlDefinition, } from './controlSchemaTypes' export function controlToFormField(control: NormalizedControl): FormFieldSchema { const { name, definition, type } = control const props = fieldProps(definition) return { name, label: definition.label ?? humanize(name), type, defaultValue: defaultValueForControl(definition, type), placeholder: definition.placeholder, hint: definition.hint, icon: definition.icon, iconColor: definition.iconColor, iconBg: definition.iconBg, size: definition.size, disabled: definition.disabled, readonly: definition.readonly, validation: validationForControl(definition), condition: definition.condition, access: definition.access, colSpan: definition.colSpan, props, } } function fieldProps(definition: ControlDefinition): Record { const props: Record = {} if (definition.min !== undefined) props.min = numericValue(definition.min) if (definition.max !== undefined) props.max = numericValue(definition.max) if (definition.options) props.options = definition.options.map(normalizeOption) return { ...props, ...(definition.props ?? {}) } } function validationForControl(definition: ControlDefinition): FieldValidation | undefined { const validation: FieldValidation = { ...(definition.validation ?? {}) } if (definition.required !== undefined) validation.required = definition.required if (definition.min !== undefined) validation.min = definition.min if (definition.max !== undefined) validation.max = definition.max if (definition.minLength !== undefined) validation.minLength = definition.minLength if (definition.maxLength !== undefined) validation.maxLength = definition.maxLength if (definition.email !== undefined) validation.email = definition.email if (definition.pattern !== undefined) validation.pattern = definition.pattern return Object.keys(validation).length > 0 ? validation : undefined }