"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; import { PlantCategory } from "@prisma/client"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, } from "@/components/ui/dialog"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { useToast } from "@/hooks/use-toast"; import { Plus } from "lucide-react"; import { CATEGORY_LABELS, CATEGORY_ORDER } from "@/lib/garden/categories"; const schema = z.object({ commonName: z.string().min(1, "Name is required"), species: z.string().optional(), variety: z.string().optional(), category: z.nativeEnum(PlantCategory), zone: z.string().optional(), plantedAt: z.string().optional(), source: z.string().optional(), notes: z.string().optional(), }); type FormValues = z.infer; export function AddPlantButton() { const [open, setOpen] = useState(false); const router = useRouter(); const { toast } = useToast(); const form = useForm({ resolver: zodResolver(schema), defaultValues: { category: "CANOPY_TREE" }, }); async function onSubmit(values: FormValues) { const res = await fetch("/api/plants", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(values), }); if (!res.ok) { const err = await res.json().catch(() => ({})); toast({ title: "Error", description: err.error ?? "Could not save plant.", variant: "destructive" }); return; } const plant = await res.json(); toast({ title: "Plant added!", description: `${values.commonName} is now in your food forest.` }); setOpen(false); form.reset(); router.push(`/garden/${plant.id}`); router.refresh(); } return ( <> Add a plant
{form.formState.errors.commonName && (

{form.formState.errors.commonName.message}

)}