import { ImagePreviewButton } from '@/components/dialogs'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { formatNumber } from '@/lib/format'; import { formatCurrency } from '@/lib/utils'; import { Fragment } from 'react'; import type { Purchase, PurchaseItemDetail } from './columns'; export function PurchaseItemSubRow({ purchase, items: loadedItems, isLoading, }: { purchase: Purchase; items: PurchaseItemDetail[]; isLoading: boolean; }) { const items = loadedItems ?? []; const groupedByMaterial = items.reduce( (acc, item) => { const materialName = item.raw_material_price?.raw_material?.name ?? '-'; const unit = item.raw_material_price?.raw_material?.unit ?? ''; if (!acc[materialName]) { acc[materialName] = { unit, items: [] }; } acc[materialName].items.push(item); return acc; }, {} as Record, ); const materialEntries = Object.entries(groupedByMaterial); const isMultiMaterial = materialEntries.length > 1; let counter = 0; return (
No Foto Varian Harga Qty Subtotal {isLoading ? ( Memuat item... ) : items.length === 0 ? ( Tidak ada item. ) : ( <> {materialEntries.map(([materialName, group]) => { const totalQty = group.items.reduce( (sum, item) => sum + item.quantity, 0, ); const totalSubtotal = group.items.reduce( (sum, item) => sum + item.subtotal, 0, ); return ( {isMultiMaterial && ( {materialName} {formatNumber(totalQty)}{' '} {group.unit} {formatCurrency(totalSubtotal)} )} {group.items.map((item) => { counter++; return ( {counter} {item.raw_material_price?.photo_url ? ( ) : (
N/A
)}
{item.raw_material_price?.variant ?? '-'} {formatCurrency(item.unit_price)} {formatNumber(item.quantity)}{' '} {group.unit} {formatCurrency(item.subtotal)}
); })}
); })} )}
); }