import { createContext, createElement, forwardRef, HTMLAttributes, RaxNode, RefForwardingComponent, useContext, } from 'rax'; import View from 'rax-view'; import Text from 'rax-text'; import List from '@rax-ui/list'; import Context from './context'; export interface FormItemContextProps { error: boolean; align: 'left' | 'right'; solo: boolean; } export const FormItemContext = createContext({ error: false, align: 'left', solo: false, }); export interface FormItemProps extends HTMLAttributes { label?: RaxNode; labelWidth?: string | number; labelType?: 'inner' | 'upper'; helpText?: string; errorText?: string; required?: boolean; tapable?: boolean; } const FormItem: RefForwardingComponent = (props, ref) => { const { label, labelWidth, labelType: labelTypeProp, helpText, errorText, tapable, style, children, required, ...others } = props; const { styles, labelType: contextLabelType } = useContext(Context); const labelType = labelTypeProp || contextLabelType; const align = labelType === 'upper' ? 'left' : 'right'; return ( {label ? ( {label as string} {required ? ( * ) : null} ) : null} {children} {errorText || helpText ? ( {errorText ? ( {errorText} ) : helpText ? ( {helpText} ) : null} ) : null} {tapable ? : null} ); }; export default forwardRef(FormItem);