Files
timelog/frontend/src/components/LeftSide.tsx
T
QkoSad fd82786671 done
2024-11-28 14:36:15 +02:00

225 lines
5.6 KiB
TypeScript

import { useEffect, useState } from "react";
import api from "../utils/api";
import Grid from "@mui/material/Grid2";
import {
TableRow,
TableBody,
TableCell,
TableHead,
Table,
Button,
} from "@mui/material";
interface User {
date: string;
f_name: string;
l_name: string;
mail: string;
name: string;
time: number;
user: number;
}
const LeftSide = ({
reset,
setReset,
}: {
reset: boolean;
setReset: Function;
}) => {
// next prev and sort buttons
const [users, setUsers] = useState<User[]>();
const [params, setParams] = useState({
offset: 0,
sortby: "f_name",
from: "2000-01-01",
to: "2028-01-01",
order: true,
});
// date buttons
const [date, setDate] = useState({
from: "2021-01-01",
to: "2028-01-01",
});
useEffect(() => {
async function fetchData() {
const resp = await api.get("/getall", { params });
if (resp.data.length) setUsers(resp.data);
}
async function resetData() {
await api.get("/reset");
}
if (!reset) {
setReset(true);
resetData();
}
fetchData();
}, [reset, params]);
const viewProjectHours = (userid: number) => {
async function fetchHours() {
const resp = await api.get("/getuser", { params: { userid } });
const entriesArray = Object.entries(resp.data);
alert(entriesArray);
}
fetchHours();
};
if (!users) return <></>;
return (
<Grid container spacing={2}>
<Grid size={12}>
<label htmlFor="date">From: </label>
<input
type="date"
id="from"
name="from"
value={date.from}
onChange={(event) => setDate({ ...date, from: event.target.value })}
/>
<label htmlFor="date">To: </label>
<input
type="date"
id="to"
name="to"
value={params.to}
onChange={(event) => setDate({ ...date, to: event.target.value })}
/>
<button
onClick={() => setParams({ ...params, from: date.from, to: date.to })}
>
Submit Date
</button>
</Grid>
<Grid size={4}>
<button
onClick={() => {
if (!params.offset) return;
setParams((prevParams) => {
return { ...prevParams, offset: prevParams.offset - 10 };
});
}}
>
Prev users
</button>
</Grid>
<Grid size={4}></Grid>
<Grid size={4}>
<button
onClick={() =>
setParams((prevParams) => {
return { ...prevParams, offset: prevParams.offset + 10 };
})
}
>
Next users
</button>
</Grid>
<Table>
<TableHead>
<TableRow>
<TableCell>
<Button
onClick={() =>
setParams({
...params,
sortby: "f_name",
order: !params.order,
})
}
>
First Name
</Button>
</TableCell>
<TableCell>
<Button
onClick={() =>
setParams({
...params,
sortby: "l_name",
order: !params.order,
})
}
>
Last Name
</Button>
</TableCell>
<TableCell>
<Button
onClick={() =>
setParams({ ...params, sortby: "mail", order: !params.order })
}
>
Email
</Button>
</TableCell>
<TableCell>
<Button
onClick={() =>
setParams({
...params,
sortby: "project",
order: !params.order,
})
}
>
Project
</Button>
</TableCell>
<TableCell>
<Button
onClick={() =>
setParams({ ...params, sortby: "date", order: !params.order })
}
>
Date
</Button>
</TableCell>
<TableCell>
<Button
onClick={() =>
setParams({ ...params, sortby: "time", order: !params.order })
}
>
Hours
</Button>
</TableCell>
<TableCell />
</TableRow>
</TableHead>
<TableBody>
{users.length > 0 && Array.isArray(users) ? (
users.map((post, idx) => (
<TableRow key={idx}>
<TableCell>{post.f_name} </TableCell>
<TableCell>{post.l_name} </TableCell>
<TableCell>{post.mail} </TableCell>
<TableCell>{post.name} </TableCell>
<TableCell>{post.date.slice(0, 10)} </TableCell>
<TableCell>{post.time} </TableCell>
<TableCell>
<button onClick={() => viewProjectHours(post.user)}>
Hours
</button>
</TableCell>
</TableRow>
))
) : (
<TableRow>
<TableCell>No data found...</TableCell>
</TableRow>
)}
</TableBody>
</Table>
<Grid size={5}></Grid>
<Grid size={6}>
<button onClick={() => setReset(!reset)}>RESET</button>
</Grid>
</Grid>
);
};
export default LeftSide;