import { ActionIcon, Badge, Button, Checkbox, Group, Table, Text, Tooltip } from '@mantine/core'; import { ArrowRightLeft, ClipboardList, Coins, Eye, FileText, History, MapPin } from 'lucide-react'; import { getNextInventoryAction, type InventoryAction, type WarehouseInventoryItem, } from '@/types/warehouse'; import { InventoryStatusBadge } from './badges'; import { formatDate, formatNumber, humanizeEnum } from './options'; interface WarehouseInventoryTableProps { items: WarehouseInventoryItem[]; busyId?: string | null; onAdvance: (item: WarehouseInventoryItem, action: InventoryAction) => void; onMove: (item: WarehouseInventoryItem) => void; onHistory: (item: WarehouseInventoryItem) => void; onView?: (item: WarehouseInventoryItem) => void; onInspect?: (item: WarehouseInventoryItem) => void; onFeePreview?: (item: WarehouseInventoryItem) => void; onReleaseDocument?: (item: WarehouseInventoryItem) => void; onLastMile?: (item: WarehouseInventoryItem) => void; selectedIds?: Set; onToggleSelect?: (id: string) => void; onToggleSelectAll?: () => void; allSelected?: boolean; someSelected?: boolean; } const itemKind = (item: WarehouseInventoryItem) => { if (item.containerId) return { label: 'Container', color: 'blue' }; if (item.cargoId) return { label: 'Cargo', color: 'grape' }; if (item.goodsId) return { label: 'Goods', color: 'orange' }; return { label: '-', color: 'gray' }; }; const actionColor: Record = { store: 'blue', reserve: 'grape', 'ready-for-loading': 'cyan', load: 'teal', dispatch: 'edr-green', 'ready-for-pickup': 'orange', release: 'yellow', deliver: 'green', }; export function WarehouseInventoryTable({ items, busyId, onAdvance, onMove, onHistory, onView, onInspect, onFeePreview, onReleaseDocument, onLastMile, selectedIds, onToggleSelect, onToggleSelectAll, allSelected, someSelected, }: WarehouseInventoryTableProps) { const selectable = Boolean(onToggleSelect); if (items.length === 0) { return ( No inventory items found. ); } return ( {selectable && ( )} Booking Facility Warehouse Yard Zone Item Qty Weight Status Arrived Actions {items.map((item) => { const kind = itemKind(item); const busy = busyId === item.id; const nextAction = getNextInventoryAction(item); return ( {selectable && ( onToggleSelect?.(item.id)} /> )} {item.bookingId ? ( {item.bookingId.slice(0, 8)}... ) : ( - )} {item.warehouse?.facility?.name ?? '-'} {item.warehouse?.code ?? '-'} {item.yard?.code ?? '-'} {item.zone?.code ?? '-'} {kind.label} {formatNumber(item.quantity)} {formatNumber(item.weight)} {formatDate(item.arrivedAt)} {onView && ( onView(item)}> )} {nextAction && ( )} {item.status === 'READY_FOR_PICKUP' && ( <> )} {item.status !== 'DISPATCHED' && ( onMove(item)}> )} {onInspect && ( onInspect(item)}> )} {onFeePreview && ( onFeePreview(item)}> )} {onReleaseDocument && item.releaseDate && ( onReleaseDocument(item)}> )} {onLastMile && item.booking?.lastMileDeliveryAddress && ( onLastMile(item)}> )} onHistory(item)}> ); })}
); }