// assets/js/pages/admin/tabs/ClaimsTabAdmin.js - WITH FULL CRUD
const ClaimsTabAdmin = ({ state, handlers }) => {
const {
claims,
filteredClaims,
claimStatusFilter,
setClaimStatusFilter,
claimSearchTerm,
setClaimSearchTerm,
showCreateClaimModal,
setShowCreateClaimModal,
showEditClaimModal,
setShowEditClaimModal,
} = state;
const {
handleViewClaimDetail,
handleDeleteClaim,
handleEditClaimClick,
loadClaims,
} = handlers;
// Filter claims locally
React.useEffect(() => {
let filtered = claims.filter((claim) => {
const matchesSearch =
claim.item_name.toLowerCase().includes(claimSearchTerm.toLowerCase()) ||
claim.user_name.toLowerCase().includes(claimSearchTerm.toLowerCase());
const matchesStatus =
!claimStatusFilter || claim.status === claimStatusFilter;
return matchesSearch && matchesStatus;
});
state.setFilteredClaims(filtered);
}, [claimSearchTerm, claimStatusFilter, claims]);
return (
Kelola Klaim
setClaimSearchTerm(e.target.value)}
className="flex-1 min-w-[200px] px-4 py-2 bg-slate-700 border-2 border-slate-600 rounded-xl text-white placeholder-slate-400 focus:border-blue-500 focus:outline-none"
/>
{/* Stats Summary */}
{claims.filter((c) => c.status === "pending").length}
Pending
{claims.filter((c) => c.status === "approved").length}
Approved
{claims.filter((c) => c.status === "rejected").length}
Rejected
{filteredClaims.map((claim) => (
{/* Header */}
{claim.item_name}
Pengklaim:{" "}
{claim.user_name}
{" "}
• {claim.contact}
{claim.status}
{/* Match Percentage */}
{claim.match_percentage && (
= 70
? "bg-green-500/10 border border-green-500/30"
: "bg-yellow-500/10 border border-yellow-500/30"
}`}
>
Similarity Match
= 70
? "text-green-400"
: "text-yellow-400"
}`}
>
{claim.match_percentage}%
)}
{/* Description */}
Deskripsi Klaim:
{claim.description}
{/* Timestamps */}
📅 Diajukan: {Helpers.formatDateTime(claim.created_at)}
{claim.verified_at && (
✅ Diverifikasi: {Helpers.formatDateTime(claim.verified_at)}
)}
{claim.verified_by_name && (
👤 Oleh: {claim.verified_by_name}
)}
{/* Notes */}
{claim.notes && (
Catatan Manager:
{claim.notes}
)}
{/* Case Closed Info */}
{claim.status === "approved" && claim.berita_acara_no && (
📋
Case Closed
No. BA:{" "}
{claim.berita_acara_no}
{claim.case_closed_at && (
Ditutup: {Helpers.formatDateTime(claim.case_closed_at)}
)}
{claim.case_closed_by_name && (
Oleh: {claim.case_closed_by_name}
)}
{claim.bukti_serah_terima && (
📄 Lihat Bukti
)}
)}
{/* Actions */}
{/* Edit button - only for pending claims */}
{claim.status === "pending" && (
)}
{/* Delete button */}
))}
{filteredClaims.length === 0 && (
🤝
{claimSearchTerm || claimStatusFilter
? "Tidak ada klaim yang sesuai filter"
: "Belum ada klaim"}
)}
);
};