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.
 
 

108 Zeilen
3.0 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. import {
  13. RecordLeaveInput,
  14. RecordTimesheetInput,
  15. } from "@/app/api/timesheets/actions";
  16. import LeaveModal from "../LeaveModal";
  17. import { LeaveType } from "@/app/api/timesheets";
  18. export interface Props {
  19. leaveTypes: LeaveType[];
  20. assignedProjects: AssignedProject[];
  21. username: string;
  22. defaultLeaveRecords: RecordLeaveInput;
  23. defaultTimesheets: RecordTimesheetInput;
  24. }
  25. const UserWorkspacePage: React.FC<Props> = ({
  26. leaveTypes,
  27. assignedProjects,
  28. username,
  29. defaultLeaveRecords,
  30. defaultTimesheets,
  31. }) => {
  32. const [isTimeheetModalVisible, setTimeheetModalVisible] = useState(false);
  33. const [isLeaveModalVisible, setLeaveModalVisible] = useState(false);
  34. const { t } = useTranslation("home");
  35. const handleAddTimesheetButtonClick = useCallback(() => {
  36. setTimeheetModalVisible(true);
  37. }, []);
  38. const handleCloseTimesheetModal = useCallback(() => {
  39. setTimeheetModalVisible(false);
  40. }, []);
  41. const handleAddLeaveButtonClick = useCallback(() => {
  42. setLeaveModalVisible(true);
  43. }, []);
  44. const handleCloseLeaveModal = useCallback(() => {
  45. setLeaveModalVisible(false);
  46. }, []);
  47. return (
  48. <>
  49. <Stack
  50. direction="row"
  51. justifyContent="space-between"
  52. flexWrap="wrap"
  53. rowGap={2}
  54. >
  55. <Typography variant="h4" marginInlineEnd={2}>
  56. {t("User Workspace")}
  57. </Typography>
  58. <Stack
  59. direction="row"
  60. justifyContent="right"
  61. flexWrap="wrap"
  62. spacing={2}
  63. >
  64. <ButtonGroup variant="contained">
  65. <Button startIcon={<Add />} onClick={handleAddTimesheetButtonClick}>
  66. {t("Enter Time")}
  67. </Button>
  68. <Button startIcon={<Add />} onClick={handleAddLeaveButtonClick}>
  69. {t("Record Leave")}
  70. </Button>
  71. </ButtonGroup>
  72. </Stack>
  73. </Stack>
  74. <TimesheetModal
  75. isOpen={isTimeheetModalVisible}
  76. onClose={handleCloseTimesheetModal}
  77. assignedProjects={assignedProjects}
  78. username={username}
  79. defaultTimesheets={defaultTimesheets}
  80. />
  81. <LeaveModal
  82. leaveTypes={leaveTypes}
  83. isOpen={isLeaveModalVisible}
  84. onClose={handleCloseLeaveModal}
  85. defaultLeaveRecords={defaultLeaveRecords}
  86. username={username}
  87. />
  88. {assignedProjects.length > 0 ? (
  89. <AssignedProjects assignedProjects={assignedProjects} />
  90. ) : (
  91. <Typography variant="subtitle1">
  92. {t("You have no assigned projects!")}
  93. </Typography>
  94. )}
  95. </>
  96. );
  97. };
  98. export default UserWorkspacePage;