feat: Tabs selection persist when we refresh

This commit is contained in:
Palash gupta 2022-05-19 21:25:03 +05:30
parent 53528f1045
commit 9fd8d12cc0
No known key found for this signature in database
GPG Key ID: 8FD05AE6F9150AD6
5 changed files with 107 additions and 40 deletions

View File

@ -2,5 +2,8 @@
"general": "General", "general": "General",
"alert_channels": "Alert Channels", "alert_channels": "Alert Channels",
"organization_settings": "Organization Settings", "organization_settings": "Organization Settings",
"my_settings": "My Settings" "my_settings": "My Settings",
"overview_metrics": "Overview Metrics",
"dbcall_metrics": "Database Calls",
"external_metrics": "External Calls"
} }

View File

@ -2,5 +2,8 @@
"general": "General", "general": "General",
"alert_channels": "Alert Channels", "alert_channels": "Alert Channels",
"organization_settings": "Organization Settings", "organization_settings": "Organization Settings",
"my_settings": "My Settings" "my_settings": "My Settings",
"overview_metrics": "Overview Metrics",
"dbcall_metrics": "Database Calls",
"external_metrics": "External Calls"
} }

View File

@ -27,12 +27,19 @@ function RouteTab({
onChange={onChange} onChange={onChange}
destroyInactiveTabPane destroyInactiveTabPane
activeKey={activeKey} activeKey={activeKey}
animated
// eslint-disable-next-line react/jsx-props-no-spreading // eslint-disable-next-line react/jsx-props-no-spreading
{...rest} {...rest}
> >
{routes.map( {routes.map(
({ Component, name }): JSX.Element => ( ({ Component, name, route }): JSX.Element => (
<TabPane tab={name} key={name}> <TabPane
tabKey={route}
animated
destroyInactiveTabPane
tab={name}
key={name}
>
<Component /> <Component />
</TabPane> </TabPane>
), ),

View File

@ -1,54 +1,108 @@
import { Tabs } from 'antd'; import RouteTab from 'components/RouteTab';
import ROUTES from 'constants/routes';
import React from 'react'; import React from 'react';
import { generatePath, useParams } from 'react-router-dom';
import { useLocation } from 'react-use';
import { Widgets } from 'types/api/dashboard/getAll'; import { Widgets } from 'types/api/dashboard/getAll';
import ResourceAttributesFilter from './ResourceAttributesFilter'; import ResourceAttributesFilter from './ResourceAttributesFilter';
import Application from './Tabs/Application';
import DBCall from './Tabs/DBCall'; import DBCall from './Tabs/DBCall';
import External from './Tabs/External'; import External from './Tabs/External';
import Overview from './Tabs/Overview';
const { TabPane } = Tabs; const getWidget = (query: Widgets['query']): Widgets => {
return {
description: '',
id: '',
isStacked: false,
nullZeroValues: '',
opacity: '0',
panelTypes: 'TIME_SERIES',
query,
queryData: {
data: [],
error: false,
errorMessage: '',
loading: false,
},
timePreferance: 'GLOBAL_TIME',
title: '',
stepSize: 60,
};
};
function OverViewTab(): JSX.Element {
return <Overview getWidget={getWidget} />;
}
function DbCallTab(): JSX.Element {
return <DBCall getWidget={getWidget} />;
}
function ExternalTab(): JSX.Element {
return <External getWidget={getWidget} />;
}
function ServiceMetrics(): JSX.Element { function ServiceMetrics(): JSX.Element {
const getWidget = (query: Widgets['query']): Widgets => { const { search } = useLocation();
return { const { servicename } = useParams<{ servicename: string }>();
description: '',
id: '', const searchParams = new URLSearchParams(search);
isStacked: false, const tab = searchParams.get('tab');
nullZeroValues: '',
opacity: '0', const overMetrics = 'Overview Metrics';
panelTypes: 'TIME_SERIES', const dbCallMetrics = 'Database Calls';
query, const externalMetrics = 'External Calls';
queryData: {
data: [], const getActiveKey = (): string => {
error: false, if (tab === null) {
errorMessage: '', return overMetrics;
loading: false, }
},
timePreferance: 'GLOBAL_TIME', if (tab === dbCallMetrics) {
title: '', return dbCallMetrics;
stepSize: 60, }
};
if (tab === externalMetrics) {
return externalMetrics;
}
return overMetrics;
}; };
const activeKey = getActiveKey();
return ( return (
<> <>
<ResourceAttributesFilter /> <ResourceAttributesFilter />
<Tabs defaultActiveKey="1"> <RouteTab
<TabPane animated destroyInactiveTabPane tab="Application Metrics" key="1"> routes={[
<Application getWidget={getWidget} /> {
</TabPane> Component: OverViewTab,
name: overMetrics,
<TabPane animated destroyInactiveTabPane tab="External Calls" key="2"> route: `${generatePath(ROUTES.SERVICE_METRICS, {
<External getWidget={getWidget} /> servicename,
</TabPane> })}?tab=${overMetrics}`,
},
<TabPane animated destroyInactiveTabPane tab="Database Calls" key="3"> {
<DBCall getWidget={getWidget} /> Component: DbCallTab,
</TabPane> name: dbCallMetrics,
</Tabs> route: `${generatePath(ROUTES.SERVICE_METRICS, {
servicename,
})}?tab=${dbCallMetrics}`,
},
{
Component: ExternalTab,
name: externalMetrics,
route: `${generatePath(ROUTES.SERVICE_METRICS, {
servicename,
})}?tab=${externalMetrics}`,
},
]}
activeKey={activeKey}
/>
</> </>
); );
} }
export default ServiceMetrics; export default React.memo(ServiceMetrics);