radgrad/radgrad2

View on GitHub
app/imports/ui/components/shared/moderation/ModerationReview.tsx

Summary

Maintainability
A
0 mins
Test Coverage
import React, { useState } from 'react';
import { Segment, Container, Form, Button, Rating } from 'semantic-ui-react';
import { ReviewTypes } from '../../../../api/review/ReviewTypes';
import RadGradAlert from '../../../utilities/RadGradAlert';
import { Courses } from '../../../../api/course/CourseCollection';
import { Opportunities } from '../../../../api/opportunity/OpportunityCollection';
import { AcademicTerms } from '../../../../api/academic-term/AcademicTermCollection';
import { Users } from '../../../../api/user/UserCollection';
import { updateMethod } from '../../../../api/base/BaseCollection.methods';
import { Review } from '../../../../typings/radgrad';

interface ModerationReviewProps {
  item: Review;
  handleReview: (item, comment, approved) => any;
}

const ModerationReview: React.FC<ModerationReviewProps> = ({ item, handleReview }) => {
  const [moderatorCommentState, setModeratorComment] = useState('');

  const getReviewee = () => {
    let reviewee;
    if (item.reviewType === ReviewTypes.COURSE) {
      reviewee = Courses.findDoc(item.revieweeID);
    } else {
      reviewee = Opportunities.findDoc(item.revieweeID);
    }
    return reviewee;
  };

  const handleClick = (approved) => {
    const update = handleReview(item, moderatorCommentState, approved);
    setModeratorComment('');
    updateMethod.callPromise({ collectionName: update.collectionName, updateData: update.updateInfo })
      .catch((error) => { RadGradAlert.failure('Update Failed', error.message, error);})
      .then(() => { RadGradAlert.success('Update Succeeded');});
  };

  const handleChange = (event, { value }) => {
    setModeratorComment(value);
  };

  // if findNonRetired and do not supply a selector, it will try do a find on that string
  const student = Users.getFullName(item.studentID);
  const reviewee = getReviewee().name;
  const termDoc = AcademicTerms.findDoc(item.termID);

  return (
    <Container textAlign="left">
      <strong>Student: </strong>
      {student}
      <br />
      <strong>Reviewee: </strong>
      {reviewee}
      <br />
      <strong>Semester: </strong> {`${termDoc.term}  ${termDoc.year}`} <br />
      <strong>Rating: </strong>
      <Rating size="small" icon="star" rating={item.rating} maxRating="5" disabled />
      <br />
      <strong>Comments: </strong>
      {item.comments}
      <br />
      <Segment>
        <Form>
          <Form.TextArea label="Moderator Comments" onChange={handleChange} value={moderatorCommentState} />
          <Button className="ui basic green mini button" onClick={() => handleClick(true)}>
            ACCEPT
          </Button>
          <Button className="ui basic red mini button" onClick={() => handleClick(false)}>
            REJECT
          </Button>
        </Form>
      </Segment>
    </Container>
  );
};

export default ModerationReview;