// web/js/components/ItemCard.js const ItemCard = ({ item, onViewDetail, onClaim, onEdit, onDelete, onManualClaim, currentUserId, showActions = true, isManager = false, }) => { const isOwnItem = currentUserId && item.reporter_id === currentUserId; // ✅ FIX: Status logic yang lebih akurat const isCaseClosed = item.status === "case_closed"; const isExpired = item.status === "expired"; const isVerified = item.status === "verified" || item.status === "completed"; const isPendingClaim = item.status === "pending_claim"; const isUnclaimed = item.status === "unclaimed"; // ✅ User hanya bisa claim jika unclaimed DAN bukan barang sendiri const canClaim = isUnclaimed && !isOwnItem; // ✅ Edit/Delete logic let canEditOrDelete = false; if (!isCaseClosed) { if (isManager) { canEditOrDelete = true; } else { canEditOrDelete = !isExpired; } } const showEditButton = (isOwnItem || isManager) && canEditOrDelete; // ✅ Improved status display text const getStatusText = (status) => { const statusMap = { unclaimed: "Belum Diklaim", pending_claim: "Sedang Diklaim", verified: "Sudah Diklaim", completed: "Selesai", case_closed: "Kasus Ditutup", expired: "Kadaluarsa", }; return statusMap[status] || status; }; return (
{/* Expired Banner */} {isExpired && (
⚠️ EXPIRED - Manager Only View
)} {/* Completed Banner - TAMBAHKAN INI */} {isVerified && (
✅ SUDAH DIKLAIM
)} {item.name} onViewDetail && onViewDetail(item)} onError={(e) => (e.target.src = "https://via.placeholder.com/280x200?text=No+Image") } />

{item.name}

📍 {item.location} 📅 {Helpers.formatDate(item.date_found)}
{getStatusText(item.status)} {/* ✅ Better display */} {isOwnItem && ( Barang Anda )}
{showActions && (
{/* Detail Button */} {onViewDetail && ( )} {/* Manual Claim (Manager) */} {onManualClaim && isUnclaimed && ( )} {/* User Claim - ✅ HANYA SHOW JIKA UNCLAIMED */} {onClaim && canClaim && ( )} {/* Info untuk status pending */} {isPendingClaim && !isOwnItem && (
⏳ Sedang diproses
)} {/* Edit Button */} {onEdit && showEditButton && ( )} {/* Delete Button */} {onDelete && canEditOrDelete && ( )}
)}
); };