All files / pages/PersonalSchedules PersonalSchedulesDetailsPage.js

82.75% Statements 24/29
72.22% Branches 13/18
100% Functions 6/6
82.14% Lines 23/28

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 116 117 118 119 120 121 122 123 124 125                    5x 5x           4x                       4x 4x             4x                       4x 1x 1x 1x 7x 1x 6x   6x   6x   6x       1x     4x 1x 1x       1x   1x                                   4x                                                            
import BasicLayout from "main/layouts/BasicLayout/BasicLayout";
import { useParams } from "react-router-dom";
import PersonalSchedulesTable from "main/components/PersonalSchedules/PersonalSchedulesTable";
import PersonalSectionsTable from "main/components/PersonalSections/PersonalSectionsTable";
import PersonalSchedulesWeeklyView from "main/components/PersonalSchedulesWeeklyView/PersonalSchedulesWeeklyViewPanel";
import { useBackend, _useBackendMutation } from "main/utils/useBackend";
import { Button } from "react-bootstrap";
import { useCurrentUser } from "main/utils/currentUser";
 
export default function PersonalSchedulesDetailsPage() {
  let { id } = useParams();
  const { data: currentUser } = useCurrentUser();
 
  const {
    data: personalSchedule,
    _error,
    _status,
  } = useBackend(
    // Stryker disable all : hard to test for query caching
    [`/api/personalschedules?id=${id}`],
    {
      // Stryker disable next-line all : GET is the default, so changing this to "" doesn't introduce a bug
      method: "GET",
      url: `/api/personalschedules?id=${id}`,
      params: {
        id,
      },
    },
  );
  const createButton = () => {
    return (
      <Button variant="primary" href="/personalschedules/list" style={{}}>
        Back
      </Button>
    );
  };
 
  const { data: personalSection } = useBackend(
    // Stryker disable all : hard to test for query caching
    [`/api/personalSections/all?psId=${id}`],
    {
      method: "GET",
      url: `/api/personalSections/all?psId=${id}`,
      params: {
        id,
      },
    },
  );
 
  const dayParser = (dayString) => {
    dayString.replaceAll(" ", "");
    const dayArray = [];
    for (let i = 0; i < dayString.length; i++) {
      if (dayString[i] === "M") {
        dayArray.push("Monday");
      } else Iif (dayString[i] === "T") {
        dayArray.push("Tuesday");
      } else Iif (dayString[i] === "W") {
        dayArray.push("Wednesday");
      } else Iif (dayString[i] === "R") {
        dayArray.push("Thursday");
      } else Iif (dayString[i] === "F") {
        dayArray.push("Friday");
      }
    }
    return dayArray;
  };
 
  const eventParser = () => {
    Eif (personalSection !== undefined) {
      return {
        event: personalSection
          .filter(
            (section) =>
              section.classSections[0].timeLocations[0] !== undefined,
          )
          .map((section) => ({
            id: section.classSections[0].enrollCode.trim(),
            title: section.courseId.replaceAll(" ", ""),
            day: dayParser(section.classSections[0].timeLocations[0].days),
            name: section.title,
            description: section.description,
            area:
              section.classSections[0].timeLocations[0].building.trim() +
              " " +
              section.classSections[0].timeLocations[0].room.trim(),
            startTime: section.classSections[0].timeLocations[0].beginTime,
            endTime: section.classSections[0].timeLocations[0].endTime,
          })),
      };
    }
    return {};
  };
 
  return (
    <BasicLayout>
      <div className="pt-2">
        <h1>Personal Schedules Details</h1>
        {personalSchedule && (
          <PersonalSchedulesTable
            personalSchedules={[personalSchedule]}
            showButtons={false}
          />
        )}
        <p>
          <h2>Sections in Personal Schedule</h2>
          {personalSection && (
            <PersonalSectionsTable
              personalSections={personalSection}
              psId={id}
              currentUser={currentUser}
            />
          )}
        </p>
        <p>
          {personalSection && (
            <PersonalSchedulesWeeklyView Events={eventParser().event} />
          )}
        </p>
        {createButton()}
      </div>
    </BasicLayout>
  );
}