"use client"; import { zodResolver } from "@hookform/resolvers/zod"; import { useForm } from "react-hook-form"; import { z } from "zod"; import { Button } from "@/components/ui/button"; import { Form, FormControl, FormField, FormItem, FormMessage, } from "@/components/ui/form"; const formSchema = z.object({ username: z.string().min(2, { message: "Username must be at least 2 characters.", }), }); import React from "react"; import { Input } from "@/components/ui/input"; import { groupSchema } from "@/lib/validations/group"; import { api } from "@/trpc/react"; import { useRouter } from "next/navigation"; import type { Group } from "@/server/db/schema"; import { Textarea } from "@/components/ui/textarea"; function GroupForm({ initialGroup }: { initialGroup?: Group }) { const router = useRouter(); const utils = api.useUtils(); const createGroup = api.group.create.useMutation({ onSuccess(group) { router.push(`/group/${group?.id}`); utils.invalidate(); }, }); const updateGroup = api.group.update.useMutation({ onSuccess() { utils.group.get.invalidate({ id: initialGroup?.id }); }, }); const form = useForm>({ resolver: zodResolver(groupSchema), defaultValues: { name: initialGroup?.name ?? "", description: initialGroup?.description ?? "", }, }); const existing = Boolean(initialGroup?.id?.length); function onSubmit(group: z.infer) { if (existing) { updateGroup.mutate({ group, groupId: initialGroup?.id! }); } else { createGroup.mutate({ group }); } } return (
( )} /> (