'use client'; import { useState, useEffect, useMemo } from 'react'; import { User, fetchUsers, truncateAddress } from '../utils/api'; import Pagination from '../components/Pagination'; import SearchInput from '../components/SearchInput'; import Modal from '../components/Modal'; const ITEMS_PER_PAGE = 20; export default function Users() { const [users, setUsers] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [currentPage, setCurrentPage] = useState(1); const [search, setSearch] = useState(''); const [selectedUser, setSelectedUser] = useState(null); const [showUserModal, setShowUserModal] = useState(false); const handlePlayerClick = (e: React.MouseEvent, playerId: string) => { e.preventDefault(); e.stopPropagation(); const user = users.find(u => u.active_wallet === playerId); if (user) { setSelectedUser(user); setShowUserModal(true); } }; // Filter and paginate users const filteredUsers = useMemo(() => { if (!search) return users; const searchLower = search.toLowerCase(); return users.filter(user => user.ref_id.toLowerCase().includes(searchLower) || (user.username || '').toLowerCase().includes(searchLower) || (user.active_wallet || '').toLowerCase().includes(searchLower) || (user.x_profile_url || '').toLowerCase().includes(searchLower) || (user.referred_id || '').toLowerCase().includes(searchLower) ); }, [users, search]); const currentUsers = filteredUsers.slice( (currentPage - 1) * ITEMS_PER_PAGE, currentPage * ITEMS_PER_PAGE ); useEffect(() => { const loadData = async () => { try { const usersData = await fetchUsers(); setUsers(usersData); } catch (err) { setError('Failed to load data. Please try again later.'); console.error('Error loading data:', err); } finally { setLoading(false); } }; loadData(); }, []); useEffect(() => { setCurrentPage(1); }, [search]); if (loading) { return (
Loading...
); } if (error) { return (
{error}
); } return (
{/* User Details Modal */} { setShowUserModal(false); setSelectedUser(null); }} title="User Details" > {selectedUser && (

Ref ID

{selectedUser.ref_id}

Username

{selectedUser.username || '-'}

Wallet Address

{selectedUser.active_wallet || '-'}

X Profile

{selectedUser.x_profile_url ? ( e.stopPropagation()} > View Profile ) : '-'}

Referred By

{selectedUser.referred_id === '-1' ? '-' : selectedUser.referred_id}

)}
{/* Users Section */}

Users

Total Users: {filteredUsers.length}
{currentUsers.map((user) => ( handlePlayerClick(e, user.active_wallet)} > ))}
Ref ID Username Bio X Profile Referred By Active Wallet
{user.ref_id} {user.username || '-'} {user.bio || '-'} {user.x_profile_url ? ( e.stopPropagation()} > {user.x_profile_url} ) : '-'} {user.referred_id === "-1" ? '-' : user.referred_id} {user.active_wallet ? truncateAddress(user.active_wallet) : '-'}
); }