From 4030031ce9c1c936e31ac5b8a13f0764e3a33a22 Mon Sep 17 00:00:00 2001 From: Mattias <mattias.rasmusson.1032@student.lu.se> Date: Wed, 20 Mar 2024 16:36:24 +0100 Subject: [PATCH] New comp TimePerActivity --- frontend/src/Components/TimePerActivity.tsx | 175 ++++++++++++++++++ .../PMTotalTimeActivity.tsx | 7 +- 2 files changed, 177 insertions(+), 5 deletions(-) create mode 100644 frontend/src/Components/TimePerActivity.tsx diff --git a/frontend/src/Components/TimePerActivity.tsx b/frontend/src/Components/TimePerActivity.tsx new file mode 100644 index 0000000..3dc1a6b --- /dev/null +++ b/frontend/src/Components/TimePerActivity.tsx @@ -0,0 +1,175 @@ +import { useState, useEffect } from "react"; +import { useParams } from "react-router-dom"; + +/** + * Renders the component for showing total time per role in a project. + * @returns JSX.Element + */ +export default function TimePerRole(): JSX.Element { + const [developmentTime, setDevelopmentTime] = useState<number>(); + const [meetingTime, setMeetingTime] = useState<number>(); + const [adminTime, setAdminTime] = useState<number>(); + const [ownWorkTime, setOwnWorkTime] = useState<number>(); + const [studyTime, setStudyTime] = useState<number>(); + const [testingTime, setTestingTime] = useState<number>(); + + // const token = localStorage.getItem("accessToken") ?? ""; + // const username = localStorage.getItem("username") ?? ""; + const { projectName } = useParams(); + + // const fetchTimePerRole = async (): Promise<void> => { + // const response = await api.getTimePerRole( + // username, + // projectName ?? "", + // token, + // ); + // { + // if (response.success) { + // const report: TimePerRole = response.data ?? { + // PManagerTime: 0, + // SManagerTime: 0, + // DeveloperTime: 0, + // TesterTime: 0, + // }; + // } else { + // console.error("Failed to fetch weekly report:", response.message); + // } + // } + + interface TimePerActivity { + developmentTime: number; + meetingTime: number; + adminTime: number; + ownWorkTime: number; + studyTime: number; + testingTime: number; + } + + const fetchTimePerActivity = async (): Promise<void> => { + // Use mock data + const report: TimePerActivity = { + developmentTime: 100, + meetingTime: 200, + adminTime: 300, + ownWorkTime: 50, + studyTime: 75, + testingTime: 110, + }; + + // Set the state with the mock data + setDevelopmentTime(report.developmentTime); + setMeetingTime(report.meetingTime); + setAdminTime(report.adminTime); + setOwnWorkTime(report.ownWorkTime); + setStudyTime(report.studyTime); + setTestingTime(report.testingTime); + + await Promise.resolve(); + }; + + useEffect(() => { + void fetchTimePerActivity(); + }); + + return ( + <> + <h1 className="font-bold text-[30px] mb-[20px]"> + Total Time Per Activity In: {projectName}{" "} + </h1> + <div className="border-4 border-black bg-white flex flex-col justify-start min-h-[65vh] h-fit w-[50vw] rounded-3xl overflow-scroll space-y-[2vh] p-[30px] items-center"> + <div className="flex flex-col items-center"> + <table className="w-full text-center divide-y divide-x divide-white text-[30px]"> + <thead> + <tr> + <th className="w-1/2 py-2 border-b-2 border-black">Activity</th> + <th className="w-1/2 py-2 border-b-2 border-black"> + Total Time (min) + </th> + </tr> + </thead> + <tbody className="divide-y divide-black"> + <tr className="h-[10vh]"> + <td>Development</td> + <td> + <input + type="string" + className="border-2 border-black rounded-md text-center w-1/2" + value={developmentTime} + onKeyDown={(event) => { + event.preventDefault(); + }} + /> + </td> + </tr> + <tr className="h-[10vh]"> + <td>Meeting</td> + <td> + <input + type="string" + className="border-2 border-black rounded-md text-center w-1/2" + value={meetingTime} + onKeyDown={(event) => { + event.preventDefault(); + }} + /> + </td> + </tr> + <tr className="h-[10vh]"> + <td>Administration</td> + <td> + <input + type="string" + className="border-2 border-black rounded-md text-center w-1/2" + value={adminTime} + onKeyDown={(event) => { + event.preventDefault(); + }} + /> + </td> + </tr> + <tr className="h-[10vh]"> + <td>Own Work</td> + <td> + <input + type="string" + className="border-2 border-black rounded-md text-center w-1/2" + value={ownWorkTime} + onKeyDown={(event) => { + event.preventDefault(); + }} + /> + </td> + </tr> + <tr className="h-[10vh]"> + <td>Studies</td> + <td> + <input + type="string" + className="border-2 border-black rounded-md text-center w-1/2" + value={studyTime} + onKeyDown={(event) => { + event.preventDefault(); + }} + /> + </td> + </tr> + <tr className="h-[10vh]"> + <td>Testing</td> + <td> + <input + type="string" + className="border-2 border-black rounded-md text-center w-1/2" + value={testingTime} + onKeyDown={(event) => { + event.preventDefault(); + }} + /> + </td> + </tr> + </tbody> + </table> + </div> + </div> + </> + ); +} diff --git a/frontend/src/Pages/ProjectManagerPages/PMTotalTimeActivity.tsx b/frontend/src/Pages/ProjectManagerPages/PMTotalTimeActivity.tsx index 676ea28..257a89c 100644 --- a/frontend/src/Pages/ProjectManagerPages/PMTotalTimeActivity.tsx +++ b/frontend/src/Pages/ProjectManagerPages/PMTotalTimeActivity.tsx @@ -1,14 +1,11 @@ import BackButton from "../../Components/BackButton"; import BasicWindow from "../../Components/BasicWindow"; -import TimeReport from "../../Components/NewWeeklyReport"; +import TimePerActivity from "../../Components/TimePerActivity"; function PMTotalTimeActivity(): JSX.Element { const content = ( <> - <h1 className="font-bold text-[30px] mb-[20px]"> - Total Time Per Activity - </h1> - <TimeReport /> + <TimePerActivity /> </> );