"use client"; import { z } from "zod"; import { useFieldArray, useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { App } from "@/lib/app"; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { toast } from "sonner"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { TrashIcon } from "@radix-ui/react-icons"; import { useUpsertApp } from "@/lib/hooks"; const formSchema = z.object({ users: z.array( z.object({ email: z .string() .min(1, { message: "Email is required" }) .email({ message: "Email must be a valid email" }), firstName: z.string().min(1, { message: "First name is required" }), lastName: z.string().min(1, { message: "Last name is required" }), }), ), }); export function UsersSettingsForm({ app }: { app: App }) { const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { users: app.users ?? [], }, }); const { fields, remove, append } = useFieldArray({ name: "users", control: form.control, }); const upsertApp = useUpsertApp(); async function onSubmit(values: z.infer) { await upsertApp.mutateAsync({ ...app, users: values.users, }); toast.success("App user settings updated"); } return (
Email First Name Last Name {fields.map((field, index) => ( ( )} /> ( )} /> ( )} /> ))}
); }