import { useEffect, useState } from "react"; import { useCurrency } from "../hooks/useCurrency"; import { useItems } from "../hooks/useItems"; import { useSyncSetupItems } from "../hooks/useSetups"; import { useWeightUnit } from "../hooks/useWeightUnit"; import { formatPrice, formatWeight } from "../lib/formatters"; import { LucideIcon } from "../lib/iconData"; import { SlideOutPanel } from "./SlideOutPanel"; interface ItemPickerProps { setupId: number; currentItemIds: number[]; isOpen: boolean; onClose: () => void; } export function ItemPicker({ setupId, currentItemIds, isOpen, onClose, }: ItemPickerProps) { const { data: items } = useItems(); const syncItems = useSyncSetupItems(setupId); const unit = useWeightUnit(); const currency = useCurrency(); const [selectedIds, setSelectedIds] = useState>(new Set()); // Reset selected IDs when panel opens useEffect(() => { if (isOpen) { setSelectedIds(new Set(currentItemIds)); } }, [isOpen, currentItemIds]); function handleToggle(itemId: number) { setSelectedIds((prev) => { const next = new Set(prev); if (next.has(itemId)) { next.delete(itemId); } else { next.add(itemId); } return next; }); } function handleDone() { syncItems.mutate(Array.from(selectedIds), { onSuccess: () => onClose(), }); } // Group items by category const grouped = new Map< number, { categoryName: string; categoryIcon: string; items: NonNullable; } >(); if (items) { for (const item of items) { const group = grouped.get(item.categoryId); if (group) { group.items.push(item); } else { grouped.set(item.categoryId, { categoryName: item.categoryName, categoryIcon: item.categoryIcon, items: [item], }); } } } return (
{!items || items.length === 0 ? (

No items in your collection yet.

) : ( Array.from(grouped.entries()).map( ([ categoryId, { categoryName, categoryIcon, items: catItems }, ]) => (

{" "} {categoryName}

{catItems.map((item) => ( ))}
), ) )}
{/* Action buttons */}
); }