import { ChevronDown, Pencil, Trash2 } from 'lucide-react'; import { ImagePreviewButton } from '@/components/image-preview-button'; import { RowActions } from '@/components/row-actions'; import { Button } from '@/components/ui/button'; import { Card, CardContent } from '@/components/ui/card'; import { useCan } from '@/hooks/use-can'; import { formatDateTime, formatNumber } from '@/lib/format'; import { formatCurrency } from '@/lib/utils'; import type { Cutting } from './columns'; export type CuttingCardRowParams = { cutting: Cutting; index: number; isExpanded: boolean; onToggleExpand: () => void; onEdit: (cutting: Cutting) => void; onDelete: (cutting: Cutting) => void; }; export function CuttingCardRow({ cutting, index, isExpanded, onToggleExpand, onEdit, onDelete, }: CuttingCardRowParams) { const { can } = useCan(); const items = cutting.cutting_materials ?? []; const result = cutting.cutting_results?.[0]; const materialCount = items.length; const productName = result?.product_name ?? '-'; const totalUsage = items.reduce( (sum, item) => sum + Number(item.material_usage), 0, ); return ( <>
{index}.

{productName}

{materialCount > 0 && ( {materialCount} bahan baku )} {cutting.description && ( ยท {cutting.description} )}
{formatDateTime(cutting.created_at)} {cutting.status === 'completed' ? 'Selesai' : cutting.status === 'cancelled' ? 'Dibatalkan' : 'Dikerjakan'}
Pemakaian:{' '} {formatNumber(totalUsage)} {result?.cutting_result && ( Hasil:{' '} {formatNumber(result.cutting_result)} )} {cutting.cost_per_unit && ( Per Unit:{' '} {formatCurrency(cutting.cost_per_unit)} )}
{cutting.photo_url && (
)}
, show: can('cuttings.update'), onClick: () => onEdit(cutting), }, { label: 'Hapus', icon: ( ), show: can('cuttings.delete'), onClick: () => onDelete(cutting), }, ]} wrapperClassName="flex shrink-0 items-center gap-1" />
); }