From 8d07dfa7467faa608c7d323e769071c138afb386 Mon Sep 17 00:00:00 2001 From: Wayne Date: Sun, 21 Jul 2024 17:25:52 +0900 Subject: [PATCH] 24, 25 non-negative hours and list view for assigned projects --- .../TimeLeaveModal/TimeLeaveInputTable.tsx | 8 +- .../UserWorkspacePage/ProjectGrid.tsx | 167 +++++++++++++----- 2 files changed, 125 insertions(+), 50 deletions(-) diff --git a/src/components/TimeLeaveModal/TimeLeaveInputTable.tsx b/src/components/TimeLeaveModal/TimeLeaveInputTable.tsx index b858a60..2440741 100644 --- a/src/components/TimeLeaveModal/TimeLeaveInputTable.tsx +++ b/src/components/TimeLeaveModal/TimeLeaveInputTable.tsx @@ -393,7 +393,9 @@ const TimeLeaveInputTable: React.FC = ({ params.row._error?.[ params.field as keyof Omit ]; - const content = ; + const content = ( + + ); return errorMessage ? ( {content} @@ -423,7 +425,9 @@ const TimeLeaveInputTable: React.FC = ({ params.row._error?.[ params.field as keyof Omit ]; - const content = ; + const content = ( + + ); return errorMessage ? ( {content} diff --git a/src/components/UserWorkspacePage/ProjectGrid.tsx b/src/components/UserWorkspacePage/ProjectGrid.tsx index d7ec011..9eab16f 100644 --- a/src/components/UserWorkspacePage/ProjectGrid.tsx +++ b/src/components/UserWorkspacePage/ProjectGrid.tsx @@ -1,8 +1,19 @@ -import React from "react"; -import { Box, Card, CardContent, Grid, Typography } from "@mui/material"; +import React, { useCallback, useState } from "react"; +import { + Box, + Card, + CardContent, + Grid, + ToggleButton, + ToggleButtonGroup, + ToggleButtonProps, + Tooltip, + Typography, +} from "@mui/material"; import { useTranslation } from "react-i18next"; import { manhourFormatter } from "@/app/utils/formatUtil"; import { AssignedProject } from "@/app/api/projects"; +import { ViewList, ViewModule } from "@mui/icons-material"; interface Props { projects: AssignedProject[]; @@ -10,68 +21,128 @@ interface Props { maintainManagementStaffWorkspaceAbility?: boolean; } -const ProjectGrid: React.FC = ({ projects, maintainNormalStaffWorkspaceAbility, maintainManagementStaffWorkspaceAbility }) => { +const ProjectGrid: React.FC = ({ + projects, + maintainNormalStaffWorkspaceAbility, + maintainManagementStaffWorkspaceAbility, +}) => { const { t } = useTranslation("home"); + const [view, setView] = useState<"grid" | "list">("grid"); + + const handleViewChange = useCallback< + NonNullable + >((e, value) => { + if (value) { + setView(value); + } + }, []); + return ( - + + + + + + + + + + + + + {projects.map((project, idx) => ( - - + + {project.code} {project.name} + {/* Spacer */} + {/* Hours Spent */} - {(Boolean(maintainNormalStaffWorkspaceAbility) || Boolean(maintainManagementStaffWorkspaceAbility)) && <>{t("Hours Spent:")} - - {t("Normal")} - - {manhourFormatter.format(Boolean(maintainManagementStaffWorkspaceAbility) ? project.hoursSpent : project.currentStaffHoursSpent)} - - - - {t("Others")} - {`${manhourFormatter.format( - Boolean(maintainManagementStaffWorkspaceAbility) ? project.hoursSpentOther : project.currentStaffHoursSpentOther, - )}`} - } + {(Boolean(maintainNormalStaffWorkspaceAbility) || + Boolean(maintainManagementStaffWorkspaceAbility)) && ( + <> + + {t("Hours Spent:")} + + + {t("Normal")} + + {manhourFormatter.format( + Boolean(maintainManagementStaffWorkspaceAbility) + ? project.hoursSpent + : project.currentStaffHoursSpent, + )} + + + + {t("Others")} + {`${manhourFormatter.format( + Boolean(maintainManagementStaffWorkspaceAbility) + ? project.hoursSpentOther + : project.currentStaffHoursSpentOther, + )}`} + + + )} {/* Hours Allocated */} - {Boolean(maintainManagementStaffWorkspaceAbility) && - - {t("Hours Allocated:")} - - - {manhourFormatter.format(project.hoursAllocated)} - - } + {Boolean(maintainManagementStaffWorkspaceAbility) && ( + + + {t("Hours Allocated:")} + + + {manhourFormatter.format(project.hoursAllocated)} + + + )}