From d30f226f4503d92e38affb001916fc7b4d98bb77 Mon Sep 17 00:00:00 2001 From: Chris Lawson Date: Mon, 30 Sep 2024 21:12:27 -0700 Subject: [PATCH] feat: filter professors by course prefix --- packages/frontend/src/components/Filters.tsx | 48 ++++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/packages/frontend/src/components/Filters.tsx b/packages/frontend/src/components/Filters.tsx index efa533a..e669fc2 100644 --- a/packages/frontend/src/components/Filters.tsx +++ b/packages/frontend/src/components/Filters.tsx @@ -28,7 +28,7 @@ export interface FilterHandle { } export interface FilterState { - departmentFilters: { name: string; state: boolean }[]; + coursePrefixFilters: { name: string; state: boolean }[]; avgRatingFilter: [number, number]; studentDifficultyFilter: [number, number]; materialClearFilter: [number, number]; @@ -49,12 +49,12 @@ export function Filters({ unfilteredProfessors, onUpdate, className }: FilterPro const location = useLocation(); const previousState = location.state as FilterState | undefined; // Component State - const [departmentFilters, setDepartmentFilters] = useLocationState< + const [coursePrefixFilters, setCoursePrefixFilters] = useLocationState< { name: string; state: boolean }[] >( - previousState?.departmentFilters ?? - DEPARTMENT_LIST.map((department) => ({ name: department, state: false })), - "departmentFilters", + previousState?.coursePrefixFilters ?? + DEPARTMENT_LIST.map((coursePrefix) => ({ name: coursePrefix, state: false })), + "coursePrefixFilters", ); const [avgRatingFilter, setAvgRatingFilter] = useLocationState<[number, number]>( previousState?.avgRatingFilter ?? [0, 4], @@ -141,23 +141,23 @@ export function Filters({ unfilteredProfessors, onUpdate, className }: FilterPro filteredResult.reverse(); } - const selectedDepartments = departmentFilters.filter( - (departmentFilter) => departmentFilter.state, + const selectedCoursePrefixs = coursePrefixFilters.filter( + (coursePrefixFilter) => coursePrefixFilter.state, ); - if (selectedDepartments.length) { - const departmentSet = new Set( - selectedDepartments.map((departmentFilter) => departmentFilter.name), + if (selectedCoursePrefixs.length) { + const coursePrefixSet = new Set( + selectedCoursePrefixs.map((coursePrefixFilter) => coursePrefixFilter.name), ); - const postDepartmentFilter = filteredResult.filter((professor) => - departmentSet.has(professor.department), + const postCoursePrefixFilter = filteredResult.filter((professor) => + professor.courses.some((course) => coursePrefixSet.has(course)), ); - onUpdate(postDepartmentFilter); + onUpdate(postCoursePrefixFilter); } else { onUpdate(filteredResult); } }, [ - departmentFilters, + coursePrefixFilters, avgRatingFilter, studentDifficultyFilter, materialClearFilter, @@ -200,23 +200,23 @@ export function Filters({ unfilteredProfessors, onUpdate, className }: FilterPro

Filters:

-

Department:

+

CoursePrefix:

{ - const updatedDepartmentFilters = [...departmentFilters]; - updatedDepartmentFilters[i].state = e.target.checked; - setDepartmentFilters(updatedDepartmentFilters); + const updatedCoursePrefixFilters = [...coursePrefixFilters]; + updatedCoursePrefixFilters[i].state = e.target.checked; + setCoursePrefixFilters(updatedCoursePrefixFilters); }} /> {name}