import { memo, useContext } from "react"; import TextFieldControl from "../controls/TextFieldControl"; import { View } from "react-native"; import { Col } from "../styles"; import DatePickerControl from "../controls/DatePickerControl/DatePickerControl"; import { useRecoilState } from "recoil"; import { formControlStore } from "../store/form-data-store"; import type { Field, MFile } from "../common/constants"; import MetaformContext from "../store/metaform-context"; import SelectControl from "../controls/SelectControl"; import PasswordFieldControl from "../controls/PasswordFieldControl"; import MultitextControl from "../controls/MultitextControl"; import RadioButtonControl from "../controls/RadioButtonControl"; import withCustomComponent from "../controls/CustomComponent/CustomComponent"; import NumberControl from "../controls/NumberControl"; import FileUploadControl from "../controls/FileUploadControl"; import { Text } from "react-native-paper"; interface Props { field: Field; section: string; } function FormControl(props: Props) { const metaformContext = useContext(MetaformContext); const [field, setField] = useRecoilState(formControlStore(metaformContext.getFieldId(props.section, props.field.name))); // const handleValidation = () => { // }; const handleFileChange = (file: MFile) => { if (!field?.name) return; setField({ ...field, file, value: file.fileName }); }; const handleChange = (value: any) => { if (!field?.error) { return; } setField({ ...field, value: value as string }); }; const render = () => { if (!field?.error) return; switch (props.field.meta.displayType) { case "header": return ( {props.field.meta.displayName} ) case "number": case "currency": return case "text": case "input-mask": case "email": case "phone": return case "password": return case "multitext": return case "select": return case "date": return case "radio": case "radio-button": return case "file": return {}} onFileChange={handleFileChange} value={field?.value as string} /> default: if (props.field.meta?.displayType) { const customComponent = metaformContext.getComponent(props.field.meta.displayType); if (customComponent !== undefined) { const LoadedCustomComponent = withCustomComponent(customComponent); return ( ) } } return } } return ( {render()} ); } export default memo(FormControl);