import { MenuOutlined, SwapOutlined } from '@ant-design/icons'; import { Tooltip } from '@mui/material'; import { Outlet, useNavigate } from 'react-router-dom'; import { LayoutMenu, useQuickMenu } from './Menu'; import { useLayoutStore, usePlatformStore } from './store'; import { useShallow } from 'zustand/react/shallow'; import { useEffect, useLayoutEffect, useState } from 'react'; import { LayoutUser } from './LayoutUser'; import { PandaPNG } from '@/assets/index.tsx'; import QRCodePNG from '@/assets/qrcode-8x8.jpg'; import { Panel, Group as PanelGroup } from 'react-resizable-panels'; import clsx from 'clsx'; import { Button, Menu, MenuItem } from '@mui/material'; import i18n from 'i18next'; import { IconButton } from '@kevisual/components/button/index.tsx'; import { Languages, QrCode } from 'lucide-react'; import { useTranslation } from 'react-i18next'; import { toast } from 'react-toastify'; import { useTheme } from '@kevisual/components/theme/index.tsx'; import { isSky } from '../basename'; type LayoutMainProps = { title?: React.ReactNode; children?: React.ReactNode; }; export const LayoutMain = (props: LayoutMainProps) => { const menuStore = useLayoutStore( useShallow((state) => { return { open: state.open, setOpen: state.setOpen, // getMe: state.getMe, me: state.me, setOpenUser: state.setOpenUser, switchOrg: state.switchOrg, }; }), ); const platformStore = usePlatformStore( useShallow((state) => { return { isMac: state.isMac, mount: state.mount, isElectron: state.isElectron, init: state.init, }; }), ); const { isMac, mount, isElectron } = platformStore; const navigate = useNavigate(); const quickMenu = useQuickMenu(); useLayoutEffect(() => { platformStore.init(); }, []); useEffect(() => { menuStore.getMe(); }, []); const [anchorEl, setAnchorEl] = useState(null); const handleClick = (event: React.MouseEvent) => { setAnchorEl(event.currentTarget); }; const handleClose = () => { setAnchorEl(null); }; const changeLanguage = (lng: string) => { i18n.changeLanguage(lng); toast.success(t('Language changed to') + ' ' + t(lng)); handleClose(); }; const currentLanguage = i18n.language; const { t } = useTranslation(); return (
{ menuStore.setOpen(true); }}>
{props.title}
{quickMenu.map((item, index) => { const isActive = location.pathname.includes(item.link); return (
{ navigate(item.link); }}>
{item.icon}
); })}
{!isSky && (
QR Code
逸闻设计
)}
changeLanguage('en')}> English changeLanguage('zh')}> 中文
{menuStore.me?.type === 'org' && (
{ menuStore.switchOrg('', 'user'); }}>
)}
menuStore.setOpenUser(true)}> {menuStore.me?.avatar ? ( avatar ) : ( avatar )}
menuStore.setOpenUser(true)}> {menuStore.me?.username}
); };