diff --git a/my-app/src/presenters/ListViewPresenter.jsx b/my-app/src/presenters/ListViewPresenter.jsx index 7a91ce72..b3491d14 100644 --- a/my-app/src/presenters/ListViewPresenter.jsx +++ b/my-app/src/presenters/ListViewPresenter.jsx @@ -1,12 +1,17 @@ import React from 'react'; -import { observer} from "mobx-react-lite"; +import { observer } from "mobx-react-lite"; import { useState } from 'react'; import ListView from "../views/ListView.jsx"; import CoursePagePopup from '../views/Components/CoursePagePopup.jsx'; import PrerequisitePresenter from './PrerequisitePresenter.jsx'; const ListViewPresenter = observer(({ model }) => { - + const addFavourite = (course) => { + model.addFavourite(course); + } + const removeFavourite = (course) => { + model.removeFavourite(course); + } const handleFavouriteClick = (course) => { if (model.favourites.some(fav => fav.code === course.code)) { model.removeFavourite(course); @@ -17,15 +22,16 @@ const ListViewPresenter = observer(({ model }) => { const [isPopupOpen, setIsPopupOpen] = useState(false); const [selectedCourse, setSelectedCourse] = useState(null); - const preP = - const popup = setIsPopupOpen(false)} course={selectedCourse} handleFavouriteClick={handleFavouriteClick} prerequisiteTree={preP}/> + const preP = + + const popup = setIsPopupOpen(false)} + course={selectedCourse} + prerequisiteTree={preP} /> - const addFavourite = (course) => { - model.addFavourite(course); - } - const removeFavourite = (course) => { - model.removeFavourite(course); - } return { const handleKeyDown = (event) => { @@ -19,6 +19,15 @@ function CoursePagePopup({ isOpen, onClose, course, prerequisiteTree }) { }; }, [isOpen, onClose]); + + const handleFavouriteClick = (course) => { + if (favouriteCourses.some(fav => fav.code === course.code)) { + removeFavourite(course); + } else { + addFavourite(course); + } +}; + const handleTreeClick = () => { if (treeRef.current) { treeRef.current.focus(); // gives it focus @@ -41,21 +50,23 @@ function CoursePagePopup({ isOpen, onClose, course, prerequisiteTree }) {

{course.code} - {course.name} - ({course.credits} Credits) + + ({course.credits} Credits) +

@@ -72,7 +83,6 @@ function CoursePagePopup({ isOpen, onClose, course, prerequisiteTree }) { {/* Prerequisite Graph Tree Section */}
-

Prerequisite Graph Tree

@@ -86,7 +96,6 @@ function CoursePagePopup({ isOpen, onClose, course, prerequisiteTree }) { {prerequisiteTree}
- {/* Reviews Section */}
diff --git a/my-app/src/views/ListView.jsx b/my-app/src/views/ListView.jsx index f8444c08..de90c051 100644 --- a/my-app/src/views/ListView.jsx +++ b/my-app/src/views/ListView.jsx @@ -12,11 +12,25 @@ function ListView(props) { )); }; + const handleFavouriteClick = (course) => { + if (props.favouriteCourses.some(fav => fav.code === course.code)) { + props.removeFavourite(course); + } else { + props.addFavourite(course); + } + }; + + return (
{coursesToDisplay.length > 0 ? ( coursesToDisplay.map((course) => (
{ + console.log('Clicked:', course); // check browser console + props.setSelectedCourse(course); + props.setIsPopupOpen(true); + }} key={course.code} className="p-5 hover:bg-blue-100 flex items-center border border-b-black border-solid w-full rounded-lg cursor-pointer" > @@ -34,7 +48,10 @@ function ListView(props) { {course.description.length > 150 && ( toggleReadMore(course.code)} + onClick={(e) => { + e.stopPropagation(); // Prevent the event from bubbling up. + toggleReadMore(course.code); + }} > {readMoreState[course.code] ? @@ -46,7 +63,10 @@ function ListView(props) {
); } -export default ListView; \ No newline at end of file +export default ListView;