in frontend/src/components/sidebar/sidebar.tsx [30:141]
export function Sidebar(props: any) {
const { t } = useTranslation();
const [selectedKeys, setSelectedKeys] = useState('/dashboard/overview');
const [collapsed, setCollapsed] = useState(true);
const { mode } = props;
const user = useContext(UserInfoContext);
const navigate = useNavigate();
const location = useLocation();
const isSuperAdmin = user?.is_super_admin;
const isSpaceAdmin = user?.is_admin;
const isInSpace = !GLOBAL_PATHS.includes(selectedKeys);
const logoRoute = useMemo(
() => (GLOBAL_PATHS.some(path => location.pathname.startsWith(path)) ? '/space' : '/cluster'),
[location.pathname],
);
const MENU_KEYS = ['/cluster', '/space', '/settings', '/admin', '/meta'];
useEffect(() => {
let selectKey = location.pathname;
MENU_KEYS.forEach(key => {
if (location.pathname.startsWith(key)) {
selectKey = key;
}
});
setSelectedKeys(selectKey);
}, [location.pathname]);
function onCollapse() {
setCollapsed(!collapsed);
}
const handleMenuChange = (e: any) => {
setSelectedKeys(e.key);
};
if (mode === 'initialize') {
return (
<Sider
collapsible
collapsed={collapsed}
onCollapse={onCollapse}
width={200}
className={styles[`doris-manager-side`]}
>
<Menu
mode="inline"
theme="dark"
defaultSelectedKeys={['/dashboard/overview']}
selectedKeys={[selectedKeys]}
style={{ height: '100%', borderRight: 0 }}
>
<Menu.Item
style={{
height: 60,
backgroundColor: '#00284D',
marginTop: 0,
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
}}
>
<div
className={collapsed ? styles['logo-collapsed'] : styles['logo']}
onClick={() => navigate(`/meta/index`)}
/>
</Menu.Item>
</Menu>
</Sider>
);
} else {
return (
<Sider
collapsible
collapsed={collapsed}
onCollapse={onCollapse}
width={200}
className={styles[`doris-manager-side`]}
>
<Menu
mode="inline"
theme="dark"
defaultSelectedKeys={['/dashboard/overview']}
selectedKeys={[selectedKeys]}
style={{ height: '100%', borderRight: 0 }}
onClick={handleMenuChange}
>
<Menu.Item
style={{
backgroundColor: '#00284D',
marginTop: 0,
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
}}
key="/logo"
onClick={() => navigate(logoRoute)}
>
<div className={collapsed ? styles['logo-collapsed'] : styles['logo']} />
</Menu.Item>
{isInSpace && (
<>
<Menu.Item key="/cluster" title={t`Cluster`} icon={<ClusterOutlined />}>
<Link to={`/cluster`}>{t`Cluster`}</Link>
</Menu.Item>
<Menu.Item key="/meta" icon={<TableOutlined />}>
<Link to={`/meta`}>{t`data`}</Link>
</Menu.Item>
{(isSuperAdmin || isSpaceAdmin) && (
<Menu.Item key="/admin" icon={<AppstoreOutlined />}>
<Link to={`/admin`}>{t`Space Manager`}</Link>
</Menu.Item>
)}