import { Domain } from '@/constants/common'; import { useSecondPathName } from '@/hooks/routeHook'; import type { MenuProps } from 'antd'; import { Flex, Menu } from 'antd'; import React, { useEffect, useMemo } from 'react'; import { useNavigate } from 'umi'; import { UserSettingBaseKey, UserSettingIconMap, UserSettingRouteKey, } from '../constants'; import { useTranslate } from '@/hooks/commonHooks'; import { useFetchSystemVersion, useLogout } from '@/hooks/userSettingHook'; import styles from './index.less'; type MenuItem = Required['items'][number]; const SideBar = () => { const navigate = useNavigate(); const pathName = useSecondPathName(); const logout = useLogout(); const { t } = useTranslate('setting'); const { version, fetchSystemVersion } = useFetchSystemVersion(); useEffect(() => { if (location.host !== Domain) { fetchSystemVersion(); } }, [fetchSystemVersion]); function getItem( label: string, key: React.Key, icon?: React.ReactNode, children?: MenuItem[], type?: 'group', ): MenuItem { return { key, icon, children, label: ( {t(label)} {label === 'system' && version} ), type, } as MenuItem; } const items: MenuItem[] = Object.values(UserSettingRouteKey).map((value) => getItem(value, value, UserSettingIconMap[value]), ); const handleMenuClick: MenuProps['onClick'] = ({ key }) => { if (key === UserSettingRouteKey.Logout) { logout(); } else { navigate(`/${UserSettingBaseKey}/${key}`); } }; const selectedKeys = useMemo(() => { return [pathName]; }, [pathName]); return (
); }; export default SideBar;