import { useShallow } from 'zustand/react/shallow'; import { useLayoutStore } from './store'; import clsx from 'clsx'; import { Menu, MenuItem, Tooltip } from '@mui/material'; import { Button } from '@mui/material'; import { message } from '@/modules/message'; import SmileOutlined from '@ant-design/icons/SmileOutlined'; import SwitcherOutlined from '@ant-design/icons/SwitcherOutlined'; import { useMemo } from 'react'; import { query, queryLogin } from '../query'; import { useNewNavigate } from '../navicate'; import { LogOut, Map, SquareUser, Users, X } from 'lucide-react'; import { useTranslation } from 'react-i18next'; import React from 'react'; export const LayoutUser = () => { const { open, setOpen, ...store } = useLayoutStore( useShallow((state) => ({ open: state.openUser, // setOpen: state.setOpenUser, me: state.me, switchOrg: state.switchOrg, })), ); const navigate = useNewNavigate(); const { t } = useTranslation(); const meun = [ { title: t('Your profile'), icon: , link: '/user/profile', }, { title: t('Your orgs'), icon: , link: '/org/edit/list', }, { title: t('Site Map'), icon: , link: '/map', }, ]; const items = useMemo(() => { const orgs = store.me?.orgs || []; return orgs.map((item) => { return { label: item, key: item, icon: , }; }); }, [store.me]); const [anchorEl, setAnchorEl] = React.useState(null); const handleClick = (event: React.MouseEvent) => { setAnchorEl(event.currentTarget); }; const handleClose = () => { setAnchorEl(null); }; return (
{ setOpen(false); }}>
{t('User')}: {store.me?.username}
{items.length > 0 && ( )}
{meun.map((item, index) => { return (
{ if (item.link) { navigate(item.link); setOpen(false); } else { message.info('Coming soon'); } }}>
{item.icon}
{item.title}
); })}
{ const res = await queryLogin.logout(); // console.log(res); if (res.success) { window.open('/user/login', '_self'); } else { message.error(res.message || 'Logout failed'); } }}>
{t('Login Out')}
{items.map((item, index) => { return ( { store.switchOrg(item.key, 'org'); handleClose(); }}>
{item.icon}
{item.label}
); })}
); };