Skip to content

Commit daab768

Browse files
fix: update namespace from query params to console
1 parent b1d227b commit daab768

12 files changed

Lines changed: 81 additions & 67 deletions

web/src/components/MetricsPage.tsx

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -114,15 +114,15 @@ import {
114114
t_global_spacer_sm,
115115
t_global_font_family_mono,
116116
} from '@patternfly/react-tokens';
117-
import { QueryParamProvider, StringParam, useQueryParam } from 'use-query-params';
118-
import { ReactRouter5Adapter } from 'use-query-params/adapters/react-router-5';
117+
import { StringParam, useQueryParam } from 'use-query-params';
119118
import { GraphUnits, isGraphUnit } from './metrics/units';
120119
import { SimpleSelect, SimpleSelectOption } from '@patternfly/react-templates';
121120
import { valueFormatter } from './console/console-shared/src/components/query-browser/QueryBrowserTooltip';
122121
import { ALL_NAMESPACES_KEY } from './utils';
123122
import { MonitoringProvider } from '../contexts/MonitoringContext';
124123
import { DataTestIDs } from './data-test';
125124
import { useMonitoring } from '../hooks/useMonitoring';
125+
import { useQueryNamespace } from './hooks/useQueryNamespace';
126126

127127
// Stores information about the currently focused query input
128128
let focusedQuery;
@@ -1278,14 +1278,7 @@ const GraphUnitsDropDown: FC = () => {
12781278
const MetricsPage_: FC = () => {
12791279
const { t } = useTranslation(process.env.I18N_NAMESPACE);
12801280
const [units, setUnits] = useQueryParam(QueryParams.Units, StringParam);
1281-
const [queryNamespace, setQueryNamespace] = useQueryParam(QueryParams.Namespace, StringParam);
1282-
const [activeNamespace, setActiveNamespace] = useActiveNamespace();
1283-
1284-
useEffect(() => {
1285-
if (queryNamespace && activeNamespace !== queryNamespace) {
1286-
setActiveNamespace(queryNamespace);
1287-
}
1288-
}, [queryNamespace, activeNamespace, setActiveNamespace]);
1281+
const { setNamespace } = useQueryNamespace();
12891282

12901283
const dispatch = useDispatch();
12911284

@@ -1368,7 +1361,7 @@ const MetricsPage_: FC = () => {
13681361
<NamespaceBar
13691362
onNamespaceChange={(namespace) => {
13701363
dispatch(queryBrowserDeleteAllQueries());
1371-
setQueryNamespace(namespace);
1364+
setNamespace(namespace);
13721365
}}
13731366
/>
13741367
<ListPageHeader title={t('Metrics')}>
@@ -1427,9 +1420,7 @@ const MetricsPage = withFallback(MetricsPage_);
14271420
export const MpCmoMetricsPage: React.FC = () => {
14281421
return (
14291422
<MonitoringProvider monitoringContext={{ plugin: 'monitoring-plugin', prometheus: 'cmo' }}>
1430-
<QueryParamProvider adapter={ReactRouter5Adapter}>
1431-
<MetricsPage />
1432-
</QueryParamProvider>
1423+
<MetricsPage />
14331424
</MonitoringProvider>
14341425
);
14351426
};

web/src/components/alerting/AlertRulesDetailsPage.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import {
66
PrometheusAlert,
77
ResourceIcon,
88
Timestamp,
9-
useActiveNamespace,
109
useResolvedExtensions,
1110
} from '@openshift-console/dynamic-plugin-sdk';
1211
import {
@@ -69,6 +68,7 @@ import { MonitoringProvider } from '../../contexts/MonitoringContext';
6968

7069
import { DataTestIDs } from '../data-test';
7170
import { useAlerts } from '../../hooks/useAlerts';
71+
import { useQueryNamespace } from '../hooks/useQueryNamespace';
7272

7373
// Renders Prometheus template text and highlights any {{ ... }} tags that it contains
7474
const PrometheusTemplate = ({ text }) => (
@@ -147,7 +147,7 @@ const AlertRulesDetailsPage_: FC = () => {
147147
const { rules, rulesAlertLoading } = useAlerts();
148148

149149
const { perspective } = usePerspective();
150-
const [namespace] = useActiveNamespace();
150+
const { namespace } = useQueryNamespace();
151151

152152
const rule = _.find(rules, { id: params.id });
153153

web/src/components/alerting/AlertingPage.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { useLocation } from 'react-router-dom';
1313
import { AlertResource, RuleResource, SilenceResource } from '../utils';
1414
import { useDispatch } from 'react-redux';
1515
import { alertingClearSelectorData } from '../../store/actions';
16+
import { useQueryNamespace } from '../hooks/useQueryNamespace';
1617

1718
const CmoAlertsPage = lazy(() =>
1819
import(/* webpackChunkName: "CmoAlertsPage" */ './AlertsPage').then((module) => ({
@@ -59,6 +60,7 @@ const AlertingPage: FC = () => {
5960
const dispatch = useDispatch();
6061

6162
const [perspective] = useActivePerspective();
63+
const { setNamespace } = useQueryNamespace();
6264

6365
const { plugin, prometheus } = useMonitoring();
6466

@@ -100,9 +102,10 @@ const AlertingPage: FC = () => {
100102
<>
101103
{namespacedPages.includes(pathname) && (
102104
<NamespaceBar
103-
onNamespaceChange={(namespace) =>
104-
dispatch(alertingClearSelectorData(prometheus, namespace))
105-
}
105+
onNamespaceChange={(namespace) => {
106+
dispatch(alertingClearSelectorData(prometheus, namespace));
107+
setNamespace(namespace);
108+
}}
106109
/>
107110
)}
108111
<ListPageHeader title={t('Alerting')} />

web/src/components/alerting/AlertsDetailsPage.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import {
99
ResourceIcon,
1010
ResourceLink,
1111
Rule,
12-
useActiveNamespace,
1312
useResolvedExtensions,
1413
} from '@openshift-console/dynamic-plugin-sdk';
1514
import * as _ from 'lodash-es';
@@ -90,6 +89,7 @@ import {
9089
import { DataTestIDs } from '../data-test';
9190
import { useAlerts } from '../../hooks/useAlerts';
9291
import { useMonitoring } from '../../hooks/useMonitoring';
92+
import { useQueryNamespace } from '../hooks/useQueryNamespace';
9393

9494
const AlertsDetailsPage_: FC = () => {
9595
const { t } = useTranslation(process.env.I18N_NAMESPACE);
@@ -101,7 +101,7 @@ const AlertsDetailsPage_: FC = () => {
101101

102102
const { alerts, rulesAlertLoading, silences } = useAlerts();
103103

104-
const [namespace] = useActiveNamespace();
104+
const { namespace } = useQueryNamespace();
105105

106106
const hideGraphs = useSelector(
107107
(state: MonitoringState) => !!getObserveState(plugin, state).hideGraphs,

web/src/components/alerting/SilenceCreatePage.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { useTranslation } from 'react-i18next';
33
import { getAllQueryArguments } from '../console/utils/router';
44
import { SilenceForm } from './SilenceForm';
55
import { MonitoringProvider } from '../../contexts/MonitoringContext';
6-
import { useActiveNamespace } from '@openshift-console/dynamic-plugin-sdk';
76
import { ALL_NAMESPACES_KEY } from '../utils';
7+
import { useQueryNamespace } from '../hooks/useQueryNamespace';
88

99
const CreateSilencePage = ({ isNamespaced }: { isNamespaced: boolean }) => {
1010
const { t } = useTranslation(process.env.I18N_NAMESPACE);
@@ -23,11 +23,11 @@ const CreateSilencePage = ({ isNamespaced }: { isNamespaced: boolean }) => {
2323
};
2424

2525
export const MpCmoCreateSilencePage = () => {
26-
const [activeNamespace] = useActiveNamespace();
26+
const { namespace } = useQueryNamespace();
2727

2828
return (
2929
<MonitoringProvider monitoringContext={{ plugin: 'monitoring-plugin', prometheus: 'cmo' }}>
30-
<CreateSilencePage isNamespaced={activeNamespace !== ALL_NAMESPACES_KEY} />
30+
<CreateSilencePage isNamespaced={namespace !== ALL_NAMESPACES_KEY} />
3131
</MonitoringProvider>
3232
);
3333
};

web/src/components/alerting/SilenceForm.tsx

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
1-
import {
2-
consoleFetchJSON,
3-
DocumentTitle,
4-
NamespaceBar,
5-
useActiveNamespace,
6-
} from '@openshift-console/dynamic-plugin-sdk';
1+
import { consoleFetchJSON, NamespaceBar } from '@openshift-console/dynamic-plugin-sdk';
72
import {
83
ActionGroup,
94
Alert,
@@ -54,6 +49,7 @@ import { DataTestIDs } from '../data-test';
5449
import { ALL_NAMESPACES_KEY, getAlertmanagerSilencesUrl } from '../utils';
5550
import { useAlerts } from '../../hooks/useAlerts';
5651
import { useMonitoring } from '../../hooks/useMonitoring';
52+
import { useQueryNamespace } from '../hooks/useQueryNamespace';
5753

5854
const durationOff = '-';
5955

@@ -133,7 +129,7 @@ const NegativeMatcherHelp = () => {
133129

134130
const SilenceForm_: FC<SilenceFormProps> = ({ defaults, Info, title, isNamespaced }) => {
135131
const { t } = useTranslation(process.env.I18N_NAMESPACE);
136-
const [namespace] = useActiveNamespace();
132+
const { namespace } = useQueryNamespace();
137133
const { prometheus } = useMonitoring();
138134
const navigate = useNavigate();
139135

web/src/components/dashboards/legacy/legacy-dashboard-page.tsx

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ import { NamespaceBar, Overview } from '@openshift-console/dynamic-plugin-sdk';
22
import type { FC } from 'react';
33
import { useTranslation } from 'react-i18next';
44
import { useParams } from 'react-router-dom-v5-compat';
5-
import { QueryParamProvider } from 'use-query-params';
6-
import { ReactRouter5Adapter } from 'use-query-params/adapters/react-router-5';
75
import { LoadingInline } from '../../../components/console/console-shared/src/components/loading/LoadingInline';
86
import withFallback from '../../console/console-shared/error/fallbacks/withFallback';
97
import { usePerspective } from '../../hooks/usePerspective';
@@ -62,9 +60,7 @@ export const MpCmoLegacyDashboardsPage: FC = () => {
6260

6361
return (
6462
<MonitoringProvider monitoringContext={{ plugin: 'monitoring-plugin', prometheus: 'cmo' }}>
65-
<QueryParamProvider adapter={ReactRouter5Adapter}>
66-
<LegacyDashboardsPageWithFallback urlBoard={params?.dashboardName} />
67-
</QueryParamProvider>
63+
<LegacyDashboardsPageWithFallback urlBoard={params?.dashboardName} />
6864
</MonitoringProvider>
6965
);
7066
};

web/src/components/dashboards/perses/dashboard-page.tsx

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import { Overview } from '@openshift-console/dynamic-plugin-sdk';
22
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
33
import type { FC } from 'react';
4-
import { QueryParamProvider } from 'use-query-params';
5-
import { ReactRouter5Adapter } from 'use-query-params/adapters/react-router-5';
64
import { LoadingInline } from '../../console/console-shared/src/components/loading/LoadingInline';
75
import { PersesWrapper } from './PersesWrapper';
86
import { DashboardSkeleton } from './dashboard-skeleton';
@@ -65,11 +63,9 @@ const MonitoringDashboardsPage_: FC = () => {
6563

6664
const MonitoringDashboardsPageWrapper: FC = () => {
6765
return (
68-
<QueryParamProvider adapter={ReactRouter5Adapter}>
69-
<QueryClientProvider client={queryClient}>
70-
<MonitoringDashboardsPage_ />
71-
</QueryClientProvider>
72-
</QueryParamProvider>
66+
<QueryClientProvider client={queryClient}>
67+
<MonitoringDashboardsPage_ />
68+
</QueryClientProvider>
7369
);
7470
};
7571

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { useEffect } from 'react';
2+
import { StringParam, useQueryParam } from 'use-query-params';
3+
import { QueryParams } from '../query-params';
4+
import { useActiveNamespace } from '@openshift-console/dynamic-plugin-sdk';
5+
6+
// Utility hook to syncronize the namespace parameter in the URL with the activeNamespace
7+
// the console uses
8+
export const useQueryNamespace = () => {
9+
const [queryNamespace, setQueryNamespace] = useQueryParam(QueryParams.Namespace, StringParam);
10+
const [activeNamespace, setActiveNamespace] = useActiveNamespace();
11+
12+
useEffect(() => {
13+
if (queryNamespace && activeNamespace !== queryNamespace) {
14+
setActiveNamespace(queryNamespace);
15+
}
16+
if (!queryNamespace) {
17+
setQueryNamespace(activeNamespace);
18+
}
19+
}, [queryNamespace, activeNamespace, setActiveNamespace]);
20+
21+
return {
22+
namespace: queryNamespace,
23+
setNamespace: setQueryNamespace,
24+
};
25+
};

web/src/contexts/MonitoringContext.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import React from 'react';
22
import { MonitoringPlugins, Prometheus } from '../components/utils';
3+
import { QueryParamProvider } from 'use-query-params';
4+
import { ReactRouter5Adapter } from 'use-query-params/adapters/react-router-5';
35

46
type MonitoringContextType = {
57
/** Dictates which plugin this code is being run in */
@@ -16,4 +18,8 @@ export const MonitoringContext = React.createContext<MonitoringContextType>({
1618
export const MonitoringProvider: React.FC<{ monitoringContext: MonitoringContextType }> = ({
1719
children,
1820
monitoringContext,
19-
}) => <MonitoringContext.Provider value={monitoringContext}>{children}</MonitoringContext.Provider>;
21+
}) => (
22+
<MonitoringContext.Provider value={monitoringContext}>
23+
<QueryParamProvider adapter={ReactRouter5Adapter}>{children}</QueryParamProvider>
24+
</MonitoringContext.Provider>
25+
);

0 commit comments

Comments
 (0)