mirror of
https://github.com/SigNoz/signoz.git
synced 2025-12-29 16:14:42 +00:00
* feat: sidebar revamp - initial commit * feat: move billinga and other isolated routes to settings * feat: handle channel related routes * feat: update account settings page * feat: show dropdown for secondary items * feat: handle reordering of pinned nav items * feat: improve font load performance * feat: update font reference * feat: update page content styles * feat: handle external links in sidebar * feat: handle secondary nav item clicks * feat: handle pinned nav items reordering * feat: handle sidenav pinned state using preference, handle light mode * feat: show sidenav items conditionally * feat: show version diff indicator only to self hosted users * feat: show billing to admins only and integrations to cloud and enterprise users * feat: update fallback link * feat: handle settings menu items * fix: settings page reload on nav chnage * feat: intercom to pylon * feat: show invite user to admin only * feat: handle review comments * chore: remove react query dev tools * feat: minor ui updates * feat: update changes based on preference store changes * feat: handle sidenav shortcut state * feat: handle scroll for more * feat: maintain shortcuts order * feat: manage license ui updates * feat: manage settings options based on license and roles * feat: update types * chore: add logEvents * feat: update types * chore: fix type errors * chore: remove unused variable * feat: update my settings page test cases --------- Co-authored-by: makeavish <makeavish786@gmail.com>
74 lines
1.6 KiB
TypeScript
74 lines
1.6 KiB
TypeScript
import { Tabs, TabsProps } from 'antd';
|
|
import { useLocation, useParams } from 'react-router-dom';
|
|
|
|
import { RouteTabProps } from './types';
|
|
|
|
interface Params {
|
|
[key: string]: string;
|
|
}
|
|
|
|
function RouteTab({
|
|
routes,
|
|
activeKey,
|
|
onChangeHandler,
|
|
history,
|
|
...rest
|
|
}: RouteTabProps & TabsProps): JSX.Element {
|
|
const params = useParams<Params>();
|
|
const location = useLocation();
|
|
|
|
// Replace dynamic parameters in routes
|
|
const routesWithParams = routes.map((route) => ({
|
|
...route,
|
|
route: route.route.replace(
|
|
/:(\w+)/g,
|
|
(match, param) => params[param] || match,
|
|
),
|
|
}));
|
|
|
|
// Find the matching route for the current pathname
|
|
const currentRoute = routesWithParams.find((route) => {
|
|
const routePattern = route.route.replace(/:(\w+)/g, '([^/]+)');
|
|
const regex = new RegExp(`^${routePattern}$`);
|
|
return regex.test(location.pathname);
|
|
});
|
|
|
|
const onChange = (activeRoute: string): void => {
|
|
if (onChangeHandler) {
|
|
onChangeHandler(activeRoute);
|
|
}
|
|
|
|
const selectedRoute = routesWithParams.find((e) => e.key === activeRoute);
|
|
|
|
if (selectedRoute) {
|
|
history.push(selectedRoute.route);
|
|
}
|
|
};
|
|
|
|
const items = routesWithParams.map(({ Component, name, route, key }) => ({
|
|
label: name,
|
|
key,
|
|
tabKey: route,
|
|
children: <Component />,
|
|
}));
|
|
|
|
return (
|
|
<Tabs
|
|
onChange={onChange}
|
|
destroyInactiveTabPane
|
|
activeKey={currentRoute?.key || activeKey}
|
|
defaultActiveKey={currentRoute?.key || activeKey}
|
|
animated
|
|
items={items}
|
|
// eslint-disable-next-line react/jsx-props-no-spreading
|
|
{...rest}
|
|
/>
|
|
);
|
|
}
|
|
|
|
RouteTab.defaultProps = {
|
|
onChangeHandler: undefined,
|
|
};
|
|
|
|
export default RouteTab;
|