'use client'; import { useState } from 'react'; import { Item } from '@/lib/db'; import { buildPhotoUrl } from '@/lib/api'; import { ChevronRight, ChevronDown, Layers, Package } from 'lucide-react'; import { clsx, type ClassValue } from 'clsx'; import { twMerge } from 'tailwind-merge'; import ItemDetailModal from '@/components/ItemDetailModal'; import PhotoModal from '@/components/PhotoModal'; function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); } interface InventoryTableProps { items: Item[]; categories: string[]; expandedCategory: string | null; onExpandCategory: (category: string | null) => void; onItemClick: (item: Item) => void; onEditCategory?: (category: string) => void; categoriesList?: any[]; backendUrl?: string; } export default function InventoryTable({ items, categories, expandedCategory, onExpandCategory, onItemClick, onEditCategory, categoriesList = [], backendUrl = '' }: InventoryTableProps) { const [selectedItemDetail, setSelectedItemDetail] = useState(null); const [refreshTrigger, setRefreshTrigger] = useState(0); const [selectedPhotoItem, setSelectedPhotoItem] = useState(null); const handleItemClick = (item: Item) => { setSelectedItemDetail(item); onItemClick(item); }; const handleCloseDetail = () => { setSelectedItemDetail(null); }; const handleItemRefresh = () => { setRefreshTrigger(prev => prev + 1); }; if (categories.length === 0) { return (

No Results Found

); } return (
{categories.map(cat => { const categoryItems = items.filter(i => i.category === cat); return (
onExpandCategory(expandedCategory === cat ? null : cat)} >

{cat}

{categoryItems.length} Item Types In Stock

{expandedCategory === cat ? : } {onEditCategory && ( )}
{expandedCategory === cat && (
{categoryItems.map(item => (
handleItemClick(item)} className="flex items-center gap-3 flex-1 min-w-0 pr-4 cursor-pointer" > {item.photo_path || item.image_url ? (
{ e.stopPropagation(); setSelectedPhotoItem(item); }} className="w-10 h-10 shrink-0 border border-border overflow-hidden cursor-pointer hover:border-primary transition-colors" > {item.name}
) : (
)}

{item.name}

{item.specs || (item.photo_path || item.image_url ? 'Tap Photo For Details' : 'No Specs')}

{item.quantity}

Stock

))}
)}
); })} {selectedItemDetail && ( )} {selectedPhotoItem && (selectedPhotoItem.photo_path || selectedPhotoItem.image_url) && ( setSelectedPhotoItem(null)} /> )}
); } // EditIcon component (lucide-react equivalent) function EditIcon({ size = 24 }: { size?: number }) { return ( ); }