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);