Skip to content

Commit 64cf1de

Browse files
committed
fix: better code
1 parent 2025887 commit 64cf1de

File tree

4 files changed

+24
-65
lines changed

4 files changed

+24
-65
lines changed

src/components/MetricChart/MetricChart.tsx

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -107,18 +107,18 @@ const emptyChartData: PreparedMetricsData = {timeline: [], metrics: []};
107107

108108
interface DiagnosticsChartProps {
109109
database: string;
110-
111110
metrics: MetricDescription[];
112-
timeFrame: TimeFrame;
113-
onTimeFrameChange: (timeFrame: TimeFrame) => void;
114111

115-
autorefresh?: number;
112+
/** Default timeframe for uncontrolled usage */
113+
defaultTimeFrame?: TimeFrame;
116114

115+
/** Callback for timeframe changes - required when using controlled mode */
116+
onTimeFrameChange?: (timeFrame: TimeFrame) => void;
117+
118+
autorefresh?: number;
117119
height?: number;
118120
width?: number;
119-
120121
chartOptions?: ChartOptions;
121-
122122
onChartDataStatusChange?: OnChartDataStatusChange;
123123

124124
/**
@@ -135,8 +135,7 @@ interface DiagnosticsChartProps {
135135
export const MetricChart = ({
136136
database,
137137
metrics,
138-
timeFrame,
139-
onTimeFrameChange,
138+
defaultTimeFrame = '1h',
140139
autorefresh,
141140
width = 400,
142141
height = width / 1.5,
@@ -145,6 +144,8 @@ export const MetricChart = ({
145144
isChartVisible,
146145
title,
147146
}: DiagnosticsChartProps) => {
147+
const [timeFrame, setTimeFrame] = React.useState<TimeFrame>(defaultTimeFrame);
148+
148149
// Use a reasonable default for maxDataPoints when fullWidth is true
149150
const maxDataPoints = DEFAULT_EFFECTIVE_WIDTH / 2;
150151

@@ -172,7 +173,7 @@ export const MetricChart = ({
172173
const renderToolbar = () => (
173174
<Flex className={b('toolbar')} justifyContent="space-between" alignItems="center">
174175
<div>{title}</div>
175-
<TimeFrameDropdown value={timeFrame} onChange={onTimeFrameChange} />
176+
<TimeFrameDropdown value={timeFrame} onChange={setTimeFrame} />
176177
</Flex>
177178
);
178179

src/components/QueriesActivityBar/QueriesActivityCharts.tsx

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import React from 'react';
33
import {defaultDashboardConfig} from '../../containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/defaultDashboardConfig';
44
import {cn} from '../../utils/cn';
55
import {useAutoRefreshInterval} from '../../utils/hooks';
6-
import type {TimeFrame} from '../../utils/timeframes';
76
import {MetricChart} from '../MetricChart/MetricChart';
87
import type {ChartDataStatus} from '../MetricChart/types';
98

@@ -23,8 +22,6 @@ export function QueriesActivityCharts({
2322
onChartDataStatusChange,
2423
}: QueriesActivityChartsProps) {
2524
const [autoRefreshInterval] = useAutoRefreshInterval();
26-
const [queriesTimeFrame, setQueriesTimeFrame] = React.useState<TimeFrame>('1h');
27-
const [latenciesTimeFrame, setLatenciesTimeFrame] = React.useState<TimeFrame>('1h');
2825
const [hasChartsLoaded, setHasChartsLoaded] = React.useState(false);
2926

3027
// Extract chart configurations from defaultDashboardConfig
@@ -57,14 +54,6 @@ export function QueriesActivityCharts({
5754
[onChartDataStatusChange],
5855
);
5956

60-
const handleQueriesTimeFrameChange = React.useCallback((newTimeFrame: TimeFrame) => {
61-
setQueriesTimeFrame(newTimeFrame);
62-
}, []);
63-
64-
const handleLatenciesTimeFrameChange = React.useCallback((newTimeFrame: TimeFrame) => {
65-
setLatenciesTimeFrame(newTimeFrame);
66-
}, []);
67-
6857
// WORKAROUND: Charts are rendered outside Disclosure component due to YAGR tooltip bug
6958
// Issue: https://github.com/gravity-ui/yagr/issues/262
7059

@@ -80,8 +69,6 @@ export function QueriesActivityCharts({
8069
<MetricChart
8170
database={tenantName}
8271
metrics={queriesChartConfig.metrics}
83-
timeFrame={queriesTimeFrame}
84-
onTimeFrameChange={handleQueriesTimeFrameChange}
8572
autorefresh={shouldRefresh}
8673
height={ACTIVITY_CHART_HEIGHT}
8774
chartOptions={queriesChartConfig.options}
@@ -95,8 +82,6 @@ export function QueriesActivityCharts({
9582
<MetricChart
9683
database={tenantName}
9784
metrics={latenciesChartConfig.metrics}
98-
timeFrame={latenciesTimeFrame}
99-
onTimeFrameChange={handleLatenciesTimeFrameChange}
10085
autorefresh={shouldRefresh}
10186
height={ACTIVITY_CHART_HEIGHT}
10287
chartOptions={latenciesChartConfig.options}

src/containers/Tenant/Diagnostics/TenantOverview/TabCard/index.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.tsx

Lines changed: 14 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import type {
88
} from '../../../../../components/MetricChart';
99
import {cn} from '../../../../../utils/cn';
1010
import {useAutoRefreshInterval} from '../../../../../utils/hooks';
11-
import type {TimeFrame} from '../../../../../utils/timeframes';
1211

1312
import './TenantDashboard.scss';
1413

@@ -30,17 +29,6 @@ interface TenantDashboardProps {
3029

3130
export const TenantDashboard = ({database, charts}: TenantDashboardProps) => {
3231
const [isDashboardHidden, setIsDashboardHidden] = React.useState<boolean>(true);
33-
34-
// Each chart has its own timeframe state
35-
const [chartTimeFrames, setChartTimeFrames] = React.useState<Record<string, TimeFrame>>(() => {
36-
const initialTimeFrames: Record<string, TimeFrame> = {};
37-
charts.forEach((chartConfig) => {
38-
const chartId = chartConfig.metrics.map(({target}) => target).join('&');
39-
initialTimeFrames[chartId] = '1h';
40-
});
41-
return initialTimeFrames;
42-
});
43-
4432
const [autoRefreshInterval] = useAutoRefreshInterval();
4533

4634
// Refetch data only if dashboard successfully loaded
@@ -65,35 +53,21 @@ export const TenantDashboard = ({database, charts}: TenantDashboardProps) => {
6553
const chartWidth = charts.length === 1 ? CHART_WIDTH_FULL : CHART_WIDTH;
6654
const chartHeight = CHART_WIDTH / 1.5;
6755

68-
const handleTimeFrameChange = React.useCallback((chartId: string, newTimeFrame: TimeFrame) => {
69-
setChartTimeFrames((prev) => ({
70-
...prev,
71-
[chartId]: newTimeFrame,
72-
}));
73-
}, []);
74-
7556
const renderContent = () => {
76-
return charts.map((chartConfig) => {
77-
const chartId = chartConfig.metrics.map(({target}) => target).join('&');
78-
return (
79-
<MetricChart
80-
key={chartId}
81-
database={database}
82-
metrics={chartConfig.metrics}
83-
timeFrame={chartTimeFrames[chartId] || '1h'}
84-
onTimeFrameChange={(newTimeFrame) =>
85-
handleTimeFrameChange(chartId, newTimeFrame)
86-
}
87-
chartOptions={chartConfig.options}
88-
autorefresh={shouldRefresh}
89-
width={chartWidth}
90-
height={chartHeight}
91-
onChartDataStatusChange={handleChartDataStatusChange}
92-
isChartVisible={!isDashboardHidden}
93-
title={chartConfig.title}
94-
/>
95-
);
96-
});
57+
return charts.map((chartConfig, index) => (
58+
<MetricChart
59+
key={index}
60+
database={database}
61+
metrics={chartConfig.metrics}
62+
chartOptions={chartConfig.options}
63+
autorefresh={shouldRefresh}
64+
width={chartWidth}
65+
height={chartHeight}
66+
onChartDataStatusChange={handleChartDataStatusChange}
67+
isChartVisible={!isDashboardHidden}
68+
title={chartConfig.title}
69+
/>
70+
));
9771
};
9872

9973
return (

0 commit comments

Comments
 (0)