mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-10-13 08:51:31 +08:00

* chore: Router provider is removed * update: localstorage set get is added * update: AppLayout is updated * fix: adapter type is fixed * fix: Metric and metric application is now fixed * fix: Metrics page application is updated * fix: Tracepage is made fix * fix: app layout is updated * fix: global Time reducer is updated * refactor: getService api is added * update: metrics reducer is added * update: service list is fixed * fix: Metrics page is updated * fix: api for the metrics application are done * fix: metrics reducer is updated * fix: metrics application is updated * fix: content layout shift is removed * fix: Metric application is updated * fix: metrics application is updated * fix: Metrics application is updated * fix: Application tab is updated * chore: graph is updated * chore: Metrics application is updated * fix: chart x-axis is label is now fixed * fix: application tab is updated * fix: Top end points is added and re-redering in stopped * fix: fixed the edge case when user changes the global time then updated data is fetched * fix: Settings page is updated * chore: AppLayout is updated * chore: AppLayout is updated * chore: applayout is updated * chore: changed default loading is true in the global time reducer * chore: Global Time option is fixed * chore: Signup and Applayout is updated * chore: Button text is updated * chore: Button in the metrics application is updated * chore: dashboard menu item position in the side nav is updated * fix: Logo is now redirecting to the Application page * fix: Application page is updated * fix: AppLayout is updated * fix: starting and ending time is fixed * fix: Metrics Application is updated to the previous chart data * update: getDateArrayFromStartAndEnd function is added * update: Empty graph data is added * fix: External Call and DB Call Tabs graph are updated when there is no data a empty data is rendered * fix: onboarding modal condition is fixed and new calling api every 50000 ms to fetch the data * fix: onBoarding condition modal is updated * fix: onBoarding condition modal is updated * fix: onBoarding condition modal is updated * fix: Application chart re rendering issue is fixed * fix: Application page is changed when we change the global time * chore: step size is increased from 30 to 60 * chore: build is now fixed * chore: metrics application page is updated * fix: empty graph is now fixed * fix: application metrics graph is now fixed * fix: Time selection for custom is fixed * fix: usage graph is fixed * fix: global time selector is fixed and empty graph on click handler is added * fix: metrics application is now fixed
102 lines
3.0 KiB
TypeScript
102 lines
3.0 KiB
TypeScript
import { Menu, Switch as ToggleButton, Typography } from 'antd';
|
|
import ROUTES from 'constants/routes';
|
|
import history from 'lib/history';
|
|
import React, { useCallback, useState } from 'react';
|
|
import { connect, useSelector } from 'react-redux';
|
|
import { NavLink } from 'react-router-dom';
|
|
import { useLocation } from 'react-router-dom';
|
|
import { bindActionCreators } from 'redux';
|
|
import { ThunkDispatch } from 'redux-thunk';
|
|
import { GlobalTimeLoading, ToggleDarkMode } from 'store/actions';
|
|
import { AppState } from 'store/reducers';
|
|
import AppActions from 'types/actions';
|
|
import AppReducer from 'types/reducer/app';
|
|
|
|
import menus from './menuItems';
|
|
import { Logo, Sider, ThemeSwitcherWrapper } from './styles';
|
|
|
|
const SideNav = ({ toggleDarkMode, globalTimeLoading }: Props): JSX.Element => {
|
|
const [collapsed, setCollapsed] = useState<boolean>(false);
|
|
const { pathname } = useLocation();
|
|
const { isDarkMode } = useSelector<AppState, AppReducer>((state) => state.app);
|
|
|
|
const toggleTheme = useCallback(() => {
|
|
const preMode: mode = isDarkMode ? 'lightMode' : 'darkMode';
|
|
const postMode: mode = isDarkMode ? 'darkMode' : 'lightMode';
|
|
|
|
const id: mode = preMode;
|
|
const head = document.head;
|
|
const link = document.createElement('link');
|
|
link.rel = 'stylesheet';
|
|
link.type = 'text/css';
|
|
link.href = !isDarkMode ? '/css/antd.dark.min.css' : '/css/antd.min.css';
|
|
link.media = 'all';
|
|
link.id = id;
|
|
head.appendChild(link);
|
|
|
|
link.onload = (): void => {
|
|
toggleDarkMode();
|
|
const prevNode = document.getElementById(postMode);
|
|
prevNode?.remove();
|
|
};
|
|
}, [toggleDarkMode, isDarkMode]);
|
|
|
|
const onCollapse = useCallback(() => {
|
|
setCollapsed((collapsed) => !collapsed);
|
|
}, []);
|
|
|
|
const onClickHandler = useCallback(
|
|
(to: string) => {
|
|
if (pathname !== to) {
|
|
history.push(to);
|
|
globalTimeLoading();
|
|
}
|
|
},
|
|
[pathname, globalTimeLoading],
|
|
);
|
|
|
|
return (
|
|
<Sider collapsible collapsed={collapsed} onCollapse={onCollapse} width={200}>
|
|
<ThemeSwitcherWrapper>
|
|
<ToggleButton checked={isDarkMode} onChange={toggleTheme} />
|
|
</ThemeSwitcherWrapper>
|
|
<NavLink to={ROUTES.APPLICATION}>
|
|
<Logo src={'/signoz.svg'} alt="SigNoz" collapsed={collapsed} />
|
|
</NavLink>
|
|
|
|
<Menu
|
|
theme="dark"
|
|
defaultSelectedKeys={[ROUTES.APPLICATION]}
|
|
selectedKeys={[pathname]}
|
|
mode="inline"
|
|
>
|
|
{menus.map(({ to, Icon, name }) => (
|
|
<Menu.Item key={to} icon={<Icon />}>
|
|
<div onClick={(): void => onClickHandler(to)}>
|
|
<Typography>{name}</Typography>
|
|
</div>
|
|
</Menu.Item>
|
|
))}
|
|
</Menu>
|
|
</Sider>
|
|
);
|
|
};
|
|
|
|
type mode = 'darkMode' | 'lightMode';
|
|
|
|
interface DispatchProps {
|
|
toggleDarkMode: () => void;
|
|
globalTimeLoading: () => void;
|
|
}
|
|
|
|
const mapDispatchToProps = (
|
|
dispatch: ThunkDispatch<unknown, unknown, AppActions>,
|
|
): DispatchProps => ({
|
|
toggleDarkMode: bindActionCreators(ToggleDarkMode, dispatch),
|
|
globalTimeLoading: bindActionCreators(GlobalTimeLoading, dispatch),
|
|
});
|
|
|
|
type Props = DispatchProps;
|
|
|
|
export default connect(null, mapDispatchToProps)(SideNav);
|