import { Fragment } from 'react'; import { ImagePreviewButton } from '@/components/dialogs'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { formatNumber } from '@/lib/format'; import type { StokOpname, StokOpnameItem } from './columns'; const STOCK_QUALITY_CONFIG: Record = { good: { label: 'Bagus', className: 'bg-green-100 text-green-800' }, reject: { label: 'Reject', className: 'bg-red-100 text-red-800' }, retail: { label: 'Ecer', className: 'bg-blue-100 text-blue-800' }, }; export function StokOpnameItemSubRow({ stokOpname, items: loadedItems, isLoading, }: { stokOpname: StokOpname; items: StokOpnameItem[]; isLoading: boolean; }) { const items = loadedItems ?? []; const groupedByProduct = items.reduce( (acc, item) => { const productName = item.product_name ?? 'Tanpa Produk'; if (!acc[productName]) { acc[productName] = {}; } const variantName = item.variant_name ?? '-'; if (!acc[productName][variantName]) { acc[productName][variantName] = []; } acc[productName][variantName].push(item); return acc; }, {} as Record>, ); let counter = 0; return (
No Foto Varian Jenis Stok Sistem Stok Fisik Selisih {isLoading ? ( Memuat item... ) : items.length === 0 ? ( Tidak ada item. ) : ( Object.entries(groupedByProduct).map( ([productName, variants]) => { const variantEntries = Object.entries(variants); return ( {productName} {variantEntries.map(([variantName, variantItems]) => { const firstItem = variantItems[0]; return (
{firstItem?.photo_url ? ( ) : (
N/A
)} {variantName}
{variantItems.map((item) => { counter++; const qualityConfig = STOCK_QUALITY_CONFIG[item.stock_quality] ?? STOCK_QUALITY_CONFIG.good; return ( {counter} {qualityConfig.label} {formatNumber(item.system_stock)} {formatNumber(item.physical_stock)} 0 ? 'text-green-600' : item.difference < 0 ? 'text-red-600' : ''}`}> {item.difference > 0 ? '+' : ''}{formatNumber(item.difference)} ); })}
); })}
); }, ) )}
); }