const { useState, useEffect } = React; const UserApp = () => { const state = useUserState(); const handlers = useUserHandlers(state); const { user, setUser, activeTab, setActiveTab, stats, items, setFilteredItems, searchTerm, categoryFilter, showDetailModal, setShowDetailModal, selectedItem, showClaimModal, setShowClaimModal, showReportLostModal, setShowReportLostModal, showReportFoundModal, setShowReportFoundModal, toast, setToast, loading, photoPreview, setPhotoPreview, showSelectLostItemModal, setShowSelectLostItemModal, suggestedLostItems, claimInitialData, categories, } = state; useEffect(() => { if (!AuthUtils.checkAuthAndRedirect("user")) return; const currentUser = AuthUtils.getCurrentUser(); setUser(currentUser); handlers.loadData(); }, []); useEffect(() => { filterItems(); }, [searchTerm, categoryFilter, items]); const filterItems = () => { let filtered = items.filter((item) => { const matchesSearch = item.name.toLowerCase().includes(searchTerm.toLowerCase()) || item.location.toLowerCase().includes(searchTerm.toLowerCase()); const matchesCategory = !categoryFilter || Helpers.getCategoryValue(item.category_id) === categoryFilter; return matchesSearch && matchesCategory; }); setFilteredItems(filtered); }; return (

Dashboard User

Selamat datang di Lost & Found System

{activeTab === "browse" && ( )} {activeTab === "public-lost" && ( )} {activeTab === "lost" && ( )} {activeTab === "found" && ( )} {activeTab === "claims" && ( )}
state.setShowSelectLostItemModal(false)} lostItems={suggestedLostItems} onSelect={handlers.handleSelectLostItemForClaim} onManual={handlers.handleManualClaimEntry} /> state.setShowFoundOptionModal(false)} onSelectOption={handlers.handleSelectFoundOption} /> state.setShowDirectClaimModal(false)} onSubmit={handlers.handleDirectClaimSubmit} loading={loading} lostItem={state.selectedLostItemForFound} /> state.setShowDetailModal(false)} item={state.selectedItem} user={state.user} onClaim={handlers.handleClaim} /> state.setShowClaimModal(false)} onSubmit={handlers.submitClaim} loading={loading} initialData={claimInitialData} categories={categories} /> state.setShowReportLostModal(false)} onSubmit={handlers.submitReportLost} loading={loading} categories={categories} /> state.setShowReportFoundModal(false)} onSubmit={handlers.submitReportFound} loading={loading} photoPreview={photoPreview} onPhotoChange={handlers.handlePhotoChange} user={user} categories={categories} /> {state.toast && ( state.setToast(null)} /> )}
); }; ReactDOM.render(, document.getElementById("root"));