import { useField } from "formik"; import React, { useCallback } from "react"; import theme from "mazlo-theme"; import { Text, View } from "../../index"; import { Icon } from "../Icon"; import styles from "./styles"; type Props = { children: React.ReactNode; defaultValue?: any; disabled?: boolean; hint?: string; label?: string; name: string; required?: boolean; size?: "lg" | "sm"; dark?: boolean; }; const FormItem = ({ children, defaultValue, disabled, hint, label, name, required, size, dark, }: Props) => { const [field, meta, helpers] = useField({ name }); const child: any = React.Children.only(children); const onChange = useCallback( (value: any) => { if (disabled) return; helpers.setValue(value); if (child.props.onChange) { child.props.onChange(value); } }, [helpers, children, disabled] ); const isError = Array.isArray(meta.error) ? meta.error.some((error) => !!error) : !!meta.error; return ( {!!label && ( {label} {required && ( {" "} Required * )} )} {React.cloneElement(child, { ...field, defaultValue, disabled, onChange, dark, })} {!!hint && ( {hint} )} {meta.touched && meta.error && typeof meta.error === "string" ? ( {meta.error} ) : null} ); }; export default FormItem;