import Stack from "@mui/material/Stack"; import Box from "@mui/material/Box"; import Typography from "@mui/material/Typography"; import Tooltip from "@mui/material/Tooltip"; import IconButton from "@mui/material/IconButton"; import Avatar from "../../Avatar/index.jsx"; import Menu from "@mui/material/Menu"; import MenuItem from "@mui/material/MenuItem"; import Divider from "@mui/material/Divider"; import Icon from "../../Icon"; import { useTheme } from "@emotion/react"; import { useSelector } from "react-redux"; import { useTranslation } from "react-i18next"; import { useState } from "react"; import { useNavigate } from "react-router"; import { clearAuthState } from "../../../../Features/Auth/authSlice.js"; import { useDispatch } from "react-redux"; import PropTypes from "prop-types"; const getFilteredAccountMenuItems = (user, items) => { if (!user) return []; let filtered = [...items]; if (user.role?.includes("demo")) { filtered = filtered.filter((item) => item.name !== "Password"); } if (!user.role?.includes("superadmin")) { filtered = filtered.filter((item) => item.name !== "Team"); } return filtered; }; const getRoleDisplayText = (user, t) => { if (!user?.role) return ""; if (user.role.includes("superadmin")) return t("roles.superAdmin"); if (user.role.includes("admin")) return t("roles.admin"); if (user.role.includes("user")) return t("roles.teamMember"); if (user.role.includes("demo")) return t("roles.demoUser"); return user.role; }; const AuthFooter = ({ collapsed, accountMenuItems }) => { const { t } = useTranslation(); const theme = useTheme(); const authState = useSelector((state) => state.auth); const navigate = useNavigate(); const dispatch = useDispatch(); const [anchorEl, setAnchorEl] = useState(null); const openPopup = (event) => { setAnchorEl(event.currentTarget); }; const closePopup = () => { setAnchorEl(null); }; const logout = async () => { dispatch(clearAuthState()); navigate("/login"); }; const renderAccountMenuItems = (user, items) => { const filteredItems = getFilteredAccountMenuItems(user, items); return filteredItems.map((item) => ( { closePopup(); navigate(item.path); }} sx={{ gap: theme.spacing(2), borderRadius: theme.shape.borderRadius, pl: theme.spacing(4), color: theme.palette.primary.contrastTextTertiary, "& svg": { stroke: theme.palette.primary.contrastTextTertiary, }, }} > {item.icon} {item.name} )); }; return ( collapsed && openPopup(e)} sx={{ cursor: collapsed ? "pointer" : "default", }} /> {authState.user?.firstName} {authState.user?.lastName} {getRoleDisplayText(authState.user, t)} openPopup(event)} > {collapsed && ( {authState.user?.firstName} {authState.user?.lastName} {authState.user?.role} )} {/* TODO Do we need two dividers? */} {collapsed && } {/* */} {renderAccountMenuItems(authState.user, accountMenuItems)} {t("menu.logOut", "Log out")} ); }; AuthFooter.propTypes = { collapsed: PropTypes.bool, accountMenuItems: PropTypes.array, }; export default AuthFooter;