"use client"; import * as React from "react"; import { zodResolver } from "@hookform/resolvers/zod"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; import { getErrorMessage } from "../helpers/lib/handle-errors"; import { Button } from "@repo/ui/src/button"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@repo/ui/src/form"; import { FileUploader } from "./file-uploader"; import { UploadedFilesCard } from "./uploaded-files-card"; import { useUploadFile } from "@repo/ui/hooks/use-upload-file"; const schema = z.object({ images: z.array(z.instanceof(File)), }); type Schema = z.infer; export default function ReactHookFormDemo() { const [loading, setLoading] = React.useState(false); const { uploadFiles, uploadedFiles, isUploading } = useUploadFile( "imageUploader", { defaultUploadedFiles: [] }, ); const form = useForm({ resolver: zodResolver(schema), defaultValues: { images: [], }, }); function onSubmit(input: Schema) { setLoading(true); toast.promise(uploadFiles(input.images), { loading: "Uploading images...", success: () => { form.reset(); setLoading(false); return "Images uploaded"; }, error: (err) => { setLoading(false); return getErrorMessage(err); }, }); } return (
(
Images {uploadedFiles.length > 0 ? ( ) : null}
)} />
); }