'use client'; import { DetailedHTMLProps, forwardRef, InputHTMLAttributes, ReactNode, useEffect, useMemo, } from 'react'; import { clsx } from 'clsx'; import { useFormContext, useWatch } from 'react-hook-form'; import interClass from '../helpers/inter.font'; import { TranslatedLabel } from '../translation/translated-label'; export const Input = forwardRef< HTMLInputElement, DetailedHTMLProps, HTMLInputElement> & { removeError?: boolean; error?: any; disableForm?: boolean; customUpdate?: () => void; label: string; name: string; icon?: ReactNode; translationKey?: string; translationParams?: Record; } >((props, ref) => { const { label, icon, removeError, customUpdate, className, disableForm, error, translationKey, translationParams, ...rest } = props; const form = useFormContext(); const err = useMemo(() => { if (error) return error; if (!form || !form.formState.errors[props?.name!]) return; return form?.formState?.errors?.[props?.name!]?.message! as string; }, [form?.formState?.errors?.[props?.name!]?.message, error]); const watch = customUpdate ? form?.watch(props.name) : null; useEffect(() => { if (customUpdate) { customUpdate(); } }, [watch]); return (
{!!label && (
)}
{icon &&
{icon}
}
{!removeError && (
{err || <> }
)}
); }); Input.displayName = 'Input';