import { useTranslation } from "react-i18next"; import { Props } from "./ProjectGrid"; import { Paper, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, } from "@mui/material"; import { useMemo } from "react"; import { AssignedProject } from "@/app/api/projects"; import { manhourFormatter } from "@/app/utils/formatUtil"; interface Column { name: keyof AssignedProject; label: string; } const hourColumns: Array = [ "currentStaffHoursSpent", "currentStaffHoursSpentOther", "hoursAllocated", "hoursSpent", "hoursSpentOther", ]; const ProjectTable: React.FC = ({ projects, maintainManagementStaffWorkspaceAbility, maintainNormalStaffWorkspaceAbility, }) => { const { t } = useTranslation("home"); const columns = useMemo(() => { return [ { name: "code", label: t("Project Code") }, { name: "name", label: t("Project Name") }, ...(maintainManagementStaffWorkspaceAbility || maintainNormalStaffWorkspaceAbility ? maintainManagementStaffWorkspaceAbility ? ([ { name: "hoursSpent", label: t("Total Normal Hours Spent") }, { name: "hoursSpentOther", label: t("Total Other Hours Spent") }, { name: "hoursAllocated", label: t("Hours Allocated") }, ] satisfies Column[]) : ([ { name: "currentStaffHoursSpent", label: t("Normal Hours Spent"), }, { name: "currentStaffHoursSpentOther", label: t("Other Hours Spent"), }, ] satisfies Column[]) : []), ]; }, [ maintainManagementStaffWorkspaceAbility, maintainNormalStaffWorkspaceAbility, t, ]); return ( {columns.map((column, idx) => ( {column.label} ))} {projects.map((project) => { return ( {columns.map((column, idx) => { const columnName = column.name; const needsFormatting = hourColumns.includes(columnName); return ( {needsFormatting ? manhourFormatter.format( project[columnName] as number, ) : project[columnName]?.toString()} ); })} ); })}
); }; export default ProjectTable;