diff --git a/my-app/src/views/Components/RatingComponent.jsx b/my-app/src/views/Components/RatingComponent.jsx index d543cbec..c3c093cf 100644 --- a/my-app/src/views/Components/RatingComponent.jsx +++ b/my-app/src/views/Components/RatingComponent.jsx @@ -1,17 +1,20 @@ import React from 'react'; import StarComponent from "./StarComponent.jsx"; -const RatingComponent = ({ value = 0, onChange, readOnly = false }) => { +const RatingComponent = ({ value = 0, onChange, readOnly = false, className = "" }) => { const handleRating = (starIndex, isLeftHalf) => { - if (readOnly) return; // if readOnly, do nothing + if (readOnly) return; const newRating = isLeftHalf ? starIndex + 0.5 : starIndex + 1; onChange(newRating); - } + }; return ( -
-
- {Array.from({length: 5}, (_, index) => ( +
+ {/*
*/} +
+ + + {Array.from({ length: 5 }, (_, index) => ( {
); -} +}; -export default RatingComponent; \ No newline at end of file +export default RatingComponent; diff --git a/my-app/src/views/Components/StarComponent.jsx b/my-app/src/views/Components/StarComponent.jsx index 6ee2acfa..bf4b5918 100644 --- a/my-app/src/views/Components/StarComponent.jsx +++ b/my-app/src/views/Components/StarComponent.jsx @@ -15,12 +15,12 @@ const StarComponent = ({ index, rating, onRatingChange, onHover, readOnly = fals return (
!readOnly && onHover && onHover(index + 1)} onMouseLeave={() => !readOnly && onHover && onHover(0)} > {!readOnly && ( <> @@ -38,4 +38,4 @@ const StarComponent = ({ index, rating, onRatingChange, onHover, readOnly = fals ); }; -export default StarComponent; \ No newline at end of file +export default StarComponent; diff --git a/my-app/src/views/ReviewView.jsx b/my-app/src/views/ReviewView.jsx index b8203c61..6ae5d42d 100644 --- a/my-app/src/views/ReviewView.jsx +++ b/my-app/src/views/ReviewView.jsx @@ -1,39 +1,157 @@ -import React from "react"; +import React, { useState, useRef, useEffect } from "react"; + + import RatingComponent from "../views/Components/RatingComponent.jsx"; export function ReviewView(props) { const grades = ["🅰️", "B", "C", "D", "E", "F"]; const {formData, setFormData} = props; + const [showGradeOptions, setShowGradeOptions] = useState(false); + const [showRecommendOptions, setShowRecommendOptions] = useState(false); + const gradeRef = useRef(null); + const recommendRef = useRef(null); + + + useEffect(() => { + function handleClickOutside(event) { + if (gradeRef.current && !gradeRef.current.contains(event.target)) { + setShowGradeOptions(false); + } + if (recommendRef.current && !recommendRef.current.contains(event.target)) { + setShowRecommendOptions(false); + } + } + + document.addEventListener("mousedown", handleClickOutside); + return () => { + document.removeEventListener("mousedown", handleClickOutside); + }; + }, []); + return (
-
-

- Overall rating - setFormData({ ...formData, overallRating: val })} - /> -

-
+
+ {/* Overall Rating */} +
+

Overall rating

+ setFormData({ ...formData, overallRating: val })} + /> +
+ + {/* Difficulty Rating */} +
+

Difficulty rating

+ setFormData({ ...formData, difficultyRating: val })} + /> +
+ + {/* Professor Rating */} +
+

Professor rating

+ setFormData({ ...formData, professorRating: val })} + /> +
+ + {/* Grade Section */} +
+
+

Grade:

+
+
setShowGradeOptions((prev) => !prev)} + > + {formData.grade || "Select"} +
+ {showGradeOptions && ( +
+ {grades.map((grade) => ( + + ))} +
+ )} +
+
+
+ + {/* Recommend Section */} +
+
+

Recommend?

+
+
setShowRecommendOptions((prev) => !prev)} + > + {formData.recommend === null ? "Select" : formData.recommend ? "Yes" : "No"} +
+ {showRecommendOptions && ( +
+ + +
+ )} +
+
+
+
+ -
-

- Difficulty rating - setFormData({ ...formData, difficultyRating: val })} - /> -

-
-

+ {/*

Professor Name & Rating -

+

*/}
-
+ {/*

Professor Rating setFormData({ ...formData, professorRating: val })} />

-
- -
-

Grade

-
- {grades.map((grade) => ( - - ))} -
-
+
*/} -
-

- Would you recommend this course? -

-
- - -
+ -
+
@@ -146,6 +221,8 @@ export function ReviewView(props) {

Overall Rating