'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 { cn } from '@/lib/utils'; import ItemDetailModal from '@/components/ItemDetailModal'; import PhotoModal from '@/components/PhotoModal'; 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 Matching Assets Found

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

{cat}

{categoryItems.length} Registered Signatures

{expandedCategory === cat ? : } {onEditCategory && ( )}
{expandedCategory === cat && (
{categoryItems.map(item => (
handleItemClick(item)} className="flex items-center gap-4 flex-1 min-w-0 pr-4 cursor-pointer" > {item.photo_path || item.image_url ? (
{ e.stopPropagation(); setSelectedPhotoItem(item); }} className="w-12 h-12 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 ? 'Extract Details via Vision' : 'No Technical Specs')}

{item.quantity}

QTY

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