// assets/js/pages/admin/tabs/ItemsTab.js const ItemsTab = ({ state, handlers }) => { const { showExpired, setShowExpired, itemSearchTerm, setItemSearchTerm, itemStatusFilter, setItemStatusFilter, itemCategoryFilter, setItemCategoryFilter, filteredItems, items, showCreateItemModal, setShowCreateItemModal, photoPreview, itemPage, itemTotalPages, itemTotalRecords, loading, } = state; const { handleViewItemDetail, handleCreateItem, handleEditItemClick, handleDeleteItem, handlePhotoChange, loadItems, } = handlers; // ✅ Gunakan useEffect untuk reload data saat Filter / Page berubah // Kita menggunakan debounce (tunda) untuk search agar tidak spam API React.useEffect(() => { const timer = setTimeout(() => { // Reset ke halaman 1 jika filter berubah // Jika hanya halaman yang berubah, load halaman tersebut loadItems(itemPage); }, 500); return () => clearTimeout(timer); }, [ itemPage, itemSearchTerm, itemStatusFilter, itemCategoryFilter, showExpired, ]); // Reset page ke 1 jika filter berubah (kecuali itemPage itu sendiri) React.useEffect(() => { state.setItemPage(1); }, [itemSearchTerm, itemStatusFilter, itemCategoryFilter, showExpired]); return (

{showExpired ? "📦 Barang Expired" : "📦 Kelola Barang"}

setItemSearchTerm(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" />
{loading ? (

Memuat data...

) : ( <>
{/* ✅ PERUBAHAN UTAMA: Kita me-map 'items' secara langsung. Tidak perlu filteredItems.filter() lagi karena backend sudah mengirimkan data yang sudah terfilter (hanya 10 biji) sesuai halaman aktif. */} {items.map((item) => (
{item.status === "expired" && (
⚠️ EXPIRED
)} {item.name} handleViewItemDetail(item)} onError={(e) => (e.target.src = "https://via.placeholder.com/280x200?text=No+Image") } />

{item.name}

📍 {item.location} 📅 {Helpers.formatDate(item.date_found)} 👤 {item.reporter_name}
{item.status}
{/* Tombol Edit/Hapus hanya muncul jika bukan case_closed */} {item.status !== "case_closed" && ( <> )}
))}
{items.length === 0 && (
{showExpired ? "⚠️" : "📦"}

{showExpired ? "Belum ada barang expired" : "Tidak ada barang ditemukan"}

)} {/* ✅ KOMPONEN PAGINATION */} {items.length > 0 && ( state.setItemPage(page)} itemsPerPage={10} /> )} )}
); };