import { useFormContext, useFormControl } from 'domains/forms/hooks' import { InputHTMLAttributes } from 'preact/compat' import { useRef, useLayoutEffect } from 'preact/hooks' import FormControlWrapper from './wrapper' type InputProps = InputHTMLAttributes & { name: 'textMessageEntry' labelText: string labelClass: string contentHint?: string | null focus?: boolean } function Input({ id, name, type, labelText, labelClass, contentHint = null, focus, 'aria-invalid': ariaInvalid, 'aria-describedby': ariaDescribedBy, ...props }: InputProps) { const inputRef = useRef(null) const { isSubmitted } = useFormContext() const [field, { error }] = useFormControl(name) const hasError = isSubmitted && error const describedByIds: InputHTMLAttributes['aria-describedby'][] = [] if (ariaDescribedBy) { describedByIds.push(ariaDescribedBy) } if (contentHint) { describedByIds.push(`${id}-content-hint`) } if (hasError) { describedByIds.push(`${id}-error`) } useLayoutEffect(() => { if (inputRef.current && focus) { inputRef.current.focus() } }, [focus]) // todo: destructure Field return ( ) } export default Input