import { selectDefined } from '@o/utils' import React, { useEffect, useState } from 'react' import { getDataType } from '../helpers/getDataType' import { DataType } from '../types' import { InputField } from './InputField' import { FormFieldLayout, SimpleFormField } from './SimpleFormField' import { ToggleField } from './ToggleField' type FormFieldProps = | { type?: DataType label: React.ReactNode value: any name?: string description?: string layout?: FormFieldLayout } | { type?: DataType label: React.ReactNode defaultValue: any name?: string description?: string layout?: FormFieldLayout } | { label: React.ReactNode children: React.ReactNode type?: undefined name?: string description?: string layout?: FormFieldLayout } export function FormField(props: FormFieldProps) { let val = null if ('defaultValue' in props) { val = props.defaultValue } else if ('value' in props) { val = props.value } // default to string val = selectDefined(val, '') const type = props.type || getDataType(val) const [name, setName] = useState(props.name || `field-${type}-${Math.random()}`) useEffect(() => { props.name && setName(props.name) }, [props.name]) switch (type) { case DataType.boolean: return case DataType.date: // TODO calendar after input return case DataType.number: return case DataType.string: return case DataType.unknown: default: return } }