"use client"; import React, { useCallback, useState } from "react"; import { useTranslation } from "react-i18next"; import Button from "@mui/material/Button"; import Stack from "@mui/material/Stack"; import { CalendarMonth, EditCalendar, Luggage, MoreTime, } from "@mui/icons-material"; import { Menu, MenuItem, SxProps, Typography } from "@mui/material"; import AssignedProjects from "./AssignedProjects"; import { AssignedProject, ProjectWithTasks } from "@/app/api/projects"; import { RecordLeaveInput, RecordTimesheetInput, revalidateCacheAfterAmendment, } from "@/app/api/timesheets/actions"; import { LeaveType, TeamLeaves, TeamTimeSheets } from "@/app/api/timesheets"; import { CalendarIcon } from "@mui/x-date-pickers"; import PastEntryCalendarModal from "../PastEntryCalendar/PastEntryCalendarModal"; import { HolidaysResult } from "@/app/api/holidays"; import { TimesheetAmendmentModal } from "../TimesheetAmendment/TimesheetAmendmentModal"; import TimeLeaveModal from "../TimeLeaveModal/TimeLeaveModal"; import LeaveModal from "../LeaveModal"; import { Task } from "@/app/api/tasks"; import dayjs from "dayjs"; export interface Props { leaveTypes: LeaveType[]; allProjects: ProjectWithTasks[]; assignedProjects: AssignedProject[]; defaultLeaveRecords: RecordLeaveInput; defaultTimesheets: RecordTimesheetInput; holidays: HolidaysResult[]; teamTimesheets: TeamTimeSheets; teamLeaves: TeamLeaves; fastEntryEnabled: boolean; maintainNormalStaffWorkspaceAbility: boolean; maintainManagementStaffWorkspaceAbility: boolean; isFullTime: boolean; joinDate?: number | null; miscTasks: Task[]; isSaturdayWorker: boolean; userId: number; } const menuItemSx: SxProps = { gap: 1, color: "neutral.700", }; const UserWorkspacePage: React.FC = ({ leaveTypes, allProjects, assignedProjects, defaultLeaveRecords, defaultTimesheets, holidays, teamTimesheets, teamLeaves, fastEntryEnabled, maintainNormalStaffWorkspaceAbility, maintainManagementStaffWorkspaceAbility, isFullTime, joinDate, miscTasks, isSaturdayWorker, userId }) => { const [anchorEl, setAnchorEl] = useState(null); const [isTimeLeaveModalVisible, setTimeLeaveModalVisible] = useState(false); const [isLeaveCalendarVisible, setLeaveCalendarVisible] = useState(false); const [isPastEventModalVisible, setPastEventModalVisible] = useState(false); const [isTimesheetAmendmentVisible, setisTimesheetAmendmentVisible] = useState(false); const { t } = useTranslation("home"); const showTimesheetAmendment = Object.keys(teamTimesheets).length > 0; const handleOpenActionMenu = useCallback< React.MouseEventHandler >((event) => { setAnchorEl(event.currentTarget); }, []); const handleCloseActionMenu = useCallback(() => { setAnchorEl(null); }, []); const handleAddTimeLeaveButton = useCallback(() => { setAnchorEl(null); setTimeLeaveModalVisible(true); }, []); const handleCloseTimeLeaveModal = useCallback(() => { setTimeLeaveModalVisible(false); }, []); const handleOpenLeaveCalendarButton = useCallback(() => { setAnchorEl(null); setLeaveCalendarVisible(true); }, []); const handleCloseLeaveCalendarButton = useCallback(() => { setLeaveCalendarVisible(false); }, []); const handlePastEventClick = useCallback(() => { setAnchorEl(null); setPastEventModalVisible(true); }, []); const handlePastEventClose = useCallback(() => { setPastEventModalVisible(false); }, []); const handleAmendmentClick = useCallback(() => { setAnchorEl(null); setisTimesheetAmendmentVisible(true); }, []); const handleAmendmentClose = useCallback(() => { setisTimesheetAmendmentVisible(false); revalidateCacheAfterAmendment(); }, []); return ( <> {t("User Workspace")} {t("Enter Timesheet")} {t("Record Leave")} {t("View Past Entries")} {showTimesheetAmendment && ( {t("Timesheet Amendments")} )} {assignedProjects.length > 0 ? ( ) : ( {t("You have no assigned projects!")} )} {showTimesheetAmendment && ( )} ); }; export default UserWorkspacePage;