Skip to content

Commit 58d4925

Browse files
kexanab2stickman
andauthored
Filtering courses (#63)
* slider * model filter setup * slider * model filter setup * model changes and setup * initial set-up, and basic filtering functions for FilterPresenter * filter changes passing * slider * model filter setup * slider * model filter setup * model changes and setup * initial set-up, and basic filtering functions for FilterPresenter * filter changes passing * filter pass to model * small things, slightly touched search, slightly fixed filter presenter, added the file for eligibility from elias * somewhat working filters (still search works on all courses, it will be incoming), working filters are the following: credits, academiclevel, language * collapsible department menu * fixed null pointer references, a lot of added try_catches, a lot of course?. property checks for undefined * department filter visals * eligibility values set to model * pre-merging with deo, semi-working eligibility checker function, about to connect with ui * some changes, but still broken on eligibility infinite recursive function * department menu work * fixed infinite loop, by adding edgecase for if course?.prerequisites is undefined, it works * beautius department filter * some filters working --------- Co-authored-by: b2stickman <b2stickman@gmail.com>
1 parent 0cd45e5 commit 58d4925

17 files changed

+1185
-188
lines changed

my-app/src/model.js

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,28 @@ import { addCourse, addReviewForCourse, getReviewsForCourse } from "../firebase"
33

44
export const model = {
55
user: undefined,
6+
//add searchChange: false, //this is for reworking the searchbar presenter, so that it triggers as a model,
7+
//instead of passing searchcouses lambda function down into the searchbarview.
68
currentSearch: [],
79
courses: [],
810
favourites: [],
11+
isReady: false,
12+
filtersChange: false,
13+
filteredCourses: [],
14+
filterOptions: {
15+
applyTranscriptFilter: true,
16+
eligibility: "weak", //the possible values for the string are: "weak"/"moderate"/"strong"
17+
applyLevelFilter: true,
18+
level: [], //the possible values for the array are: "PREPARATORY", "BASIC", "ADVANCED", "RESEARCH"
19+
applyLanguageFilter: true,
20+
language: "none", //the possible values for the string are: "none"/"english"/"swedish"/"both"
21+
applyLocationFilter:true,
22+
location: [], //the possible values for the array are: 'KTH Campus', 'KTH Kista', 'AlbaNova', 'KTH Flemingsberg', 'KTH Solna', 'KTH Södertälje', 'Handelshögskolan', 'KI Solna', 'Stockholms universitet', 'KONSTFACK'
23+
applyCreditsFilter:true,
24+
creditMin: 0,
25+
creditMax: 45,
26+
//applyDepartmentFilter:false,
27+
},
928

1029
setUser(user) {
1130
if (!this.user)
@@ -66,7 +85,6 @@ export const model = {
6685
this.addCourse(course);
6786
});
6887
},
69-
7088
//for reviews
7189
async addReview(courseCode, review) {
7290
try {
@@ -85,4 +103,49 @@ export const model = {
85103
return [];
86104
}
87105
},
106+
//for filters
107+
108+
setFiltersChange() {
109+
this.filtersChange = true;
110+
},
111+
112+
updateLevelFilter(level) {
113+
this.filterOptions.level = level;
114+
},
115+
updateLanguageFilter(languages) {
116+
this.filterOptions.language = languages;
117+
},
118+
updateLocationFilter(location) {
119+
this.filterOptions.location = location;
120+
},
121+
updateCreditsFilter(creditLimits) {
122+
this.filterOptions.creditMin = creditLimits[0];
123+
this.filterOptions.creditMax = creditLimits[1];
124+
},
125+
updateTranscriptElegibilityFilter(eligibility) {
126+
this.filterOptions.eligibility = eligibility;
127+
},
128+
129+
//setters for the filter options
130+
setApplyTranscriptFilter(transcriptFilterState) {
131+
this.filterOptions.applyTranscriptFilter = transcriptFilterState;
132+
},
133+
setApplyLevelFilter(levelFilterState) {
134+
this.filterOptions.applyLevelFilter = levelFilterState;
135+
},
136+
setApplyLanguageFilter(languageFilterState) {
137+
this.filterOptions.applyLanguageFilter = languageFilterState;
138+
},
139+
setApplyLocationFilter(locationFilterState) {
140+
this.filterOptions.applyLocationFilter = locationFilterState;
141+
},
142+
setApplyCreditsFilter(creditsFilterState) {
143+
this.filterOptions.applyCreditsFilter = creditsFilterState;
144+
},
145+
// setApplyDepartmentFilter(departmentFilterState) {
146+
// this.filterOptions.applyDepartmentFilter = departmentFilterState;
147+
// },
148+
149+
150+
88151
};

my-app/src/pages/App.jsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@ import React from 'react';
22
import { SidebarPresenter } from '../presenters/SidebarPresenter.jsx';
33
import { SearchbarPresenter } from '../presenters/SearchbarPresenter.jsx';
44
import { ListViewPresenter } from '../presenters/ListViewPresenter.jsx';
5+
import { FilterPresenter } from "../presenters/FilterPresenter.jsx";
56
import { Routes, Route } from 'react-router-dom';
67
import SharedView from '../pages/SharedView.jsx';
78
import { model } from '/src/model.js';
89

910
function MainAppLayout({ model }) {
1011
return (
11-
<div className="flex h-screen w-screen overflow-hidden">
12-
<div className="w-1/4 h-full bg-gradient-to-t from-[#4f3646] to-[#6747c0]">
12+
<div className="flex h-screen w-screen">
13+
<FilterPresenter model={model} />
14+
<div className="flex-auto w-40% h-full bg-gradient-to-t from-[#4f3646] to-[#6747c0]">
1315
<SidebarPresenter model={model} />
1416
</div>
1517
<div className="w-3/4 h-full flex flex-col">

0 commit comments

Comments
 (0)