import { CheckCircleTwoTone, WarningOutlined } from '@ant-design/icons'; import { Menu, Space, Typography } from 'antd'; import getLocalStorageKey from 'api/browser/localstorage/get'; import { IS_SIDEBAR_COLLAPSED } from 'constants/app'; import ROUTES from 'constants/routes'; import history from 'lib/history'; import React, { useCallback, useLayoutEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useDispatch, useSelector } from 'react-redux'; import { useLocation } from 'react-router-dom'; import { SideBarCollapse } from 'store/actions/app'; import { AppState } from 'store/reducers'; import AppReducer from 'types/reducer/app'; import menus from './menuItems'; import Slack from './Slack'; import { RedDot, Sider, SlackButton, SlackMenuItemContainer, Tags, VersionContainer, } from './styles'; function SideNav(): JSX.Element { const dispatch = useDispatch(); const [collapsed, setCollapsed] = useState( getLocalStorageKey(IS_SIDEBAR_COLLAPSED) === 'true', ); const { currentVersion, latestVersion, isCurrentVersionError } = useSelector< AppState, AppReducer >((state) => state.app); const { pathname } = useLocation(); const { t } = useTranslation(''); const onCollapse = useCallback(() => { setCollapsed((collapsed) => !collapsed); }, []); useLayoutEffect(() => { dispatch(SideBarCollapse(collapsed)); }, [collapsed, dispatch]); const onClickHandler = useCallback( (to: string) => { if (pathname !== to) { history.push(to); } }, [pathname], ); const onClickSlackHandler = (): void => { window.open('https://signoz.io/slack', '_blank'); }; const onClickVersionHandler = (): void => { history.push(ROUTES.VERSION); }; const isNotCurrentVersion = currentVersion !== latestVersion; const sidebar = [ { onClick: onClickSlackHandler, icon: , text: Support, }, { onClick: onClickVersionHandler, icon: isNotCurrentVersion ? ( ) : ( ), text: ( {!isCurrentVersionError ? ( {currentVersion} ) : ( {t('n_a')} )} {isNotCurrentVersion && } ), }, ]; return ( {menus.map(({ to, Icon, name, tags }) => ( } onClick={(): void => onClickHandler(to)} > {name} {tags && tags.map((e) => ( {e} ))} ))} {sidebar.map((props, index) => ( {props.text} ))} ); } export default SideNav;