Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
3bd6d94
fixed summation after long fight with git :!
LSKpr May 6, 2025
c6a79a2
sorting kinda works - some problems exist
LSKpr May 7, 2025
6ef0ac0
Merge branch 'main' of github.com:InferenceKTH/Find-My-Next-Course
LSKpr May 7, 2025
1d02b82
fixed search + filter interaction
LSKpr May 7, 2025
9e6da22
sorting is better now / Metallic Materials are the only issue
LSKpr May 7, 2025
ed3e93f
asc/desc have correct icon now
LSKpr May 7, 2025
b4a43a4
Merge branch 'main' of github.com:InferenceKTH/Find-My-Next-Course in…
LSKpr May 7, 2025
1973a40
Merge branch 'main' of github.com:InferenceKTH/Find-My-Next-Course in…
LSKpr May 7, 2025
1880408
added favicon
LSKpr May 8, 2025
2e799ef
Merge branch 'main' of github.com:InferenceKTH/Find-My-Next-Course in…
LSKpr May 8, 2025
43a430f
fixed the website name in index.html
LSKpr May 8, 2025
9e57a66
Merge branch 'main' of github.com:InferenceKTH/Find-My-Next-Course in…
LSKpr May 8, 2025
1e2ac77
Merge branch 'main' of github.com:InferenceKTH/Find-My-Next-Course in…
LSKpr May 8, 2025
7fafcfb
Merge branch 'main' of github.com:InferenceKTH/Find-My-Next-Course in…
LSKpr May 8, 2025
45b7ae2
Merge branch 'main' of github.com:InferenceKTH/Find-My-Next-Course in…
LSKpr May 8, 2025
a6fce52
Merge branch 'main' of github.com:InferenceKTH/Find-My-Next-Course in…
LSKpr May 8, 2025
e7f0385
Merge branch 'main' of github.com:InferenceKTH/Find-My-Next-Course in…
LSKpr May 8, 2025
811154c
Merge branch 'main' of github.com:InferenceKTH/Find-My-Next-Course in…
LSKpr May 8, 2025
8662574
Merge branch 'main' of github.com:InferenceKTH/Find-My-Next-Course in…
LSKpr May 8, 2025
fd86c41
ArrowLeft closes the CoursePopup
LSKpr May 8, 2025
c461366
popup variables moved to the model
LSKpr May 8, 2025
f5a14d6
popup variables moved to the model
LSKpr May 8, 2025
8358f73
Merge branch 'main' of github.com:InferenceKTH/Find-My-Next-Course in…
LSKpr May 8, 2025
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
23 changes: 20 additions & 3 deletions my-app/src/model.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export const model = {
departments : [],
locations: [],
favourites: [],
searchHistory:[],
isReady: false,
/* this is a boolean flag showing that filtering options in the UI have changed, triggering the FilterPresenter to recalculate the filteredCourses[] */
filtersChange: false,
Expand Down Expand Up @@ -45,6 +46,8 @@ export const model = {
period: [true, true, true, true],
applyPeriodFilter: true
},
isPopupOpen: false,
selectedCourse: null,

setUser(user) {
if (!this.user)
Expand Down Expand Up @@ -75,6 +78,13 @@ export const model = {
console.error("Error adding course:", error);
}
},
addHistoryItem(course_id) {
try {
this.searchHistory = [...this.searchHistory, course_id];
} catch (error) {
console.error("Error adding course code to the history:", error);
}
},
setDepartments(departments){
this.departments = departments;
},
Expand Down Expand Up @@ -241,6 +251,16 @@ export const model = {
return avgRtg;
},

setPopupOpen(isOpen) {
if (isOpen && this.selectedCourse) {
this.addHistoryItem(this.selectedCourse.code);
}
this.isPopupOpen = isOpen;
},

setSelectedCourse(course) {
this.selectedCourse = course;
},
setSidebarState(state) {
this.sidebarIsOpen = state;
},
Expand All @@ -252,7 +272,4 @@ export const model = {
toggleSidebarIsOpen() {
this.sidebarIsOpen = !this.sidebarIsOpen;
}



};
31 changes: 12 additions & 19 deletions my-app/src/presenters/ListViewPresenter.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,6 @@ const ListViewPresenter = observer(({ model }) => {
model.setScrollPosition(position);
}

const [isPopupOpen, setIsPopupOpen] = useState(false);
const [selectedCourse, setSelectedCourse] = useState(null);
const [sortBy, setSortBy] = useState('relevance');
const [sortDirection, setSortDirection] = useState('desc');
const [sortedCourses, setSortedCourses] = useState([]);
Expand Down Expand Up @@ -107,38 +105,33 @@ const ListViewPresenter = observer(({ model }) => {

const preP = <PrerequisitePresenter
model={model}
isPopupOpen={isPopupOpen}
setIsPopupOpen={setIsPopupOpen}
setSelectedCourse={setSelectedCourse}
selectedCourse={selectedCourse} />;
const reviewPresenter = <ReviewPresenter model={model} course={selectedCourse} />;
isPopupOpen={model.isPopupOpen}
setIsPopupOpen={(isOpen) => model.setPopupOpen(isOpen)}
setSelectedCourse={(course) => model.setSelectedCourse(course)}
selectedCourse={model.selectedCourse} />;
const reviewPresenter = <ReviewPresenter model={model} course={model.selectedCourse} />;

const popup = <CoursePagePopup
favouriteCourses={model.favourites}
addHistoryItem={model.addHistoryItem}
addFavourite={addFavourite}
removeFavourite={removeFavourite}
handleFavouriteClick={handleFavouriteClick}
isOpen={isPopupOpen} onClose={() => setIsPopupOpen(false)}
course={selectedCourse}
isOpen={model.isPopupOpen}
onClose={() => model.setPopupOpen(false)}
course={model.selectedCourse}
prerequisiteTree={preP}
reviewPresenter={reviewPresenter}/>




return <ListView
// courses={model.courses}
// searchResults={model.currentSearch}
// currentSearchLenght={model.currentSearch.length}

favouriteCourses={model.favourites}
addFavourite={addFavourite}
removeFavourite={removeFavourite}
handleFavouriteClick={handleFavouriteClick}

isPopupOpen={isPopupOpen}
setIsPopupOpen={setIsPopupOpen}
setSelectedCourse={setSelectedCourse}
isPopupOpen={model.isPopupOpen}
handlePopupOpen={(isOpen) => model.setPopupOpen(isOpen)}
setSelectedCourse={(course) => model.setSelectedCourse(course)}
popup={popup}

targetScroll={model.scrollPosition}
Expand Down
47 changes: 25 additions & 22 deletions my-app/src/presenters/SearchbarPresenter.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import Fuse from 'fuse.js'
import debounce from 'lodash.debounce';

const SearchbarPresenter = observer(({ model }) => {

const [searchQuery, setSearchQuery] = useState("");

const fuseOptions = {
Expand Down Expand Up @@ -62,23 +61,27 @@ const SearchbarPresenter = observer(({ model }) => {
model.setFavourite([]);
}

const [isPopupOpen, setIsPopupOpen] = useState(false);
const [selectedCourse, setSelectedCourse] = useState(null);
const preP = <PrerequisitePresenter model={model} selectedCourse={selectedCourse} />;
const reviewPresenter = <ReviewPresenter model={model} course={selectedCourse} />;

const popup = <CoursePagePopup
favouriteCourses={model.favourites}
addFavourite={addFavourite}
removeFavourite={removeFavourite}
handleFavouriteClick={handleFavouriteClick}
isOpen={isPopupOpen}
onClose={() => setIsPopupOpen(false)}
course={selectedCourse}
reviewPresenter={reviewPresenter}
prerequisiteTree={preP}
const preP = <PrerequisitePresenter
model={model}
selectedCourse={model.selectedCourse}
/>;

const reviewPresenter = <ReviewPresenter
model={model}
course={model.selectedCourse}
/>;

//Popup is displayed only in the list view now, to change the displayed course use model.setSelectedCourse(course)
// const popup = <CoursePagePopup
// favouriteCourses={model.favourites}
// addFavourite={addFavourite}
// removeFavourite={removeFavourite}
// handleFavouriteClick={handleFavouriteClick}
// isOpen={model.isPopupOpen}
// onClose={() => model.setPopupOpen(false)}
// course={model.selectedCourse}
// reviewPresenter={reviewPresenter}
// prerequisiteTree={preP}
// />;

if(model.filtersCalculated){
searchCourses(searchQuery);
Expand All @@ -92,12 +95,12 @@ const SearchbarPresenter = observer(({ model }) => {
removeAllFavourites={removeAllFavourites}
addFavourite={addFavourite}
removeFavourite={removeFavourite}
isPopupOpen={isPopupOpen}
setIsPopupOpen={setIsPopupOpen}
setSelectedCourse={setSelectedCourse}
popup={popup}
isPopupOpen={model.isPopupOpen}
setIsPopupOpen={(isOpen) => model.setPopupOpen(isOpen)}
setSelectedCourse={(course) => model.setSelectedCourse(course)}
// popup={popup}
setSearchQuery={setSearchQuery}
searchQuery={searchQuery} // Add this line
searchQuery={searchQuery}
handleFavouriteClick={handleFavouriteClick}
totalCredits={creditsSum(model.favourites)}
resetScrollPosition={resetScoll}
Expand Down
2 changes: 1 addition & 1 deletion my-app/src/views/Components/CoursePagePopup.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ function CoursePagePopup({

useEffect(() => {
const handleKeyDown = (event) => {
if (event.key === 'Escape') {
if (event.key === 'Escape' || event.key === 'ArrowLeft') {
onClose();
}
};
Expand Down
4 changes: 2 additions & 2 deletions my-app/src/views/ListView.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ function ListView(props) {
let ret_string = "";
if (periods) {
let keys = Object.keys(periods);
console.log(periods["P1"])
// console.log(periods["P1"])
for (let key of keys) {
if (periods[key]) {
ret_string += key + " | ";
Expand Down Expand Up @@ -160,7 +160,7 @@ function ListView(props) {
<div
onClick={() => {
props.setSelectedCourse(course);
props.setIsPopupOpen(true);
props.handlePopupOpen(true);
}}
key={course.code}
className="p-5 mb-3 hover:bg-blue-100 flex items-center border border-b-black border-solid w-full rounded-lg cursor-pointer"
Expand Down