import { useState, useEffect } from "react"; import type { RegistryItem } from "../lib/types"; const RegistryManager = () => { const [registryItems, setRegistryItems] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [newItem, setNewItem] = useState({ name: "", link: "" }); const [showClaimants, setShowClaimants] = useState>(new Set()); useEffect(() => { fetchRegistryItems(); }, []); const fetchRegistryItems = async () => { setLoading(true); setError(null); try { const response = await fetch("/api/registry"); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); setRegistryItems(data); } catch (e: any) { setError(e.message); console.error("Failed to fetch registry items:", e); } finally { setLoading(false); } }; const handleAddItem = async (e: React.FormEvent) => { e.preventDefault(); if (!newItem.name.trim()) return; try { const response = await fetch("/api/registry", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify(newItem), }); if (!response.ok) { throw new Error(`Failed to add item: ${response.statusText}`); } setNewItem({ name: "", link: "" }); await fetchRegistryItems(); } catch (error: any) { setError(error.message); console.error("Error adding item:", error); } }; const handleDeleteItem = async (itemId: string) => { if (!confirm("Are you sure you want to delete this item?")) return; try { const response = await fetch(`/api/registry/${itemId}`, { method: "DELETE", }); if (!response.ok) { throw new Error(`Failed to delete item: ${response.statusText}`); } await fetchRegistryItems(); } catch (error: any) { setError(error.message); console.error("Error deleting item:", error); } }; const toggleClaimantVisibility = (itemId: string) => { const newShowClaimants = new Set(showClaimants); if (newShowClaimants.has(itemId)) { newShowClaimants.delete(itemId); } else { newShowClaimants.add(itemId); } setShowClaimants(newShowClaimants); }; if (loading) { return
Loading registry items...
; } if (error) { return
Error: {error}
; } return (

Add New Item

setNewItem({ ...newItem, name: e.target.value }) } required />
setNewItem({ ...newItem, link: e.target.value }) } />
{registryItems.map((item) => ( ))}
Item Link Status Actions
{item.name} {item.taken && ( <> Taken {item.claimedBy && ( )} )}
{item.taken && item.claimedBy && showClaimants.has(item.id) && (
Claimed by: {item.claimedBy}
)}
{item.link && ( View )} {item.taken ? "Claimed" : "Available"}
); }; export default RegistryManager;