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 { useEffect, useMemo, useState } from 'react'; import { query, queryLogin } from '../query'; import { useNewNavigate } from '../navicate'; import { LogOut, Map, SquareUser, Users, X, ArrowDownLeftFromSquareIcon } from 'lucide-react'; import { useTranslation } from 'react-i18next'; import React from 'react'; export const LayoutUser = () => { const { open, setOpen, isAdmin, ...store } = useLayoutStore( useShallow((state) => ({ open: state.openUser, // setOpen: state.setOpenUser, me: state.me, switchOrg: state.switchOrg, isAdmin: state.isAdmin, })), ); const navigate = useNewNavigate(); const { t } = useTranslation(); const items = useMemo(() => { const orgs = store.me?.orgs || []; return orgs.map((item) => { return { label: item, key: item, icon: , }; }); }, [store.me]); const menu = useMemo(() => { const orgs = store.me?.orgs || []; const hasOrg = orgs.length > 0; const items = [ { title: t('Your profile'), icon: , link: '/user/profile', }, { title: t('Your orgs'), icon: , link: '/org/edit/list', isOrg: true, }, { title: t('Site Map'), icon: , link: '/map', }, { title: t('Domain'), icon: , link: '/domain/edit/list', isAdmin: true, }, ]; return items.filter((item) => { if (item.isOrg) { return hasOrg; } if (item.isAdmin) { return isAdmin; } return true; }); }, [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 && ( )}
{menu.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}
); })}
); };