All files / components/Courses CourseModal.jsx

100% Statements 84/84
100% Branches 6/6
100% Functions 2/2
100% Lines 84/84

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 1081x 1x 1x 1x   184x 184x 184x 184x 184x 184x 184x 184x 184x 184x 184x 184x 184x 184x   184x 184x 71x 184x   184x 2x 2x   184x 184x 184x 184x 184x 184x   184x 184x 184x 184x 184x 184x 184x 184x     184x 184x 184x 184x 184x 184x 184x 184x 184x 184x 184x 184x   184x 184x   184x 184x 184x 184x 184x 184x 184x 184x 184x   184x 184x     184x 184x 184x 184x 184x 184x 184x 184x 184x 184x   184x 184x       184x 184x 184x 184x 184x   184x           184x   1x  
import Modal from "react-bootstrap/Modal";
import { Form } from "react-bootstrap";
import { useForm } from "react-hook-form";
import { useEffect } from "react";
 
function CourseModal({
  onSubmitAction,
  showModal,
  toggleShowModal,
  initialContents,
  buttonText = "Create",
  modalTitle = "Create Course",
}) {
  const {
    register,
    formState: { errors },
    handleSubmit,
    reset,
  } = useForm({});
 
  // Reset form when initialContents changes (e.g., when editing)
  useEffect(() => {
    reset(initialContents);
  }, [initialContents, reset]);
 
  const closeModal = () => {
    toggleShowModal(false);
  };
 
  return (
    <Modal
      show={showModal}
      onHide={closeModal}
      centered={true}
      data-testid={"CourseModal-base"}
    >
      <Modal.Header>
        <Modal.Title>{modalTitle}</Modal.Title>
        <button
          type="button"
          className="btn-close"
          aria-label="Close"
          data-testid={"CourseModal-closeButton"}
          onClick={closeModal}
        ></button>
      </Modal.Header>
      <Form onSubmit={handleSubmit(onSubmitAction)}>
        <Modal.Body>
          <Form.Group>
            <Form.Label htmlFor="courseName">Course Name</Form.Label>
            <Form.Control
              data-testid={"CourseModal-courseName"}
              id="courseName"
              type="text"
              isInvalid={Boolean(errors.courseName)}
              {...register("courseName", {
                required: "Course Name is required.",
              })}
            />
            <Form.Control.Feedback type="invalid">
              {errors.courseName?.message}
            </Form.Control.Feedback>
            <Form.Label htmlFor="term">Term</Form.Label>
            <Form.Control
              data-testid={"CourseModal-term"}
              id="term"
              type="text"
              isInvalid={Boolean(errors.term)}
              {...register("term", {
                required: "Course Term is required.",
              })}
            />
            <Form.Control.Feedback type="invalid">
              {errors.term?.message}
            </Form.Control.Feedback>
          </Form.Group>
          <Form.Group>
            <Form.Label htmlFor="school">School</Form.Label>
            <Form.Control
              data-testid={"CourseModal-school"}
              id="school"
              type="text"
              isInvalid={Boolean(errors.school)}
              {...register("school", {
                required: "School is required.",
              })}
            />
            <Form.Control.Feedback type="invalid">
              {errors.school?.message}
            </Form.Control.Feedback>
          </Form.Group>
        </Modal.Body>
        <Modal.Footer>
          <button
            type="submit"
            className="btn btn-primary"
            data-testid="CourseModal-submit"
          >
            {buttonText}
          </button>
        </Modal.Footer>
      </Form>
    </Modal>
  );
}
 
export default CourseModal;