import { useState, useEffect } from "react"; import { 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 */ export default function GetWeeklyReport(): 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 username = localStorage.getItem("username") ?? ""; const { projectName } = useParams(); const { fetchedWeek } = useParams(); const fetchWeeklyReport = async (): Promise => { const response = await api.getWeeklyReport( username, projectName ?? "", fetchedWeek?.toString() ?? "0", token, ); if (response.success) { const report: NewWeeklyReport = response.data ?? { projectName: "", 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); } }; useEffect(() => { void fetchWeeklyReport(); }); const handleNewWeeklyReport = async (): Promise => { const newWeeklyReport: NewWeeklyReport = { projectName: projectName ?? "", week, developmentTime, meetingTime, adminTime, ownWorkTime, studyTime, testingTime, }; await api.submitWeeklyReport(newWeeklyReport, token); }; const navigate = useNavigate(); return ( <>
{ if (week === 0) { alert("Please enter a week number"); e.preventDefault(); return; } e.preventDefault(); void handleNewWeeklyReport(); navigate(-1); }} >
{ const weekNumber = parseInt(e.target.value.split("-W")[1]); setWeek(weekNumber); }} onKeyDown={(event) => { event.preventDefault(); }} onPaste={(event) => { event.preventDefault(); }} />
Activity Total Time (min)
Development { setDevelopmentTime(parseInt(e.target.value)); }} onKeyDown={(event) => { const keyValue = event.key; if (!/\d/.test(keyValue) && keyValue !== "Backspace") event.preventDefault(); }} />
Meeting { setMeetingTime(parseInt(e.target.value)); }} onKeyDown={(event) => { const keyValue = event.key; if (!/\d/.test(keyValue) && keyValue !== "Backspace") event.preventDefault(); }} />
Administration { setAdminTime(parseInt(e.target.value)); }} onKeyDown={(event) => { const keyValue = event.key; if (!/\d/.test(keyValue) && keyValue !== "Backspace") event.preventDefault(); }} />
Own Work { setOwnWorkTime(parseInt(e.target.value)); }} onKeyDown={(event) => { const keyValue = event.key; if (!/\d/.test(keyValue) && keyValue !== "Backspace") event.preventDefault(); }} />
Studies { setStudyTime(parseInt(e.target.value)); }} onKeyDown={(event) => { const keyValue = event.key; if (!/\d/.test(keyValue) && keyValue !== "Backspace") event.preventDefault(); }} />
Testing { setTestingTime(parseInt(e.target.value)); }} onKeyDown={(event) => { const keyValue = event.key; if (!/\d/.test(keyValue) && keyValue !== "Backspace") event.preventDefault(); }} />
); }