Changeset cb4a1da for frontend/src/pages/AllUsers.tsx
- Timestamp:
- 02/05/26 20:52:11 (5 months ago)
- Branches:
- main
- Children:
- 2ce7c1e
- Parents:
- 694fc25
- File:
-
- 1 edited
-
frontend/src/pages/AllUsers.tsx (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
frontend/src/pages/AllUsers.tsx
r694fc25 rcb4a1da 4 4 5 5 interface User { 6 username: string;7 fullName: string;6 username: string; 7 fullName: string; 8 8 } 9 9 10 10 const AllUsers = () => { 11 const [users, setUsers] = useState<User[]>([]);12 const [searchedUser, setSearchedUser] = useState<string>("");13 const [error, setError] = useState<string | null>(null);14 const navigate = useNavigate();11 const [users, setUsers] = useState<User[]>([]); 12 const [searchedUser, setSearchedUser] = useState<string>(""); 13 const [error, setError] = useState<string | null>(null); 14 const navigate = useNavigate(); 15 15 16 useEffect(() => {17 const fetchUsers = async () => {18 const response = axiosInstance.get("/users/all");19 setUsers((await response).data);20 };21 fetchUsers();22 }, []);16 useEffect(() => { 17 const fetchUsers = async () => { 18 const response = axiosInstance.get("/users/na/all"); 19 setUsers((await response).data); 20 }; 21 fetchUsers(); 22 }, []); 23 23 24 const handleUserClick = (username: string) => {25 navigate(`/users/${username}`);26 };24 const handleUserClick = (username: string) => { 25 navigate(`/users/${username}`); 26 }; 27 27 28 const handleSearch = async (e: React.FormEvent) => {29 e.preventDefault();30 try {31 const response = await axiosInstance.get(`/users/search`, {32 params: { name: searchedUser },33 });34 setUsers(response.data);35 } catch (err: any) {36 const errorMessage = err.response?.data?.error || "Search failed";37 setError(errorMessage);38 }39 };28 const handleSearch = async (e: React.FormEvent) => { 29 e.preventDefault(); 30 try { 31 const response = await axiosInstance.get(`/users/na/search`, { 32 params: { name: searchedUser }, 33 }); 34 setUsers(response.data); 35 } catch (err: any) { 36 const errorMessage = err.response?.data?.error || "Search failed"; 37 setError(errorMessage); 38 } 39 }; 40 40 41 if (users.length == 0) return <div className="p-6">Loading...</div>;42 if (error) {43 return (44 <div className="p-6 bg-red-50 border border-red-200 text-red-700 rounded-lg">45 <h2 className="font-bold">Error</h2>46 <p>{error}</p>47 </div>48 );49 }41 if (users.length == 0) return <div className="p-6">Loading...</div>; 42 if (error) { 43 return ( 44 <div className="p-6 bg-red-50 border border-red-200 text-red-700 rounded-lg"> 45 <h2 className="font-bold">Error</h2> 46 <p>{error}</p> 47 </div> 48 ); 49 } 50 50 51 return (52 <div className="container mx-auto p-6">53 <h1 className="text-3xl font-bold mb-6">All Users</h1>54 <form onSubmit={handleSearch} className="flex gap-2 mb-10">55 <input56 type="text"57 value={searchedUser}58 onChange={(e) => setSearchedUser(e.target.value)}59 className="border p-2 rounded w-full"60 placeholder="Search for a user..."61 />62 <button63 type="submit"64 className="bg-blue-600 text-white px-6 py-2 rounded hover:bg-blue-700 transition-colors"65 >66 Search67 </button>68 </form>51 return ( 52 <div className="container mx-auto p-6"> 53 <h1 className="text-3xl font-bold mb-6">All Users</h1> 54 <form onSubmit={handleSearch} className="flex gap-2 mb-10"> 55 <input 56 type="text" 57 value={searchedUser} 58 onChange={(e) => setSearchedUser(e.target.value)} 59 className="border p-2 rounded w-full" 60 placeholder="Search for a user..." 61 /> 62 <button 63 type="submit" 64 className="bg-blue-600 text-white px-6 py-2 rounded hover:bg-blue-700 transition-colors" 65 > 66 Search 67 </button> 68 </form> 69 69 70 <div className="grid gap-4">71 {users.map((u) => (72 <div73 key={u.username}74 onClick={() => handleUserClick(u.username)}75 className="bg-white shadow-md rounded-lg p-4 hover:shadow-lg hover:bg-gray-50 cursor-pointer transition-all"76 >77 <h2 className="text-xl font-semibold">{u.fullName}</h2>78 <p className="text-gray-600">@{u.username}</p>79 </div>80 ))}81 </div>82 </div>83 );70 <div className="grid gap-4"> 71 {users.map((u) => ( 72 <div 73 key={u.username} 74 onClick={() => handleUserClick(u.username)} 75 className="bg-white shadow-md rounded-lg p-4 hover:shadow-lg hover:bg-gray-50 cursor-pointer transition-all" 76 > 77 <h2 className="text-xl font-semibold">{u.fullName}</h2> 78 <p className="text-gray-600">@{u.username}</p> 79 </div> 80 ))} 81 </div> 82 </div> 83 ); 84 84 }; 85 85
Note:
See TracChangeset
for help on using the changeset viewer.
