"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 (
);
}
export default AutoForm;