UNPKG

@timmons-group/config-form

Version:

React Components and helpers to build a form via configuration with react-hook-form and MUI

68 lines (67 loc) 2.1 kB
/** * This hook is used to convert a layout into a different structure for use by ConfigForm. * We are building a new internal structure */ import { FIELD_TYPES } from "../constants"; import { Conditional } from "../models/formFields.model"; import { LegacyParsedSection } from "../models/formLegacy.model"; import { type AnySchema } from "yup"; export type FieldTypes = keyof typeof FIELD_TYPES; export type ConfigFormFieldTypes = Lowercase<FieldTypes>; export interface ConfigFormField { id: string; type: ConfigFormFieldTypes; render: ConfigFormFieldRender; validationOptions: ConfigFormValidationOptions; conditions: Conditional[]; yupValidation?: AnySchema; watchers?: Map<string, boolean>; } export interface RegexpValidation { pattern: RegExp | string; flags?: string; errorMessage?: string; } export type ConfigFormFieldRender = BaseFieldRender | DateFieldRender | SelectFieldRender | TextFieldRender; export interface ConfigFormValidationOptions { required?: boolean; minLength?: number; maxLength?: number; minValue?: number; maxValue?: number; regexpValidation?: RegexpValidation; requiredErrorText?: string; minLengthErrorText?: string; maxLengthErrorText?: string; [key: string]: any; } export interface BaseFieldRender { required?: boolean; disabled?: boolean; hidden?: boolean; readOnly?: boolean; placeholder?: string; helperText?: string; [key: string]: any; } export interface DateFieldRender extends BaseFieldRender { disableFuture?: boolean; disableFutureErrorText?: string; } export interface SelectFieldRender extends BaseFieldRender { multiple?: boolean; checkbox?: boolean; radio?: boolean; choices?: Array<Record<string, any>>; url?: string; } export interface ConfigFormLayout { sections?: LegacyParsedSection[]; fields: Map<string, ConfigFormField>; } export interface TextFieldRender extends BaseFieldRender { emptyMessage?: string; iconHelperText?: string; altHelperText?: string; linkFormat?: string; }