import { useState } from "react"; import { formatWeight, formatPrice } from "../lib/formatters"; import { useUpdateCategory, useDeleteCategory } from "../hooks/useCategories"; import { LucideIcon } from "../lib/iconData"; import { IconPicker } from "./IconPicker"; interface CategoryHeaderProps { categoryId: number; name: string; icon: string; totalWeight: number; totalCost: number; itemCount: number; } export function CategoryHeader({ categoryId, name, icon, totalWeight, totalCost, itemCount, }: CategoryHeaderProps) { const [isEditing, setIsEditing] = useState(false); const [editName, setEditName] = useState(name); const [editIcon, setEditIcon] = useState(icon); const updateCategory = useUpdateCategory(); const deleteCategory = useDeleteCategory(); const isUncategorized = categoryId === 1; function handleSave() { if (!editName.trim()) return; updateCategory.mutate( { id: categoryId, name: editName.trim(), icon: editIcon }, { onSuccess: () => setIsEditing(false) }, ); } function handleDelete() { if ( confirm(`Delete category "${name}"? Items will be moved to Uncategorized.`) ) { deleteCategory.mutate(categoryId); } } if (isEditing) { return (
setEditName(e.target.value)} className="text-lg font-semibold border border-gray-200 rounded-md px-2 py-1" onKeyDown={(e) => { if (e.key === "Enter") handleSave(); if (e.key === "Escape") setIsEditing(false); }} autoFocus />
); } return (

{name}

{itemCount} {itemCount === 1 ? "item" : "items"} ·{" "} {formatWeight(totalWeight)} · {formatPrice(totalCost)} {!isUncategorized && (
)}
); }