@@ -7,8 +7,8 @@ import { ReviewView } from '../views/ReviewView.jsx';
77 */
88export const ReviewPresenter = observer ( ( { model, course } ) => {
99 const [ reviews , setReviews ] = useState ( [ ] ) ;
10- const [ postAnonymous , setAnonymous ] = useState ( false ) ;
1110 const [ errorMessage , setErrorMessage ] = useState ( "" ) ;
11+ const [ anonState , setAnonState ] = useState ( false ) ;
1212 const [ formData , setFormData ] = useState ( {
1313 text : "" ,
1414 overallRating : 0 ,
@@ -20,7 +20,7 @@ export const ReviewPresenter = observer(({ model, course }) => {
2020 avgRating : 0 ,
2121 } ) ;
2222
23- // fetch reviews when the current course code or model updates.
23+ // Fetch reviews when the current course code or model updates
2424 useEffect ( ( ) => {
2525 async function fetchReviews ( ) {
2626 const data = await model . getReviews ( course . code ) ;
@@ -29,25 +29,25 @@ export const ReviewPresenter = observer(({ model, course }) => {
2929 fetchReviews ( ) ;
3030 } , [ course . code , model ] ) ;
3131
32- /**
33- * Set an error message if the user is not logged in or posted already.
34- */
32+ const hasPreviousReview = ! ! model ?. user ?. uid && reviews . some ( r => r . uid === model . user . uid ) ;
33+
34+ // Set error message based on login state or review existence
3535 useEffect ( ( ) => {
36- async function updateError ( ) {
37- if ( ! model ?. user ?. uid )
38- setErrorMessage ( "You need to be logged in to post a comment - Posting anonymously is possible." ) ;
39- else if ( reviews . filter ( ( review ) => { return review . uid == model ?. user ?. uid } ) . length > 0 )
40- setErrorMessage ( "Everyone can only post once. Submitting a new comment will replace the old one." ) ;
36+ if ( ! model ?. user ?. uid ) {
37+ setErrorMessage ( "You need to be logged in to post a review - Posting anonymously is possible." ) ;
38+ } else if ( hasPreviousReview ) {
39+ setErrorMessage ( "Everyone can only post once. Submitting a new review will replace the old one." ) ;
40+ } else {
41+ setErrorMessage ( "" ) ;
4142 }
42- updateError ( ) ;
43- } , [ reviews , model ?. user ?. uid ] ) ;
43+ } , [ reviews , model ?. user ?. uid , hasPreviousReview ] ) ;
4444
4545 /**
46- * Handle the submssion of a review and set errors if needed.
47- * @returns void
46+ * Handle the submission of a review and set errors if needed.
47+ * @param { boolean } anon - whether to post anonymously
4848 */
49- const handleReviewSubmit = async ( ) => {
50- if ( ! model ?. user ) {
49+ const handleReviewSubmit = async ( anon ) => {
50+ if ( ! model ?. user ) {
5151 setErrorMessage ( "You need to be logged in to post a comment - Posting anonymously is possible." ) ;
5252 return ;
5353 }
@@ -57,32 +57,34 @@ export const ReviewPresenter = observer(({ model, course }) => {
5757 return ;
5858 }
5959
60- // create the post object - look into firebase rules if you want to change this.
6160 const review = {
62- userName : postAnonymous ? "Anonymous" : model . user ?. displayName ,
61+ userName : anon ? "Anonymous" : model . user ?. displayName ,
6362 uid : model ?. user ?. uid ,
6463 timestamp : Date . now ( ) ,
6564 ...formData ,
6665 } ;
67-
68- if ( ! await model . addReview ( course . code , review ) ) {
69- setErrorMessage ( "Something went wrong when posting. Are you logged in?" )
66+
67+ const success = await model . addReview ( course . code , review ) ;
68+ if ( ! success ) {
69+ setErrorMessage ( "Something went wrong when posting. Are you logged in?" ) ;
7070 return ;
7171 }
72- // refetch after submission
72+
7373 const updatedReviews = await model . getReviews ( course . code ) ;
7474 setReviews ( updatedReviews ) ;
75+
7576 setFormData ( {
7677 text : "" ,
7778 overallRating : 0 ,
7879 difficultyRating : 0 ,
7980 professorName : "" ,
81+ professorRating : 0 ,
8082 grade : "" ,
81- recommended : false ,
83+ recommend : null ,
84+ avgRating : 0 ,
8285 } ) ;
8386 } ;
8487
85-
8688 return (
8789 < ReviewView
8890 course = { course }
@@ -92,9 +94,9 @@ export const ReviewPresenter = observer(({ model, course }) => {
9294 handleReviewSubmit = { handleReviewSubmit }
9395 errorMessage = { errorMessage }
9496 setErrorMessage = { setErrorMessage }
95- postAnonymous = { postAnonymous }
96- setAnonymous = { setAnonymous }
97+ hasPreviousReview = { hasPreviousReview }
98+ anonState = { anonState }
99+ setAnonState = { setAnonState }
97100 />
98-
99101 ) ;
100102} ) ;
0 commit comments