Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 43 additions & 10 deletions src/components/functions/termPageFilters.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,21 @@
import { TermInfo } from "./termInfoFunctions";

const filterByLevel = (termInfoList, level) => {
return termInfoList.filter(termInfo => termInfo.courseNumber.replace(/[^0-9]/g, '') >= level && termInfo.courseNumber.replace(/[^0-9]/g, '') < level+100);
}

/**
* Function to filter a list of TermInfo objects according to it's level (100 level, 200 level, etc.)
* @param {TermInfo[]} termInfoList List of TermInfo objects to filter
* @param {number} level Course level to filter (100 level, 200 level, etc.)
* @param {number[]} levelList List of course levels to filter (100 level, 200 level, etc.). Pass in an empty list to not filter any courses
* @returns {TermInfo[]} List of filtered TermInfo objects
*/
const filterByLevel = (termInfoList, level) => {
return termInfoList.filter(termInfo => termInfo.courseNumber >= level && termInfo.courseNumber < level+100);
const filterByLevels = (termInfoList, levelList) => {
if (levelList.length == 0) {
return termInfoList;
} else {
return levelList.map(level => filterByLevel(termInfoList, level)).reduce((accum, currVal) => accum.concat(currVal), []);
}
}

/**
Expand All @@ -21,26 +29,49 @@ const filterByInstructor = (termInfoList, instructor) => {
return termInfoList.filter(termInfo => termInfo.instructor.toLowerCase().includes(instructor.toLowerCase()));
}

const filterByCampus = (termInfoList, campus) => {
if (campus.toLowerCase() == "online") {
return termInfoList.filter(termInfo => termInfo.courseSection.toLowerCase().includes("ol"));
} else if (campus.toLowerCase() == "other") {
return termInfoList.filter(termInfo => termInfo.campus.toLowerCase() != "burnaby" && termInfo.campus.toLowerCase() != "surrey" && termInfo.courseSection.toLowerCase().indexOf("ol") === -1);
} else {
return termInfoList.filter(termInfo => termInfo.campus.toLowerCase() == campus.toLowerCase());
}
}

/**
* Function to filter a list of TermInfo objects according to it's campus
* @param {TermInfo[]} termInfoList List of TermInfo objects to filter
* @param {String} campus Campus location to filter (eg: "Burnaby")
* @param {String[]} campusList List of campus locations to filter (eg: "Burnaby"). Pass in an empty list to not filter any courses
* @returns {TermInfo[]} List of filtered TermInfo objects
*/
const filterByCampus = (termInfoList, campus) => {
return termInfoList.filter(termInfo => termInfo.campus.toLowerCase() == campus.toLowerCase());
const filterByCampuses = (termInfoList, campusList) => {
if (campusList.length == 0) {
return termInfoList;
}
else {
return campusList.map(campus => filterByCampus(termInfoList, campus)).reduce((accum, currVal) => accum.concat(currVal), []);
}
}

const filterByWqb = (termInfoList, wqb) => {
return termInfoList.filter(termInfo => termInfo.wqb.toLowerCase().includes(wqb.toLowerCase().replace(/b-/g, "")));
}

/**
* Function to filter a list of TermInfo objects according to it's WQB designation
* Note: Function assumes only one designation as input (eg: "B-Sci" will work but "Q/W/B-Sci" might not work)
* In the term page, filter wqbs one by one
* @param {TermInfo[]} termInfoList List of TermInfo objects to filter
* @param {String} wqb WQB designation to filter
* @param {String[]} wqbList List of WQB designations to filter. Pass in an empty list to not filter any courses
* @returns {TermInfo[]} List of filtered TermInfo objects
*/
const filterByWqb = (termInfoList, wqb) => {
return termInfoList.filter(termInfo => termInfo.wqb.toLowerCase().includes(wqb.toLowerCase().replace(/b-/g, "")));
const filterByWqbs = (termInfoList, wqbList) => {
if (wqbList.length == 0) {
return termInfoList;
} else {
return [... new Set(wqbList.map(wqb => filterByWqb(termInfoList, wqb)).reduce((accum, currVal) => accum.concat(currVal), []))]; // Set notation removes duplicates
}
}

/**
Expand All @@ -51,4 +82,6 @@ const filterByWqb = (termInfoList, wqb) => {
*/
const filterByCredits = (termInfoList, credits) => {
return termInfoList.filter(termInfo => termInfo.credits == credits);
}
}

export {filterByLevels, filterByCampuses, filterByWqbs, filterByInstructor, filterByCredits};