import React from "react"; import { Indicator } from "../FeedbackIndicator"; export declare type DynamicFormInternalStateValue = string | string[] | Date | boolean | number | null; export interface DynamicFormItem { key: string; controlType: DynamicFormType; initialValue?: DynamicFormInternalStateValue; label?: string; description?: string; multi?: boolean; min?: any; max?: any; placeholder?: string; options?: Array; initiallyHidden?: boolean; formElementAdditionalProps?: { [k: string]: any; }; wrappingElement?: "div" | "section" | "none"; additionalProps?: { [k: string]: any; }; } export declare type DynamicFormType = "Text" | "Textarea" | "Checkbox" | "Dropdown" | "Datepicker" | "Radio" | "Option" | "LabelOnly" | "Stepper"; export interface DynamicFormSection { key: string; title?: string; items?: Array; wrappingElement?: "div" | "section" | "none"; additionalProps?: { [k: string]: any; }; } export interface DynamicFormOption { key: string; value?: T; label?: string; description?: string; additionalProps?: { [k: string]: any; }; } export declare type InputChange = React.ChangeEvent | React.MouseEvent | Date | number; export interface DynamicFormInternalStateSection { [k: string]: DynamicFormInternalStateValue; } export interface DynamicFormInternalState { [k: string]: DynamicFormInternalStateSection; } export interface DynamicFormIndicatorState { [k: string]: { [k: string]: Indicator; }; } export interface DynamicFormVisibilityState { [k: string]: { [k: string]: boolean; }; } export interface DynamicFormMetaData { [k: string]: { [k: string]: DynamicFormMetaDataItem; }; } export interface DynamicFormMetaDataItem { /** This field is currently visible (based on conditional rendering) */ isVisible: boolean; /** this field has an indicator */ hasIndicator: boolean; /** This field has a non empty, null, undefined or otherwise falsy value (based on its controlType) */ hasTruthyValue: boolean; } export declare type FormRenderFunction = () => JSX.Element; export declare type SetDynamicFormState = React.Dispatch>; export interface FormInfo { dirty: boolean; hasIndicators: boolean; isAllTruthy: boolean; } export declare type PatchState = (section: string, key: string, value: DynamicFormInternalStateValue) => void; export declare type SetIndicator = (section: string, key: string, indicator: Indicator) => void; export declare type SetHidden = (section: string, key: string, hidden: boolean) => void; export declare type UseDynamicForm = { renderForm: FormRenderFunction; state: DynamicFormInternalState; patchState: PatchState; setIndicator: SetIndicator; setHidden: SetHidden; meta: DynamicFormMetaData; info: FormInfo; }; export declare function useDynamicForm(sections: DynamicFormSection[]): UseDynamicForm;