Skip to content

Commit 9e68bc3

Browse files
authored
Fixed the website and Styling (#44)
* Course page merged with main * some styling changes * more styling * more styling * added fav button on the popup almost works * small fixes --------- Co-authored-by: Kacper Lisik <lisik@kth.se>
1 parent a659334 commit 9e68bc3

File tree

3 files changed

+58
-22
lines changed

3 files changed

+58
-22
lines changed

my-app/src/presenters/ListViewPresenter.jsx

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
import React from 'react';
2-
import { observer} from "mobx-react-lite";
2+
import { observer } from "mobx-react-lite";
33
import { useState } from 'react';
44
import ListView from "../views/ListView.jsx";
55
import CoursePagePopup from '../views/Components/CoursePagePopup.jsx';
66
import PrerequisitePresenter from './PrerequisitePresenter.jsx';
77

88
const ListViewPresenter = observer(({ model }) => {
9-
9+
const addFavourite = (course) => {
10+
model.addFavourite(course);
11+
}
12+
const removeFavourite = (course) => {
13+
model.removeFavourite(course);
14+
}
1015
const handleFavouriteClick = (course) => {
1116
if (model.favourites.some(fav => fav.code === course.code)) {
1217
model.removeFavourite(course);
@@ -17,15 +22,16 @@ const ListViewPresenter = observer(({ model }) => {
1722

1823
const [isPopupOpen, setIsPopupOpen] = useState(false);
1924
const [selectedCourse, setSelectedCourse] = useState(null);
20-
const preP = <PrerequisitePresenter model={model} selectedCourse={selectedCourse}/>
21-
const popup = <CoursePagePopup isOpen={isPopupOpen} onClose={() => setIsPopupOpen(false)} course={selectedCourse} handleFavouriteClick={handleFavouriteClick} prerequisiteTree={preP}/>
25+
const preP = <PrerequisitePresenter model={model} selectedCourse={selectedCourse} />
26+
27+
const popup = <CoursePagePopup
28+
favouriteCourses={model.favourites}
29+
addFavourite={addFavourite}
30+
removeFavourite={removeFavourite}
31+
isOpen={isPopupOpen} onClose={() => setIsPopupOpen(false)}
32+
course={selectedCourse}
33+
prerequisiteTree={preP} />
2234

23-
const addFavourite = (course) => {
24-
model.addFavourite(course);
25-
}
26-
const removeFavourite = (course) => {
27-
model.removeFavourite(course);
28-
}
2935

3036
return <ListView
3137
courses={model.courses}

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

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, { useEffect, useRef } from 'react'
22

3-
function CoursePagePopup({ isOpen, onClose, course, prerequisiteTree }) {
4-
3+
function CoursePagePopup({ favouriteCourses, addFavourite,
4+
removeFavourite, isOpen, onClose, course, prerequisiteTree }) {
55
const treeRef = useRef(null);
66
useEffect(() => {
77
const handleKeyDown = (event) => {
@@ -19,6 +19,15 @@ function CoursePagePopup({ isOpen, onClose, course, prerequisiteTree }) {
1919
};
2020
}, [isOpen, onClose]);
2121

22+
23+
const handleFavouriteClick = (course) => {
24+
if (favouriteCourses.some(fav => fav.code === course.code)) {
25+
removeFavourite(course);
26+
} else {
27+
addFavourite(course);
28+
}
29+
};
30+
2231
const handleTreeClick = () => {
2332
if (treeRef.current) {
2433
treeRef.current.focus(); // gives it focus
@@ -41,21 +50,23 @@ function CoursePagePopup({ isOpen, onClose, course, prerequisiteTree }) {
4150
<div>
4251
<h2 className="text-5xl font-extrabold text-[#2e2e4f] ">
4352
<span className="text-violet-700">{course.code}</span> - {course.name}
44-
<span className="ml-4 text-lg text-violet-700">({course.credits} Credits)</span>
53+
<span className="ml-4 text-lg text-violet-700 whitespace-nowrap">
54+
({course.credits} Credits)
55+
</span>
4556
</h2>
4657
<div className="my-6 h-1.5 w-full bg-violet-500"></div>
4758
</div>
4859
<div>
4960
<button
50-
className="text-yellow-500 cursor-pointer"
61+
className="text-yellow-500 bg-yellow-400 cursor-pointer"
5162
onClick={(e) => {
5263
e.stopPropagation(); // prevent popup from opening
53-
PaymentResponse.handleFavouriteClick(course.code);
64+
handleFavouriteClick(course.code);
5465
}}
5566
>
56-
{/* {model.favouriteCourses.includes(course.code)
67+
{favouriteCourses.includes(course.code)
5768
? 'Remove from Favourites'
58-
: 'Add to Favourites'} */}
69+
: 'Add to Favourites'}
5970
</button>
6071
</div>
6172

@@ -72,7 +83,6 @@ function CoursePagePopup({ isOpen, onClose, course, prerequisiteTree }) {
7283

7384
{/* Prerequisite Graph Tree Section */}
7485
<div>
75-
7686
<h3 className="text-2xl font-semibold text-[#2e2e4f] mb-0.5">
7787
Prerequisite Graph Tree
7888
</h3>
@@ -86,7 +96,6 @@ function CoursePagePopup({ isOpen, onClose, course, prerequisiteTree }) {
8696
{prerequisiteTree}
8797
</div>
8898

89-
9099
</div>
91100
{/* Reviews Section */}
92101
<div>

my-app/src/views/ListView.jsx

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,25 @@ function ListView(props) {
1212
));
1313
};
1414

15+
const handleFavouriteClick = (course) => {
16+
if (props.favouriteCourses.some(fav => fav.code === course.code)) {
17+
props.removeFavourite(course);
18+
} else {
19+
props.addFavourite(course);
20+
}
21+
};
22+
23+
1524
return (
1625
<div className="relative bg-white text-black p-2 flex flex-col gap-5 h-full overflow-auto">
1726
{coursesToDisplay.length > 0 ? (
1827
coursesToDisplay.map((course) => (
1928
<div
29+
onClick={() => {
30+
console.log('Clicked:', course); // check browser console
31+
props.setSelectedCourse(course);
32+
props.setIsPopupOpen(true);
33+
}}
2034
key={course.code}
2135
className="p-5 hover:bg-blue-100 flex items-center border border-b-black border-solid w-full rounded-lg cursor-pointer"
2236
>
@@ -34,7 +48,10 @@ function ListView(props) {
3448
{course.description.length > 150 && (
3549
<span
3650
className="text-blue-500 cursor-pointer"
37-
onClick={() => toggleReadMore(course.code)}
51+
onClick={(e) => {
52+
e.stopPropagation(); // Prevent the event from bubbling up.
53+
toggleReadMore(course.code);
54+
}}
3855
>
3956
{readMoreState[course.code]
4057
?
@@ -46,7 +63,10 @@ function ListView(props) {
4663
<div>
4764
<button
4865
className="text-yellow-500 cursor-pointer"
49-
onClick={() => props.handleFavouriteClick(course)}
66+
onClick={(e) => {
67+
e.stopPropagation(); // Prevent the event from bubbling up.
68+
handleFavouriteClick(course);
69+
}}
5070
>
5171
{props.favouriteCourses.some(fav => fav.code === course.code)
5272
?
@@ -66,8 +86,9 @@ function ListView(props) {
6686
color="#000061"
6787
/>
6888
)}
89+
{props.popUp}
6990
</div>
7091
);
7192
}
7293

73-
export default ListView;
94+
export default ListView;

0 commit comments

Comments
 (0)