import { ChevronDown, Pencil, Trash2 } from 'lucide-react'; import { RowActions } from '@/components/data-display'; import { Badge } from '@/components/ui/badge'; 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 { Restock, RestockStockType } from './columns'; const STOCK_TYPE_CONFIG: Record< RestockStockType, { label: string; className: string } > = { good: { label: 'Bagus', className: 'bg-green-100 text-green-800 hover:bg-green-100', }, reject: { label: 'Reject', className: 'bg-red-100 text-red-800 hover:bg-red-100', }, }; export type RestockCardRowParams = { restock: Restock; index: number; isExpanded: boolean; onToggleExpand: () => void; onEdit: (restock: Restock) => void; onDelete: (restock: Restock) => void; }; export function RestockCardRow({ restock, index, isExpanded, onToggleExpand, onEdit, onDelete, }: RestockCardRowParams) { const { can } = useCan(); const variantCount = restock.items_count ?? 0; const totalQty = restock.total_qty ?? 0; const productNamesStr = restock.product_names ?? ''; const productNames = productNamesStr ? productNamesStr.split(', ') : []; const stockTypeConfig = STOCK_TYPE_CONFIG[restock.stock_type] ?? STOCK_TYPE_CONFIG.good; return (
{index}.

{productNames.length > 0 ? productNames.join(', ') : '-'}

{stockTypeConfig.label}
{variantCount > 0 && ( ({variantCount} varian) )}
{formatDateTime(restock.created_at)} Oleh:{' '} {restock.created_by?.user_profile ?.full_name ?? '-'} {restock.notes && ( {restock.notes} )}
Qty:{' '} {formatNumber(totalQty)} Total:{' '} {formatCurrency(restock.total)}
{(can('restocks.update') || can('restocks.delete')) && ( , show: can('restocks.update'), onClick: () => onEdit(restock), }, { label: 'Hapus', icon: ( ), show: can('restocks.delete'), onClick: () => onDelete(restock), }, ]} wrapperClassName="flex shrink-0 items-center gap-1" /> )}
); }