import { useFieldArray, useFormContext } from "react-hook-form"; import type { z } from "zod"; import { FormMessage } from "~/components/FormMessage"; import { Label } from "~/components/Label"; import { AddFieldButton } from "./AddFieldButton"; import { RemoveFieldButton } from "./RemoveFieldButton"; export function TextArrayFormField({ label, name, defaultFieldValue, bottomText, }: { label: string; name: keyof z.infer & string; defaultFieldValue: string; bottomText?: string; }) { const { register, formState: { errors }, clearErrors, } = useFormContext(); const { fields, append, remove } = useFieldArray({ name, }); const rootError = errors[name]?.root; return (
{fields.map((field, index) => { // @ts-expect-error const error = errors[name]?.[index]?.value; return (
{fields.length > 1 ? ( { remove(index); clearErrors(`${name}.root`); }} /> ) : null}
{error && ( {error.message as string} )}
); })} append({ value: defaultFieldValue })} /> {rootError && ( {rootError.message as string} )} {bottomText && !rootError ? ( {bottomText} ) : null}
); }