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"));