All files / components/BasicCourseSearch CourseOverTimeInstructorSearchForm.js

100% Statements 23/23
100% Branches 12/12
100% Functions 4/4
100% Lines 23/23

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115            2x 48x           48x 48x   48x   48x       48x     48x       48x   48x         48x   48x 48x   48x 3x 3x     48x 24x     48x 4x 4x           48x   48x                                                                                                            
import { useState } from "react";
import { Form, Button, Container, Row, Col, FormCheck } from "react-bootstrap";
import { quarterRange } from "main/utils/quarterUtilities";
import { useSystemInfo } from "main/utils/systemInfo";
import SingleQuarterDropdown from "../Quarters/SingleQuarterDropdown";
 
const CourseOverTimeInstructorSearchForm = ({ fetchJSON }) => {
  const { data: systemInfo } = useSystemInfo();
 
  // Don't confuse the startQtr and endQtr which are the system defaults
  // for the first and last values in the dropdown lists, with the actual
  // *currently selectted* start and end quarters for the search!
 
  const firstQtr = systemInfo.startQtrYYYYQ || "20211";
  const lastQtr = systemInfo.endQtrYYYYQ || "20214";
 
  const quarters = quarterRange(firstQtr, lastQtr);
 
  const localStartQuarter = localStorage.getItem(
    "CourseOverTimeInstructorSearch.StartQuarter",
  );
 
  const localEndQuarter = localStorage.getItem(
    "CourseOverTimeInstructorSearch.EndQuarter",
  );
  const localInstructor = localStorage.getItem(
    "CourseOverTimeInstructorSearch.Instructor",
  );
  const localStorageCheckbox =
    localStorage.getItem("CourseOverTimeInstructorSearch.Checkbox") === "true";
 
  const [startQuarter, setStartQuarter] = useState(
    localStartQuarter || firstQtr,
  );
 
  // Stryker disable next-line all : TODO: write a good test for this or refactor
  const [endQuarter, setEndQuarter] = useState(localEndQuarter || lastQtr);
 
  const [instructor, setInstructor] = useState(localInstructor || "");
  const [checkbox, setCheckbox] = useState(localStorageCheckbox || false);
 
  const handleSubmit = (event) => {
    event.preventDefault();
    fetchJSON(event, { startQuarter, endQuarter, instructor, checkbox });
  };
 
  const handleInstructorOnChange = (event) => {
    setInstructor(event.target.value);
  };
 
  const handleCheckboxOnChange = (event) => {
    setCheckbox(event.target.checked);
    localStorage.setItem(
      "CourseOverTimeInstructorSearch.Checkbox",
      event.target.checked.toString(),
    );
  };
 
  const testid = "CourseOverTimeInstructorSearchForm";
 
  return (
    <Form onSubmit={handleSubmit}>
      <Container>
        <Row>
          <Col md="auto">
            <SingleQuarterDropdown
              quarters={quarters}
              quarter={startQuarter}
              setQuarter={setStartQuarter}
              controlId={"CourseOverTimeInstructorSearch.StartQuarter"}
              label={"Start Quarter"}
            />
          </Col>
          <Col md="auto">
            <SingleQuarterDropdown
              quarters={quarters}
              quarter={endQuarter}
              setQuarter={setEndQuarter}
              controlId={"CourseOverTimeInstructorSearch.EndQuarter"}
              label={"End Quarter"}
            />
          </Col>
        </Row>
        <Form.Group controlId="CourseOverTimeInstructorSearch.Instructor">
          <Form.Label>Instructor Name</Form.Label>
          <Form.Control
            onChange={handleInstructorOnChange}
            defaultValue={instructor}
          />
        </Form.Group>
        <Form.Group controlId="CourseOverTimeInstructorSearch.Checkbox">
          <FormCheck
            data-testid={`${testid}-checkbox`}
            label="Lectures Only"
            onChange={handleCheckboxOnChange}
            checked={checkbox}
          ></FormCheck>
        </Form.Group>
        <Row
          data-testid={`${testid}-bottom-row`}
          style={{ paddingTop: 10, paddingBottom: 10 }}
        >
          <Col md="auto">
            <Button variant="primary" type="submit">
              Submit
            </Button>
          </Col>
        </Row>
      </Container>
    </Form>
  );
};
 
export default CourseOverTimeInstructorSearchForm;