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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 7x 2x 2x 1x 2x 2x 2x 2x 2x 2x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x | import React, { useEffect, useState } from "react"; import { useBackend } from "main/utils/useBackend"; import BasicLayout from "main/layouts/BasicLayout/BasicLayout"; import InstructorCoursesTable from "main/components/Courses/InstructorCoursesTable"; import { useCurrentUser } from "main/utils/currentUser"; import { useNavigate, useParams } from "react-router"; import Modal from "react-bootstrap/Modal"; import { Button, Tab, Tabs } from "react-bootstrap"; import AssignmentTabComponent from "main/components/TabComponent/AssignmentTabComponent"; import EnrollmentTabComponent from "main/components/TabComponent/EnrollmentTabComponent"; import StaffTabComponent from "main/components/TabComponent/StaffTabComponent"; export default function InstructorCourseShowPage() { const currentUser = useCurrentUser(); const courseId = useParams().id; const [showErrorModal, setShowErrorModal] = useState(false); const { data: course, error: _errorCourse, status: _statusCourse, failureCount: courseBackendFailureCount, } = useBackend( [`/api/courses/${courseId}`], // Stryker disable next-line StringLiteral : GET and empty string are equivalent { method: "GET", url: `/api/courses/${courseId}` }, null, true, ); const getCourseFailed = courseBackendFailureCount > 0; const navigate = useNavigate(); useEffect(() => { if (getCourseFailed) { setShowErrorModal(true); const timer = setTimeout(() => { navigate("/", { replace: true }); }, 3000); // Stryker disable next-line BlockStatement return () => { clearTimeout(timer); }; } }, [getCourseFailed, navigate]); const testId = "InstructorCourseShowPage"; return ( <BasicLayout> <Modal show={showErrorModal}> <Modal.Header> <Modal.Title>Course Not Found</Modal.Title> </Modal.Header> <Modal.Body> Course not found. You will be returned to the course list in 3 seconds. </Modal.Body> <Modal.Footer> <Button onClick={() => setShowErrorModal(false)} variant={"primary"}> Close </Button> </Modal.Footer> </Modal> <h1 data-testid={`${testId}-title`}> Course: {course ? `${course.courseName} (${course.id})` : "Loading..."} </h1> <Tabs defaultActiveKey={"enrollment"} className="instructor-course-tabs"> <Tab eventKey={"enrollment"} title={"Enrollment"} className="pt-2"> <EnrollmentTabComponent courseId={courseId} testIdPrefix={testId} currentUser={currentUser} /> </Tab> <Tab eventKey={"staff"} title={"Staff"} className="pt-2"> <StaffTabComponent courseId={courseId} testIdPrefix={testId} currentUser={currentUser} /> </Tab> <Tab eventKey={"assignments"} title={"Assignments"} className="pt-2"> <AssignmentTabComponent courseId={courseId} /> </Tab> <Tab eventKey={"settings"} title={"Settings"} className="pt-2"> <InstructorCoursesTable courses={course ? [course] : []} currentUser={currentUser} testId={testId} /> </Tab> </Tabs> </BasicLayout> ); } |