GetProjectTimes component
This commit is contained in:
parent
644d0ee12c
commit
ca88daf493
1 changed files with 59 additions and 0 deletions
59
frontend/src/Components/GetProjectTimes.tsx
Normal file
59
frontend/src/Components/GetProjectTimes.tsx
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
import { Dispatch, SetStateAction, useEffect } from "react";
|
||||||
|
import { api } from "../API/API";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface for reported time per category + total time reported
|
||||||
|
*/
|
||||||
|
export interface projectTimes {
|
||||||
|
admin: number;
|
||||||
|
development: number;
|
||||||
|
meeting: number;
|
||||||
|
own_work: number;
|
||||||
|
study: number;
|
||||||
|
testing: number;
|
||||||
|
totalTime?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets all reported times for this project
|
||||||
|
* @param {Dispatch} props.setTimesProp - A setStateAction for the map you want to put times in
|
||||||
|
* @param {string} props.projectName - Username
|
||||||
|
* @returns {void} Nothing
|
||||||
|
* @example
|
||||||
|
* const projectName = "Example";
|
||||||
|
* const [times, setTimes] = useState<Times>();
|
||||||
|
* GetProjectTimes({ setTimesProp: setTimes, projectName: projectName });
|
||||||
|
*/
|
||||||
|
function GetProjectTimes(props: {
|
||||||
|
setTimesProp: Dispatch<SetStateAction<projectTimes | undefined>>;
|
||||||
|
projectName: string;
|
||||||
|
}): void {
|
||||||
|
const setTimes: Dispatch<SetStateAction<projectTimes | undefined>> =
|
||||||
|
props.setTimesProp;
|
||||||
|
useEffect(() => {
|
||||||
|
const fetchUsers = async (): Promise<void> => {
|
||||||
|
try {
|
||||||
|
const token = localStorage.getItem("accessToken") ?? "";
|
||||||
|
const response = await api.getProjectTimes(props.projectName, token);
|
||||||
|
if (response.success && response.data) {
|
||||||
|
// Calculates total time reported
|
||||||
|
response.data.totalTime = response.data.admin;
|
||||||
|
response.data.totalTime += response.data.development;
|
||||||
|
response.data.totalTime += response.data.meeting;
|
||||||
|
response.data.totalTime += response.data.own_work;
|
||||||
|
response.data.totalTime += response.data.study;
|
||||||
|
response.data.totalTime += response.data.testing;
|
||||||
|
setTimes(response.data);
|
||||||
|
} else {
|
||||||
|
console.error("Failed to fetch project times:", response.message);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error fetching times:", error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void fetchUsers();
|
||||||
|
}, [props.projectName, setTimes]);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default GetProjectTimes;
|
Loading…
Reference in a new issue