From e2d23102755e268f6a50ef0c677ebaa8f6e26649 Mon Sep 17 00:00:00 2001 From: Mattias Date: Thu, 21 Mar 2024 10:31:24 +0100 Subject: [PATCH] Add ViewOtherTimeReport component to PMOtherUsersTR page --- .../src/Components/ViewOtherTimeReport.tsx | 188 ++++++++++++++++++ .../ProjectManagerPages/PMOtherUsersTR.tsx | 7 +- frontend/src/main.tsx | 2 +- 3 files changed, 195 insertions(+), 2 deletions(-) create mode 100644 frontend/src/Components/ViewOtherTimeReport.tsx diff --git a/frontend/src/Components/ViewOtherTimeReport.tsx b/frontend/src/Components/ViewOtherTimeReport.tsx new file mode 100644 index 0000000..38e3ed9 --- /dev/null +++ b/frontend/src/Components/ViewOtherTimeReport.tsx @@ -0,0 +1,188 @@ +import { useState, useEffect } from "react"; +import { WeeklyReport, NewWeeklyReport } from "../Types/goTypes"; +import { api } from "../API/API"; +import { useNavigate, useParams } from "react-router-dom"; +import Button from "./Button"; + +/** + * Renders the component for editing a weekly report. + * @returns JSX.Element + */ + +//This component does not yet work as intended. It is supposed to display the weekly report of a user in a project. +export default function GetOtherUsersReport(): JSX.Element { + const [week, setWeek] = useState(0); + const [developmentTime, setDevelopmentTime] = useState(0); + const [meetingTime, setMeetingTime] = useState(0); + const [adminTime, setAdminTime] = useState(0); + const [ownWorkTime, setOwnWorkTime] = useState(0); + const [studyTime, setStudyTime] = useState(0); + const [testingTime, setTestingTime] = useState(0); + + const token = localStorage.getItem("accessToken") ?? ""; + const { projectName } = useParams(); + const { username } = useParams(); + const { fetchedWeek } = useParams(); + + useEffect(() => { + const fetchUsersWeeklyReport = async (): Promise => { + const response = await api.getWeeklyReport( + projectName ?? "", + fetchedWeek?.toString() ?? "0", + token, + ); + + if (response.success) { + const report: WeeklyReport = response.data ?? { + reportId: 0, + userId: 0, + projectId: 0, + week: 0, + developmentTime: 0, + meetingTime: 0, + adminTime: 0, + ownWorkTime: 0, + studyTime: 0, + testingTime: 0, + }; + setWeek(report.week); + setDevelopmentTime(report.developmentTime); + setMeetingTime(report.meetingTime); + setAdminTime(report.adminTime); + setOwnWorkTime(report.ownWorkTime); + setStudyTime(report.studyTime); + setTestingTime(report.testingTime); + } else { + console.error("Failed to fetch weekly report:", response.message); + } + }; + + void fetchUsersWeeklyReport(); + }); + + const handleSignWeeklyReport = async (): Promise => { + const newWeeklyReport: NewWeeklyReport = { + projectName: projectName ?? "", + week, + developmentTime, + meetingTime, + adminTime, + ownWorkTime, + studyTime, + testingTime, + }; + + await api.submitWeeklyReport(newWeeklyReport, token); + }; + + const navigate = useNavigate(); + + return ( + <> +

{username}'s Report

+
+
{ + e.preventDefault(); + void handleSignWeeklyReport(); + navigate(-1); + }} + > +
+
+

Week: {week}

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Activity + + Total Time (min) +
Development + +
Meeting + +
Administration + +
Own Work + +
Studies + +
Testing + +
+
+
+
+ + ); +} diff --git a/frontend/src/Pages/ProjectManagerPages/PMOtherUsersTR.tsx b/frontend/src/Pages/ProjectManagerPages/PMOtherUsersTR.tsx index c76947b..f5c4bc7 100644 --- a/frontend/src/Pages/ProjectManagerPages/PMOtherUsersTR.tsx +++ b/frontend/src/Pages/ProjectManagerPages/PMOtherUsersTR.tsx @@ -1,8 +1,13 @@ import BasicWindow from "../../Components/BasicWindow"; import BackButton from "../../Components/BackButton"; +import ViewOtherTimeReport from "../../Components/ViewOtherTimeReport"; function PMOtherUsersTR(): JSX.Element { - const content = <>; + const content = ( + <> + + + ); const buttons = ( <> diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index c023660..66d808e 100644 --- a/frontend/src/main.tsx +++ b/frontend/src/main.tsx @@ -68,7 +68,7 @@ const router = createBrowserRouter([ element: , }, { - path: "/otherUsersTimeReports", + path: "/otherUsersTimeReports/:projectName/:username", element: , }, {