Skip to content

Commit 565023d

Browse files
fix: respond to PR comments
1 parent 5e3cb04 commit 565023d

6 files changed

Lines changed: 23 additions & 27 deletions

File tree

web/src/components/MetricsPage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1139,7 +1139,7 @@ const QueryBrowserWrapper: FC<{
11391139
const newParams = new URLSearchParams(queryParams);
11401140
queryStrings.forEach((query, i) => newParams.set(`query${i}`, query || ''));
11411141
if (customDataSourceName) {
1142-
newParams.set('datasource', customDataSourceName);
1142+
newParams.set(QueryParams.Datasource, customDataSourceName);
11431143
}
11441144
setQueryParams(newParams);
11451145
}, [queryStrings, customDataSourceName, isFirstRender, queryParams]);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ const QueryBrowserLink = ({
7272
}
7373

7474
if (customDataSourceName) {
75-
params.set('datasource', customDataSourceName);
75+
params.set(QueryParams.Datasource, customDataSourceName);
7676
}
7777

7878
return (

web/src/components/dashboards/perses/hooks/useDashboardsData.ts

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
import { useMemo, useCallback, useState } from 'react';
1+
/* eslint-disable react-hooks/refs */
2+
import { useMemo, useCallback, useRef } from 'react';
23

34
import { DashboardResource } from '@perses-dev/core';
4-
import { useNavigate, useSearchParams } from 'react-router';
55
import { StringParam, useQueryParam } from 'use-query-params';
66
import { useBoolean } from '../../../hooks/useBoolean';
77
import { getDashboardUrl, usePerspective } from '../../../hooks/usePerspective';
88
import { QueryParams } from '../../../query-params';
99
import { useActiveProject } from '../project/useActiveProject';
1010
import { usePerses } from './usePerses';
11+
import { useNavigate, useSearchParams } from 'react-router';
1112
import { ALL_NAMESPACES_KEY } from '../../../utils';
1213

1314
// This hook syncs with mutliple external API's, redux, and URL state. Its a lot, but needs to all
@@ -40,8 +41,8 @@ export const useDashboardsData = () => {
4041
return true;
4142
}, [persesProjectsLoading, persesDashboardsLoading, initialPageLoad, setInitialPageLoadFalse]);
4243

43-
const [prevDashboards, setPreviousDashboards] = useState<DashboardResource[]>([]);
44-
const [prevMetadata, setPreviousMetadata] = useState<CombinedDashboardMetadata[]>([]);
44+
const prevDashboardsRef = useRef<DashboardResource[]>([]);
45+
const prevMetadataRef = useRef<CombinedDashboardMetadata[]>([]);
4546

4647
// Homogenize data needed for dashboards dropdown between legacy and perses dashboards
4748
// to enable both to use the same component
@@ -52,18 +53,18 @@ export const useDashboardsData = () => {
5253

5354
// Check if dashboards data has actually changed to avoid recreation
5455
const dashboardsChanged =
55-
persesDashboards.length !== prevDashboards.length ||
56+
persesDashboards.length !== prevDashboardsRef.current.length ||
5657
persesDashboards.some((dashboard, i) => {
57-
const prevDashboard = prevDashboards[i];
58+
const prevDashboard = prevDashboardsRef.current[i];
5859
return (
5960
dashboard?.metadata?.name !== prevDashboard?.metadata?.name ||
6061
dashboard?.spec?.display?.name !== prevDashboard?.spec?.display?.name ||
6162
dashboard?.metadata?.project !== prevDashboard?.metadata?.project
6263
);
6364
});
6465

65-
if (!dashboardsChanged && prevMetadata.length > 0) {
66-
return prevMetadata;
66+
if (!dashboardsChanged && prevMetadataRef.current.length > 0) {
67+
return prevMetadataRef.current;
6768
}
6869

6970
const newMetadata = persesDashboards.map((persesDashboard) => {
@@ -79,17 +80,10 @@ export const useDashboardsData = () => {
7980
};
8081
});
8182

82-
setPreviousDashboards(persesDashboards);
83-
setPreviousMetadata(newMetadata);
83+
prevDashboardsRef.current = persesDashboards;
84+
prevMetadataRef.current = newMetadata;
8485
return newMetadata;
85-
}, [
86-
persesDashboards,
87-
combinedInitialLoad,
88-
prevDashboards,
89-
prevMetadata,
90-
setPreviousDashboards,
91-
setPreviousMetadata,
92-
]);
86+
}, [persesDashboards, combinedInitialLoad]);
9387

9488
// Retrieve dashboard metadata for the currently selected project
9589
const activeProjectDashboardsMetadata = useMemo<CombinedDashboardMetadata[]>(() => {
@@ -107,10 +101,9 @@ export const useDashboardsData = () => {
107101
// If the board is being cleared then don't do anything
108102
return;
109103
}
110-
111104
const params = new URLSearchParams(queryParams);
112105

113-
params.delete('edit');
106+
params.delete(QueryParams.Edit);
114107

115108
const dashboard = combinedDashboardsMetadata.find((item) => item.name === newBoard);
116109

web/src/components/dashboards/perses/project/ProjectBar.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { KEYBOARD_SHORTCUTS } from './utils';
33
import ProjectDropdown from './ProjectDropdown';
44
import { getDashboardsListUrl, usePerspective } from '../../../hooks/usePerspective';
55
import { useNavigate } from 'react-router';
6+
import { QueryParams } from '../../../query-params';
67

78
export type ProjectBarProps = {
89
activeProject: string | null;
@@ -18,7 +19,7 @@ export const ProjectBar: FC<ProjectBarProps> = ({ activeProject }) => {
1819
<ProjectDropdown
1920
onSelect={(event, newProject) => {
2021
const params = new URLSearchParams();
21-
params.set('project', newProject);
22+
params.set(QueryParams.Project, newProject);
2223
const url = `${getDashboardsListUrl(perspective)}?${params.toString()}`;
2324
navigate(url);
2425
}}

web/src/components/query-browser.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/* eslint-disable react-hooks/refs */
12
import {
23
PrometheusEndpoint,
34
PrometheusLabels,
@@ -45,7 +46,7 @@ import { ChartLineIcon } from '@patternfly/react-icons';
4546
import classNames from 'classnames';
4647
import * as _ from 'lodash-es';
4748
import type { FC, Ref, ReactNode, KeyboardEvent, MouseEvent, ComponentType } from 'react';
48-
import { memo, useState, useEffect, useCallback, useLayoutEffect } from 'react';
49+
import { memo, useState, useEffect, useCallback, useLayoutEffect, useRef } from 'react';
4950
import { useTranslation } from 'react-i18next';
5051
import { useDispatch, useSelector } from 'react-redux';
5152

@@ -641,7 +642,7 @@ const QueryBrowser_: FC<QueryBrowserProps> = ({
641642
const [samples, setSamples] = useState(maxSamplesForSpan);
642643
const [updating, setUpdating] = useState(true);
643644
// Track if we ever received valid data to prevent flickering "No datapoints" during refresh
644-
const [hasReceivedData, , setReceivedData] = useBoolean(false);
645+
const hasReceivedData = useRef(false);
645646

646647
useEffect(() => {
647648
onLoadingChange?.(updating);
@@ -818,7 +819,7 @@ const QueryBrowser_: FC<QueryBrowserProps> = ({
818819
onDataChange?.(newGraphData);
819820
// Mark that we've received valid data to prevent flickering during refresh
820821
if (newGraphData && newGraphData.some((d) => d.length > 0)) {
821-
setReceivedData();
822+
hasReceivedData.current = true;
822823
}
823824

824825
setIsDisconnectedEnabled(dataIsDisconnected);
@@ -1026,7 +1027,7 @@ const QueryBrowser_: FC<QueryBrowserProps> = ({
10261027
data-test={DataTestIDs.MetricGraph}
10271028
>
10281029
{error && <Error error={error} />}
1029-
{isGraphDataEmpty && !(hideControls && updating && hasReceivedData) ? (
1030+
{isGraphDataEmpty && !(hideControls && updating && hasReceivedData.current) ? (
10301031
<GraphEmpty loading={updating} />
10311032
) : (
10321033
<>

web/src/components/query-params.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ export enum QueryParams {
1212
OpenshiftProject = 'project-dropdown-value',
1313
Refresh = 'refresh',
1414
Start = 'start',
15+
Edit = 'edit',
1516
}

0 commit comments

Comments
 (0)