Skip to content

Commit 11c2825

Browse files
committed
clicking fav item opens a popup
1 parent 2e5ddfe commit 11c2825

6 files changed

Lines changed: 83 additions & 26 deletions

File tree

my-app/src/presenters/ListViewPresenter.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ const ListViewPresenter = observer(({ model }) => {
4343
isPopupOpen={isPopupOpen}
4444
setIsPopupOpen={setIsPopupOpen}
4545
setSelectedCourse={setSelectedCourse}
46-
popUp={popup}
46+
popup={popup}
4747
handleFavouriteClick={handleFavouriteClick}
4848

4949
/>;

my-app/src/presenters/SearchbarPresenter.jsx

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import React from 'react';
22
import { observer } from "mobx-react-lite";
3+
import { useState } from 'react';
4+
import CoursePagePopup from '../views/Components/CoursePagePopup.jsx';
5+
import PrerequisitePresenter from './PrerequisitePresenter.jsx';
36
import SearchbarView from "../views/SearchbarView.jsx";
47

58
const SearchbarPresenter = observer(({ model }) => {
@@ -12,21 +15,54 @@ const SearchbarPresenter = observer(({ model }) => {
1215
model.setCurrentSearch(searchResults);
1316
}
1417

18+
const addFavourite = (course) => {
19+
model.addFavourite(course);
20+
}
1521
const removeFavourite = (course) => {
1622
model.removeFavourite(course);
1723
}
24+
const handleFavouriteClick = (course) => {
25+
if (model.favourites.some(fav => fav.code === course.code)) {
26+
model.removeFavourite(course);
27+
} else {
28+
model.addFavourite(course);
29+
}
30+
};
31+
1832

19-
function removeAllFavourites(){
33+
function removeAllFavourites() {
2034
model.setFavourite([]);
2135
}
2236

37+
const [isPopupOpen, setIsPopupOpen] = useState(false);
38+
const [selectedCourse, setSelectedCourse] = useState(null);
39+
const preP = <PrerequisitePresenter model={model} selectedCourse={selectedCourse} />
40+
41+
const popup = <CoursePagePopup
42+
favouriteCourses={model.favourites}
43+
addFavourite={addFavourite}
44+
removeFavourite={removeFavourite}
45+
handleFavouriteClick={handleFavouriteClick}
46+
isOpen={isPopupOpen} onClose={() => setIsPopupOpen(false)}
47+
course={selectedCourse}
48+
prerequisiteTree={preP} />
49+
50+
51+
52+
2353
return (
2454
<SearchbarView
2555
model={model}
2656
searchCourses={searchCourses}
27-
favouriteCourses = {model.favourites}
28-
removeFavourite={removeFavourite}
57+
favouriteCourses={model.favourites}
2958
removeAllFavourites={removeAllFavourites}
59+
addFavourite={addFavourite}
60+
removeFavourite={removeFavourite}
61+
isPopupOpen={isPopupOpen}
62+
setIsPopupOpen={setIsPopupOpen}
63+
setSelectedCourse={setSelectedCourse}
64+
popup={popup}
65+
handleFavouriteClick={handleFavouriteClick}
3066
/>
3167
);
3268
});

my-app/src/views/Components/CoursePagePopup.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ function CoursePagePopup({
8080
className="text-lg leading-8 text-[#2e2e4f] font-semibold tracking-wide prose prose-slate max-w-full"
8181
dangerouslySetInnerHTML={{ __html: course.description }}
8282
/>
83-
</div>
83+
</div>
8484

8585
{/* Prerequisite Graph Tree Section */}
8686
<div>

my-app/src/views/Components/FavouriteDropdown.jsx

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,47 @@
11
import React from 'react';
22

33
function FavouritesDropdown(props) {
4+
console.log('Popup:', props.popup);
5+
console.log('isPopupOpen:', props.isPopupOpen);
46
return (
57
<div className="absolute mt-2 w-48 bg-white border border-solid border-black rounded-lg z-50 overflow-y-auto">
68
{props.favouriteCourses.length > 0 ? (
7-
8-
props.favouriteCourses.map(course => (
9-
<div
10-
key={course.code}
11-
className="p-2 flex justify-between items-center w-full border border-solid border-black">
12-
<p
13-
className="text-black">
14-
{course.name}
15-
</p>
16-
<button
17-
className="text-red-500 cursor-pointer"
18-
onClick={() => props.removeFavourite(course)}>
19-
X
20-
</button>
21-
</div>
22-
))
23-
24-
25-
) : (
9+
props.favouriteCourses.map(course => (
10+
<div
11+
onClick={() => {
12+
console.log('Clicked:', course); // check browser console
13+
props.setSelectedCourse(course);
14+
props.setIsPopupOpen(true); // Ensure popup state is updated
15+
}}
16+
key={course.code}
17+
className="p-2 flex justify-between items-center w-full border border-solid border-black">
18+
<p className="text-black">{course.name}</p>
19+
<button
20+
className="text-red-500 cursor-pointer"
21+
onClick={(e) => {
22+
e.stopPropagation(); // Prevent parent click
23+
props.removeFavourite(course);
24+
}}>
25+
X
26+
</button>
27+
</div>
28+
))
29+
) : (
2630
<div className="p-2 text-[#000061]">
2731
No favourites
2832
</div>
2933
)}
30-
{props.favouriteCourses.length > 0 ? <button onClick={props.removeAllFavourites}>Clear Favourites</button> : ""}
34+
{/* Ensure popup is conditionally rendered */}
35+
<div style={{ position: 'relative', zIndex: 1000 }}>
36+
{props.isPopupOpen && props.popup}
37+
</div>
38+
{props.favouriteCourses.length > 0 && (
39+
<button
40+
onClick={props.removeAllFavourites}
41+
className="mt-2 text-red-500">
42+
Clear Favourites
43+
</button>
44+
)}
3145
</div>
3246
);
3347
}

my-app/src/views/ListView.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ function ListView(props) {
8686
color="#000061"
8787
/>
8888
)}
89-
{props.popUp}
89+
{props.popup}
9090
</div>
9191
);
9292
}

my-app/src/views/SearchbarView.jsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,13 @@ function SearchbarView(props) {
7272
favouriteCourses={props.favouriteCourses}
7373
removeFavourite={props.removeFavourite}
7474
removeAllFavourites={props.removeAllFavourites}
75+
popup={props.popup}
76+
addFavourite={props.addFavourite}
77+
isPopupOpen={props.isPopupOpen}
78+
setIsPopupOpen={props.setIsPopupOpen}
79+
setSelectedCourse={props.setSelectedCourse}
80+
81+
handleFavouriteClick={props.handleFavouriteClick}
7582
/>
7683
)}
7784
</div>

0 commit comments

Comments
 (0)