'use client' import classNames from 'classnames' import { useContext } from 'react' import { Plain, Text, isAdmin } from 'react-bricks/rsc' import { textColors } from '../../colors' import { FormBuilderContext } from './FormBuilderProvider' export interface FormInputProps { fieldName?: string label?: any isRequired: boolean inputType: 'text' | 'number' | 'date' | 'email' pattern?: string patternError?: string requiredError?: string columns: '1' | '2' } const isRegex = (strRegex: string): boolean => { try { const testRegex = new RegExp(strRegex) return true } catch { return false } } const strToRegex = (strRegex: string | undefined): RegExp | undefined => { try { const testRegex = strRegex ? new RegExp(strRegex) : undefined return testRegex } catch { return undefined } } const FormInputClient: React.FC = ({ isRequired = true, fieldName = '', label, inputType, pattern, patternError, requiredError, columns, }) => { const { register, errors } = useContext(FormBuilderContext) if (!register || !errors) { return null } const labelTextContent = typeof label === 'string' ? label : Plain.serialize(label) const patternObj: | { pattern?: RegExp valueAsNumber?: false valueAsDate?: false } | { pattern?: undefined valueAsNumber?: false valueAsDate?: true } | { pattern?: undefined valueAsNumber?: true valueAsDate?: false } = inputType === 'number' ? { pattern: undefined, valueAsNumber: true, valueAsDate: false, } : inputType === 'date' ? { pattern: undefined, valueAsNumber: false, valueAsDate: true, } : { pattern: strToRegex(pattern), valueAsNumber: false, valueAsDate: false, } const registerAttributes = fieldName ? register(fieldName?.replace(/\s/g, '').toLowerCase(), { required: isRequired, ...patternObj, }) : {} return (
{errors[fieldName] && (
{errors[fieldName]?.type === 'required' && requiredError} {errors[fieldName]?.type === 'pattern' && patternError} {errors[fieldName]?.message && `This field ${errors[fieldName]?.message}`}
)}
) } export default FormInputClient