diff --git a/frontend/src/pages/DriverList.tsx b/frontend/src/pages/DriverList.tsx index 531b825..19cc850 100644 --- a/frontend/src/pages/DriverList.tsx +++ b/frontend/src/pages/DriverList.tsx @@ -1,5 +1,5 @@ import { useNavigate } from "react-router-dom"; -import { useState } from "react"; +import { useState, useEffect } from "react"; import AdminHeader from "../components/AdminHeader"; import DriverListCard from "../components/DriversListCard"; @@ -10,8 +10,13 @@ import { DriverWithVandC } from "../types/datatypes.ts"; const DriversList = () => { const { data: Drivers, loading } = useDrivers(); const [selectedDriver, setSelectedDriver] = useState(); + const [sortedDrivers, setSortedDrivers] = useState([]); + const [isSorted, setIsSorted] = useState(false); // Tracks toggle state + const [originalDrivers, setOriginalDrivers] = useState([]); // Stores the original list + const [searchQuery, setSearchQuery] = useState(""); // Tracks the search input const navigate = useNavigate(); + // Handle driver click to show more details const handleDriverClick = (driver: DriverWithVandC) => { setSelectedDriver(driver); @@ -23,6 +28,46 @@ const DriversList = () => { navigate(`/view-profile/${selectedDriver.id}`); }; + // Toggle sorting between alphabetical and default + const handleSortToggle = () => { + if (!Drivers) return; + + if (isSorted) { + setSortedDrivers(originalDrivers); // Reset to original order + } else { + const sorted = [...Drivers].sort((a, b) => { + const nameA = `${a.first_name} ${a.last_name}`.toLowerCase(); + const nameB = `${b.first_name} ${b.last_name}`.toLowerCase(); + return nameA.localeCompare(nameB); + }); + setSortedDrivers(sorted); + } + setIsSorted(!isSorted); // Toggle the sort state + }; + + // Filter drivers based on search query + const handleSearch = (query: string) => { + setSearchQuery(query); + if (!query) { + setSortedDrivers(isSorted ? sortedDrivers : originalDrivers); // Reset to original or sorted list + return; + } + + const filtered = Drivers?.filter((driver) => { + const fullName = `${driver.first_name} ${driver.last_name}`.toLowerCase(); + return fullName.includes(query.toLowerCase()); + }); + setSortedDrivers(filtered || []); + }; + + // Initialize drivers and store the original list + useEffect(() => { + if (Drivers) { + setOriginalDrivers(Drivers); + setSortedDrivers(Drivers); // Default display + } + }, [Drivers]); + if (loading) return ; return ( @@ -110,8 +155,8 @@ const DriversList = () => {
@@ -130,9 +175,26 @@ const DriversList = () => {
-
-

Driver's List

-
List of Drivers within the university.
+
+
+

Driver's List

+
List of Drivers within the university.
+
+
+ handleSearch(e.target.value)} + className="p-2 rounded-md bg-white text-black" + /> + +
{ id="listcontainer" >
- {Drivers && Drivers.length > 0 ? ( - Drivers.map((driver) => ( + {sortedDrivers && sortedDrivers.length > 0 ? ( + sortedDrivers.map((driver) => (
{
- - {/*
-
-
-
-

Driver's List

-
List of Registered Drivers.
-
-
-
- -
-
First Name
-
Last Name
-
License No.
-
- -
- {Drivers && Drivers.length > 0 ? ( - Drivers.map((driver) => ( -
handleDriverClick(driver)} // Show more details on click - > - -
- )) - ) : ( -

No drivers found.

- )} -
-
-
-
*/}
@@ -216,98 +233,3 @@ const DriversList = () => { }; export default DriversList; - -// import { useState } from "react"; -// import { Spinner } from "react-activity"; -// import AdminHeader from "../components/AdminHeader"; -// import DriverListCard from "../components/DriversListCard"; -// import useDrivers from "../hooks/useDrivers"; - -// const DriversList = () => { -// const { data: Drivers, loading } = useDrivers(); -// const [selectedDriver, setSelectedDriver] = useState(null); - -// // Handle driver click to show more details -// const handleDriverClick = (driver: any) => { -// setSelectedDriver(driver); -// }; - -// if (loading) -// return ( -//
-// -//
-// ); - -// return ( -//
-//
-// -//
- -// {/* Main Content */} -// {/* drivers info left side */} -//
-//
-//

-// Drivers Info -//

-// {selectedDriver ? ( -//
-//

-// Email: {selectedDriver.email} -//

-//

-// Sex: {selectedDriver.sex} -//

-//

-// License Expiration: {selectedDriver.license_expiration_date} -//

-//
-// ) : ( -//

Click a driver to see more details.

-// )} -//
- -// {/* Drivers List Section */} -//
-//

-// Drivers List -//

- -// {/* drivers list header */} -//
-//
First Name
-//
Last Name
-//
Driver Type
-//
License No.
-//
- -// {/* Scrollable Driver List */} -//
-// {Drivers && Drivers.length > 0 ? ( -// Drivers.map((driver) => ( -//
handleDriverClick(driver)} // Show more details on click -// > -// -//
-// )) -// ) : ( -//

No drivers found.

-// )} -//
-//
-//
-//
-// ); -// }; - -// export default DriversList;