Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 

99 Zeilen
2.8 KiB

  1. "use client";
  2. import { useCallback, useState } from "react";
  3. import { useTranslation } from "react-i18next";
  4. import Button from "@mui/material/Button";
  5. import Stack from "@mui/material/Stack";
  6. import { Add } from "@mui/icons-material";
  7. import { Typography } from "@mui/material";
  8. import ButtonGroup from "@mui/material/ButtonGroup";
  9. import AssignedProjects from "./AssignedProjects";
  10. import TimesheetModal from "../TimesheetModal";
  11. import { AssignedProject } from "@/app/api/projects";
  12. export interface Props {
  13. assignedProjects: AssignedProject[];
  14. }
  15. const UserWorkspacePage: React.FC<Props> = ({ assignedProjects }) => {
  16. const [isTimeheetModalVisible, setTimeheetModalVisible] = useState(false);
  17. const [isLeaveModalVisible, setLeaveModalVisible] = useState(false);
  18. const { t } = useTranslation("home");
  19. const handleAddTimesheetButtonClick = useCallback(() => {
  20. setTimeheetModalVisible(true);
  21. }, []);
  22. const handleCloseTimesheetModal = useCallback(() => {
  23. setTimeheetModalVisible(false);
  24. }, []);
  25. const handleAddLeaveButtonClick = useCallback(() => {
  26. setLeaveModalVisible(true);
  27. }, []);
  28. const handleCloseLeaveModal = useCallback(() => {
  29. setLeaveModalVisible(false);
  30. }, []);
  31. return (
  32. <>
  33. <Stack
  34. direction="row"
  35. justifyContent="space-between"
  36. flexWrap="wrap"
  37. rowGap={2}
  38. >
  39. <Typography variant="h4" marginInlineEnd={2}>
  40. {t("User Workspace")}
  41. </Typography>
  42. <Stack
  43. direction="row"
  44. justifyContent="right"
  45. flexWrap="wrap"
  46. spacing={2}
  47. >
  48. {Boolean(assignedProjects.length) && (
  49. <ButtonGroup variant="contained">
  50. <Button
  51. startIcon={<Add />}
  52. onClick={handleAddTimesheetButtonClick}
  53. >
  54. {t("Enter Time")}
  55. </Button>
  56. <Button startIcon={<Add />} onClick={handleAddLeaveButtonClick}>
  57. {t("Record Leave")}
  58. </Button>
  59. </ButtonGroup>
  60. )}
  61. </Stack>
  62. </Stack>
  63. {assignedProjects.length > 0 ? (
  64. <>
  65. <TimesheetModal
  66. timesheetType="time"
  67. isOpen={isTimeheetModalVisible}
  68. onClose={handleCloseTimesheetModal}
  69. assignedProjects={assignedProjects}
  70. />
  71. <TimesheetModal
  72. timesheetType="leave"
  73. isOpen={isLeaveModalVisible}
  74. onClose={handleCloseLeaveModal}
  75. assignedProjects={assignedProjects}
  76. />
  77. <AssignedProjects assignedProjects={assignedProjects} />
  78. </>
  79. ) : (
  80. <>
  81. <Typography variant="subtitle1">
  82. {t("You have no assigned projects!")}
  83. </Typography>
  84. </>
  85. )}
  86. </>
  87. );
  88. };
  89. export default UserWorkspacePage;