import { Avatar, Box, Button, Checkbox, Divider, ListItemIcon, ListItemText, Menu, MenuItem, PaletteColor, Theme, Tooltip, useTheme } from "@mui/material"; import { useGlobalState } from "../providers/StateContainer"; import { getSecondaryColour, getSignatureAccentColour } from "../services/whiteLabel"; import { makeStyles } from "@mui/styles"; import { LockOpen, Person, Lock, Settings, SupervisedUserCircle as TeamIcon, ExitToApp, PersonAdd } from "@mui/icons-material"; import { useState } from "react"; import UserTeamName from "./UserTeamName"; import { useAuth0 } from "@auth0/auth0-react"; import UserSettings from "./UserSettings"; import UserAvatar from "./UserAvatar"; import { purple } from "@mui/material/colors"; import { useNavigate } from "react-router-dom"; import TeamDialog from "teams/TeamDialog"; import AccessObject from "./AccessObject"; import { useSnackbar, useUserAPI } from "hooks"; // import { useThemeMode } from "theme/AppThemeProvider"; const useStyles = makeStyles((theme: Theme) => ({ accessIcon: { color: "var(--status-ok)" }, userAvatar: { color: "#fff", backgroundColor: getSecondaryColour()["700" as keyof PaletteColor], [theme.breakpoints.down("xs")]: { width: "32px", height: "32px" } }, userAvatar2: { color: "#fff", backgroundColor: theme.palette.secondary["700" as keyof PaletteColor], [theme.breakpoints.down("xs")]: { width: "30px", height: "30px" }, position: "relative", top: -6, left: 0 }, teamAvatar: { color: "#fff", backgroundColor: theme.palette.secondary["700" as keyof PaletteColor], [theme.breakpoints.down("xs")]: { width: "30px", height: "30px" }, position: "absolute", top: -34, left: 8 }, profileButton: { maxWidth: "50vw" }, profileName: { whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis", textTransform: "capitalize", color: getSignatureAccentColour(), marginBottom: -3, marginTop: -3 }, red: { color: "var(--status-alert)" }, rightIcon: { marginLeft: theme.spacing(1) }, signIn: { color: getSignatureAccentColour(), borderColor: getSignatureAccentColour() }, })); export default function UserMenu() { // const { toggleMode } = useThemeMode() const [{ user, team, as }, dispatch] = useGlobalState(); const { loginWithRedirect } = useAuth0(); const classes = useStyles(); const theme = useTheme(); const userAPI = useUserAPI() const snackbar = useSnackbar() const name = user.name(); const picture = user.settings.avatar; const [lockIsHovered, setLockIsHovered] = useState(false); const [userMenuIsOpen, setUserMenuIsOpen] = useState(false); const [anchorEl, setAnchorEl] = useState(null); const [userSettingsIsOpen, setUserSettingsIsOpen] = useState(false); const hasTeams = user.hasFeature ? user.hasFeature("teams") : false; const [teamDialogIsOpen, setTeamDialogIsOpen] = useState(false); const [accessDialogOpen, setAccessDialogOpen] = useState(false); const navigate = useNavigate() const openTeamDialog = () => { setTeamDialogIsOpen(true); closeUserMenu(); }; const lockHover = () => { setLockIsHovered(true); }; const lockNoHover = () => { setLockIsHovered(false); }; const handleLogin = () => { loginWithRedirect() } const openUserMenu = (event: any) => { setAnchorEl(event.currentTarget); setUserMenuIsOpen(true); }; const closeUserMenu = () => { setUserMenuIsOpen(false); setAnchorEl(null); }; const openUserSettingsDialog = () => { setUserMenuIsOpen(false); setAnchorEl(null); setUserSettingsIsOpen(true) } const closeUserSettingsDialog = () => { setUserSettingsIsOpen(false) } const openAccessObject = () => { setAccessDialogOpen(true); closeUserMenu(); }; const handleLogout = () => { closeUserMenu(); navigate("/logout"); }; const unauthenticatedUserMenu = () => { return ( <> ); }; if (user.id().length < 1) return unauthenticatedUserMenu() const hasAdmin = user.hasFeature ? user.hasFeature("admin") : false; return ( <> {/* */} {hasTeams && ( )} {hasTeams && ( { if (as.length > 1) { user.settings.useTeam = false; dispatch({ key: "as", value: "" }); userAPI.updateUser(user.id(), user.protobuf()).then(_resp => { snackbar.info("Will no longer view as team by default"); }); } else { user.settings.useTeam = true; dispatch({ key: "as", value: team.key() }); userAPI.updateUser(user.id(), user.protobuf()).then(_resp => { snackbar.info("Will now view as " + team.name() + " by default"); }); } }} disabled={user.settings.defaultTeam.length < 1} aria-label="Open Team Menu" dense> 1} style={{ margin: 0, padding: 0 }} /> )} {hasAdmin && ( openAccessObject()} aria-label="Access Object" dense> )} setAccessDialogOpen(false)} /> ) }