59 lines
1.9 KiB
TypeScript
59 lines
1.9 KiB
TypeScript
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;
|