"use client"; import { Button } from "../button"; import { Form } from "../form"; import type { FieldConfig } from "./types"; import type { ZodObjectOrWrapped } from "./utils"; import { getDefaultValues, getObjectFormSchema } from "./utils"; import AutoFormObject from "@/components/ui/auto-form/fields/object"; import { ScrollArea } from "@/components/ui/scroll-area"; import { cn } from "@/lib/utils"; import { zodResolver } from "@hookform/resolvers/zod"; import type { DefaultValues } from "react-hook-form"; import { useForm } from "react-hook-form"; import type { z } from "zod"; export function AutoFormSubmit({ children }: { children?: React.ReactNode }) { return ; } function AutoForm({ formSchema, values: valuesProp, onValuesChange: onValuesChangeProp, onParsedValuesChange, onSubmit: onSubmitProp, fieldConfig, children, className, }: { formSchema: SchemaType; values?: Partial>; onValuesChange?: (values: Partial>) => void; onParsedValuesChange?: (values: Partial>) => void; onSubmit?: (values: z.infer) => void; fieldConfig?: FieldConfig>; children?: React.ReactNode; className?: string; }) { const objectFormSchema = getObjectFormSchema(formSchema); const defaultValues: DefaultValues> = getDefaultValues(objectFormSchema); const form = useForm>({ resolver: zodResolver(formSchema), defaultValues, values: valuesProp, }); function onSubmit(values: z.infer) { const parsedValues = formSchema.safeParse(values); if (parsedValues.success) { onSubmitProp?.(parsedValues.data); } } return (
{ form.handleSubmit(onSubmit)(e); }} onChange={() => { const values = form.getValues(); onValuesChangeProp?.(values); const parsedValues = formSchema.safeParse(values); if (parsedValues.success) { onParsedValuesChange?.(parsedValues.data); } }} className={cn("space-y-5", className)} >
{children}
); } export default AutoForm;