import { ImagePreviewButton } from '@/components/image-preview-button'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { formatNumber } from '@/lib/format'; import type { Cutting } from './columns'; export function CuttingItemSubRow({ cutting }: { cutting: Cutting }) { const items = cutting.cutting_materials ?? []; const combinations = cutting.cutting_material_combinations ?? []; const groupedMaterials = items.reduce( (acc, item) => { const key = item.combination_id ?? `single-${item.id}`; if (!acc[key]) { acc[key] = { combination: item.combination_id ? (combinations.find((c) => c.id === item.combination_id) ?? null) : null, materials: [], }; } acc[key].materials.push(item); return acc; }, {} as Record< string, { combination: { id: number; material_result: number | null } | null; materials: typeof items; } >, ); return (
{Object.entries(groupedMaterials).map(([key, group]) => (
{group.combination && (
Kombinasi {group.combination.material_result !== null && ( Hasil: {formatNumber(group.combination.material_result)} )}
)} No Foto Bahan Baku Varian Pemakaian Hasil {group.materials.length === 0 ? ( Tidak ada item. ) : ( group.materials.map((item, index) => ( {index + 1} {item.raw_material_price?.photo_url ? ( ) : (
N/A
)}
{item.raw_material_price?.raw_material?.name ?? '-'} {item.raw_material_price?.variant ?? '-'} {formatNumber(item.material_usage)} {group.combination ? '-' : (item.material_result !== null ? formatNumber(item.material_result) : '-')}
)) )}
))}
); }