"use client"; import * as z from "zod"; import { useFieldArray, useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { IconTrashX } from "@tabler/icons-react"; import ButtonWithIcon from "@/components/ui/button-with-icon"; import { Button } from "@/components/ui/button"; enum UserRole { GUEST = "guest", MEMBER = "member", OWNER = "owner", } const inviteFormSchema = z.object({ members: z .array( z.object({ email: z.string({ required_error: "Email is required", }).email({ message: "Please enter a valid email" }), role: z .string({ required_error: "Please select a role", }), }), ), }); type InviteFormValues = z.infer const defaultValues: Partial = { members: [ { email: "user@example.com", role: "member" }, ], }; export function WorkspaceInviteForm() { const form = useForm({ resolver: zodResolver(inviteFormSchema), defaultValues, mode: "onChange", }); const { fields, append, remove } = useFieldArray({ name: "members", control: form.control, }); function onSubmit(data: InviteFormValues) { console.log(data); } return (
{ fields.map((field, index) => { const key = index.toString(); return (
{index === 0 && Email} ( )} />
{index === 0 && Role} ( )} />
{index != 0 && } variant="secondary" onClick={() => remove(index)} /> }
); }) }
); }