2022-04-05 18:21:25 +05:30
|
|
|
import { CheckCircleTwoTone, WarningOutlined } from '@ant-design/icons';
|
2022-05-20 11:43:23 +05:30
|
|
|
import { Menu, Space, Typography } from 'antd';
|
2022-03-22 16:22:02 +05:30
|
|
|
import getLocalStorageKey from 'api/browser/localstorage/get';
|
|
|
|
|
import { IS_SIDEBAR_COLLAPSED } from 'constants/app';
|
2021-09-23 15:43:43 +05:30
|
|
|
import ROUTES from 'constants/routes';
|
2021-09-28 18:50:10 +05:30
|
|
|
import history from 'lib/history';
|
2023-01-11 14:39:06 +05:30
|
|
|
import React, { useCallback, useLayoutEffect, useMemo, useState } from 'react';
|
2022-04-05 18:21:25 +05:30
|
|
|
import { useTranslation } from 'react-i18next';
|
2022-05-03 15:27:09 +05:30
|
|
|
import { useDispatch, useSelector } from 'react-redux';
|
|
|
|
|
import { useLocation } from 'react-router-dom';
|
2022-03-22 16:22:02 +05:30
|
|
|
import { SideBarCollapse } from 'store/actions/app';
|
2021-09-28 18:50:10 +05:30
|
|
|
import { AppState } from 'store/reducers';
|
|
|
|
|
import AppReducer from 'types/reducer/app';
|
2021-09-23 15:43:43 +05:30
|
|
|
|
2023-01-11 14:39:06 +05:30
|
|
|
import { styles } from './config';
|
2021-09-23 15:43:43 +05:30
|
|
|
import menus from './menuItems';
|
2022-02-12 15:01:38 +05:30
|
|
|
import Slack from './Slack';
|
2022-03-22 12:10:31 +05:30
|
|
|
import {
|
2022-04-05 18:21:25 +05:30
|
|
|
RedDot,
|
2022-03-22 12:10:31 +05:30
|
|
|
Sider,
|
|
|
|
|
SlackButton,
|
|
|
|
|
SlackMenuItemContainer,
|
2022-05-20 11:43:23 +05:30
|
|
|
Tags,
|
2022-04-05 18:21:25 +05:30
|
|
|
VersionContainer,
|
2022-03-22 12:10:31 +05:30
|
|
|
} from './styles';
|
2021-08-27 12:13:32 +05:30
|
|
|
|
2022-05-03 15:27:09 +05:30
|
|
|
function SideNav(): JSX.Element {
|
2022-03-22 16:22:02 +05:30
|
|
|
const dispatch = useDispatch();
|
|
|
|
|
const [collapsed, setCollapsed] = useState<boolean>(
|
|
|
|
|
getLocalStorageKey(IS_SIDEBAR_COLLAPSED) === 'true',
|
|
|
|
|
);
|
2022-05-03 15:27:09 +05:30
|
|
|
const { currentVersion, latestVersion, isCurrentVersionError } = useSelector<
|
|
|
|
|
AppState,
|
|
|
|
|
AppReducer
|
|
|
|
|
>((state) => state.app);
|
2021-08-27 12:13:32 +05:30
|
|
|
|
2022-03-22 21:56:12 +05:30
|
|
|
const { pathname } = useLocation();
|
2022-04-05 18:21:25 +05:30
|
|
|
const { t } = useTranslation('');
|
2022-03-22 21:56:12 +05:30
|
|
|
|
2021-08-27 12:13:32 +05:30
|
|
|
const onCollapse = useCallback(() => {
|
|
|
|
|
setCollapsed((collapsed) => !collapsed);
|
|
|
|
|
}, []);
|
|
|
|
|
|
2022-03-22 16:22:02 +05:30
|
|
|
useLayoutEffect(() => {
|
|
|
|
|
dispatch(SideBarCollapse(collapsed));
|
2022-03-22 21:56:12 +05:30
|
|
|
}, [collapsed, dispatch]);
|
2022-03-22 16:22:02 +05:30
|
|
|
|
2021-10-20 09:24:55 +05:30
|
|
|
const onClickHandler = useCallback(
|
|
|
|
|
(to: string) => {
|
|
|
|
|
if (pathname !== to) {
|
|
|
|
|
history.push(to);
|
|
|
|
|
}
|
|
|
|
|
},
|
2021-11-16 21:13:20 +05:30
|
|
|
[pathname],
|
2021-10-20 09:24:55 +05:30
|
|
|
);
|
2021-09-23 15:43:43 +05:30
|
|
|
|
2022-03-22 16:22:02 +05:30
|
|
|
const onClickSlackHandler = (): void => {
|
2022-02-12 15:01:38 +05:30
|
|
|
window.open('https://signoz.io/slack', '_blank');
|
|
|
|
|
};
|
|
|
|
|
|
2022-04-05 18:21:25 +05:30
|
|
|
const onClickVersionHandler = (): void => {
|
|
|
|
|
history.push(ROUTES.VERSION);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const isNotCurrentVersion = currentVersion !== latestVersion;
|
|
|
|
|
|
|
|
|
|
const sidebar = [
|
|
|
|
|
{
|
|
|
|
|
onClick: onClickSlackHandler,
|
|
|
|
|
icon: <Slack />,
|
|
|
|
|
text: <SlackButton>Support</SlackButton>,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
onClick: onClickVersionHandler,
|
|
|
|
|
icon: isNotCurrentVersion ? (
|
|
|
|
|
<WarningOutlined style={{ color: '#E87040' }} />
|
|
|
|
|
) : (
|
|
|
|
|
<CheckCircleTwoTone twoToneColor={['#D5F2BB', '#1f1f1f']} />
|
|
|
|
|
),
|
|
|
|
|
text: (
|
|
|
|
|
<VersionContainer>
|
|
|
|
|
{!isCurrentVersionError ? (
|
|
|
|
|
<SlackButton>{currentVersion}</SlackButton>
|
|
|
|
|
) : (
|
|
|
|
|
<SlackButton>{t('n_a')}</SlackButton>
|
|
|
|
|
)}
|
|
|
|
|
{isNotCurrentVersion && <RedDot />}
|
|
|
|
|
</VersionContainer>
|
|
|
|
|
),
|
|
|
|
|
},
|
|
|
|
|
];
|
|
|
|
|
|
2023-01-11 14:39:06 +05:30
|
|
|
const currentMenu = useMemo(
|
|
|
|
|
() => menus.find((menu) => pathname.startsWith(menu.to)),
|
|
|
|
|
[pathname],
|
|
|
|
|
);
|
2022-12-30 01:10:02 +05:30
|
|
|
|
2021-08-27 12:13:32 +05:30
|
|
|
return (
|
2021-09-28 18:50:10 +05:30
|
|
|
<Sider collapsible collapsed={collapsed} onCollapse={onCollapse} width={200}>
|
2021-08-27 12:13:32 +05:30
|
|
|
<Menu
|
|
|
|
|
theme="dark"
|
|
|
|
|
defaultSelectedKeys={[ROUTES.APPLICATION]}
|
2022-12-30 01:10:02 +05:30
|
|
|
selectedKeys={currentMenu ? [currentMenu?.to] : []}
|
2021-08-27 12:13:32 +05:30
|
|
|
mode="inline"
|
2023-01-11 14:39:06 +05:30
|
|
|
style={styles}
|
2021-08-27 12:13:32 +05:30
|
|
|
>
|
2022-05-20 11:43:23 +05:30
|
|
|
{menus.map(({ to, Icon, name, tags }) => (
|
2022-02-09 11:48:54 +05:30
|
|
|
<Menu.Item
|
|
|
|
|
key={to}
|
|
|
|
|
icon={<Icon />}
|
|
|
|
|
onClick={(): void => onClickHandler(to)}
|
|
|
|
|
>
|
2022-06-28 16:18:16 +05:30
|
|
|
<Space>
|
2022-06-29 09:14:27 +05:30
|
|
|
<div>{name}</div>
|
2022-05-20 11:43:23 +05:30
|
|
|
{tags &&
|
|
|
|
|
tags.map((e) => (
|
2022-05-20 14:02:46 +05:30
|
|
|
<Tags style={{ lineHeight: '1rem' }} color="#177DDC" key={e}>
|
|
|
|
|
<Typography.Text style={{ fontWeight: '300' }}>{e}</Typography.Text>
|
2022-05-20 11:43:23 +05:30
|
|
|
</Tags>
|
|
|
|
|
))}
|
|
|
|
|
</Space>
|
2021-08-27 12:13:32 +05:30
|
|
|
</Menu.Item>
|
|
|
|
|
))}
|
2022-04-05 18:21:25 +05:30
|
|
|
{sidebar.map((props, index) => (
|
|
|
|
|
<SlackMenuItemContainer
|
|
|
|
|
index={index + 1}
|
|
|
|
|
key={`${index + 1}`}
|
|
|
|
|
collapsed={collapsed}
|
|
|
|
|
>
|
|
|
|
|
<Menu.Item
|
|
|
|
|
eventKey={index.toString()}
|
|
|
|
|
onClick={props.onClick}
|
|
|
|
|
icon={props.icon}
|
|
|
|
|
>
|
|
|
|
|
{props.text}
|
|
|
|
|
</Menu.Item>
|
|
|
|
|
</SlackMenuItemContainer>
|
|
|
|
|
))}
|
2021-08-27 12:13:32 +05:30
|
|
|
</Menu>
|
|
|
|
|
</Sider>
|
|
|
|
|
);
|
2022-03-22 12:10:31 +05:30
|
|
|
}
|
2021-08-27 12:13:32 +05:30
|
|
|
|
2022-05-03 15:27:09 +05:30
|
|
|
export default SideNav;
|