From b2dda324fefc4f93e03ef40dfda0526c8ce35445 Mon Sep 17 00:00:00 2001 From: Jayden Pyles Date: Sun, 7 Jul 2024 20:54:28 -0500 Subject: [PATCH] feat: add search to job table --- src/components/JobTable.tsx | 110 +++++++++++++++++++++++++----------- 1 file changed, 77 insertions(+), 33 deletions(-) diff --git a/src/components/JobTable.tsx b/src/components/JobTable.tsx index 4bb4d75..d8c9d5a 100644 --- a/src/components/JobTable.tsx +++ b/src/components/JobTable.tsx @@ -14,6 +14,12 @@ import { Checkbox, Tooltip, Button, + TextField, + FormControl, + InputLabel, + Select, + MenuItem, + SelectChangeEvent, } from "@mui/material"; import DeleteIcon from "@mui/icons-material/Delete"; import SelectAllIcon from "@mui/icons-material/SelectAll"; @@ -37,6 +43,9 @@ interface JobTableProps { const JobTable: React.FC = ({ jobs, fetchJobs }) => { const [selectedJobs, setSelectedJobs] = useState>(new Set()); const [allSelected, setAllSelected] = useState(false); + const [searchQuery, setSearchQuery] = useState(""); + const [searchMode, setSearchMode] = useState("url"); + const router = useRouter(); const handleDownload = async (ids: string[]) => { @@ -106,6 +115,15 @@ const JobTable: React.FC = ({ jobs, fetchJobs }) => { } }; + const filteredJobs = jobs.filter((job) => { + if (searchMode === "url") { + return job.url.toLowerCase().includes(searchQuery.toLowerCase()); + } else if (searchMode === "id") { + return job.id.toLowerCase().includes(searchQuery.toLowerCase()); + } + return true; + }); + return ( = ({ jobs, fetchJobs }) => { overflow="auto" > - - Scrape Jobs - - - - - - - - - - - + + Scrape Jobs + + + + + + + + + + + + + + + + + + handleDownload(Array.from(selectedJobs))} + disabled={selectedJobs.size === 0} + > + + + + + +
+ setSearchQuery(e.target.value)} + className="w-3/4" + /> + + Search Mode + + +
@@ -172,7 +216,7 @@ const JobTable: React.FC = ({ jobs, fetchJobs }) => { - {jobs.map((row, index) => ( + {filteredJobs.map((row, index) => (