"use client"; import { use, useState, useEffect } from "react"; import { useRouter } from "next/navigation"; import { supabaseBrowser } from "@/lib/supabaseClient"; import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card"; 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 { Select, SelectTrigger, SelectValue, SelectContent, SelectItem, } from "@/components/ui/select"; export default function AddPartToModelPage({ params }) { const { id: modelId } = use(params); // React 19 unwrap const router = useRouter(); const [search, setSearch] = useState(""); const [results, setResults] = useState([]); const [selectedPart, setSelectedPart] = useState(null); const [fitType, setFitType] = useState("direct"); const [notes, setNotes] = useState(""); // Search parts live useEffect(() => { async function load() { if (!search.trim()) { setResults([]); return; } const { data } = await supabaseBrowser .from("parts") .select("*") .ilike("name", `%${search}%`) .limit(20); setResults(data || []); } load(); }, [search]); async function save() { if (!selectedPart) return; await supabaseBrowser.from("parts_compatible_models").insert({ part_id: selectedPart.id, model_id: modelId, fit_type: fitType, notes: notes || null, }); router.push(`/admin/models/${modelId}`); } return ( Add Compatible Part {/* SEARCH */}
setSearch(e.target.value)} />
{/* SEARCH RESULTS */} {!selectedPart && results.length > 0 && (
{results.map((p) => ( ))}
)} {/* SELECTED PART CARD */} {selectedPart && (
{selectedPart.name}
{selectedPart.manufacturer || "-"} –{" "} {selectedPart.category || "-"}
)} {/* FIT TYPE + NOTES */} {selectedPart && ( <>