Skip to content

Commit ed51b0e

Browse files
committed
fix: simplify charts check
1 parent 462358a commit ed51b0e

File tree

2 files changed

+41
-34
lines changed

2 files changed

+41
-34
lines changed

src/components/QueriesActivityBar/QueriesActivityBar.tsx

Lines changed: 6 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ import {TenantTabsGroups, getTenantPath} from '../../containers/Tenant/TenantPag
88
import {parseQuery} from '../../routes';
99
import {TENANT_DIAGNOSTICS_TABS_IDS} from '../../store/reducers/tenant/constants';
1010
import {cn} from '../../utils/cn';
11-
import type {ChartDataStatus} from '../MetricChart/types';
1211

1312
import {QueriesActivityAlert} from './QueriesActivityAlert';
1413
import {QueriesActivityCharts} from './QueriesActivityCharts';
1514
import {QueriesActivitySkeleton} from './QueriesActivitySkeleton';
1615
import i18n from './i18n';
16+
import {useChartAvailability} from './useChartAvailability';
1717
import {useQueriesActivityData} from './useQueriesActivityData';
1818
import {formatTrendValue} from './utils';
1919

@@ -29,25 +29,13 @@ export function QueriesActivityBar({tenantName}: QueriesActivityBarProps) {
2929
const history = useHistory();
3030
const location = useLocation();
3131
const [expanded, setExpanded] = React.useState(false);
32-
const [areChartsAvailable, setAreChartsAvailable] = React.useState<boolean | null>(null);
32+
33+
// Check chart availability without rendering hidden components
34+
const areChartsAvailable = useChartAvailability(tenantName);
3335

3436
const {runningQueriesCount, uniqueApplications, uniqueUsers, qps, latency} =
3537
useQueriesActivityData(tenantName);
3638

37-
/**
38-
* Activity bar should show different modes based on chart availability:
39-
* 1. If charts are available: show expandable mode with charts
40-
* 2. If charts are not available: show compact alert-style mode with stats only
41-
* 3. While determining chart availability: show skeleton loading state
42-
*/
43-
const handleChartDataStatusChange = React.useCallback((chartStatus: ChartDataStatus) => {
44-
if (chartStatus === 'success') {
45-
setAreChartsAvailable(true);
46-
} else if (chartStatus === 'error') {
47-
setAreChartsAvailable(false);
48-
}
49-
}, []);
50-
5139
const handleOpenRunningQueries = () => {
5240
const queryParams = parseQuery(location);
5341
const path = getTenantPath({
@@ -64,19 +52,7 @@ export function QueriesActivityBar({tenantName}: QueriesActivityBarProps) {
6452

6553
// Show skeleton while determining chart availability
6654
if (areChartsAvailable === null) {
67-
return (
68-
<>
69-
{/* Hidden chart check to determine availability */}
70-
<div style={{display: 'none'}}>
71-
<QueriesActivityCharts
72-
tenantName={tenantName}
73-
expanded={false}
74-
onChartDataStatusChange={handleChartDataStatusChange}
75-
/>
76-
</div>
77-
<QueriesActivitySkeleton />
78-
</>
79-
);
55+
return <QueriesActivitySkeleton />;
8056
}
8157

8258
// Render compact alert-style mode when charts are not available
@@ -180,11 +156,7 @@ export function QueriesActivityBar({tenantName}: QueriesActivityBarProps) {
180156
</div>
181157
</div>
182158
)}
183-
<QueriesActivityCharts
184-
tenantName={tenantName}
185-
expanded={expanded}
186-
onChartDataStatusChange={handleChartDataStatusChange}
187-
/>
159+
<QueriesActivityCharts tenantName={tenantName} expanded={expanded} />
188160
</Card>
189161
</div>
190162
);
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import React from 'react';
2+
3+
import {chartApi} from '../MetricChart/reducer';
4+
5+
/**
6+
* Hook to check if chart API is available without rendering full chart components.
7+
* Makes a minimal test query to determine if charts are supported.
8+
*/
9+
export function useChartAvailability(tenantName: string): boolean | null {
10+
const [isAvailable, setIsAvailable] = React.useState<boolean | null>(null);
11+
12+
// Make a minimal chart query to test availability
13+
const {isSuccess, isError} = chartApi.useGetChartDataQuery(
14+
{
15+
database: tenantName,
16+
metrics: [{target: 'queries.requests'}],
17+
timeFrame: '30m', // Smallest valid time frame
18+
maxDataPoints: 2, // Minimal data points
19+
},
20+
{
21+
// Skip if we already know the result
22+
skip: isAvailable !== null,
23+
},
24+
);
25+
26+
React.useEffect(() => {
27+
if (isSuccess) {
28+
setIsAvailable(true);
29+
} else if (isError) {
30+
setIsAvailable(false);
31+
}
32+
}, [isSuccess, isError]);
33+
34+
return isAvailable;
35+
}

0 commit comments

Comments
 (0)