Skip to content

Commit 512bf55

Browse files
authored
Wdvr/darkmode fix queuetime dark mode colors (#6562)
Before: <img width="1549" alt="image" src="https://github.com/user-attachments/assets/7cc02904-17b5-4818-9abe-6f148ac106ca" /> After: <img width="1462" alt="image" src="https://github.com/user-attachments/assets/3a8aed2d-07b3-4237-b754-f0f40467ddec" />
1 parent 82469dc commit 512bf55

File tree

3 files changed

+99
-65
lines changed

3 files changed

+99
-65
lines changed

torchci/components/queueTimeAnalysis/components/charts/QueueTimeCharts.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import LoadingPage from "components/LoadingPage";
33
import ToggleIconPicker, {
44
ToggleIconPickerContent,
55
} from "components/metrics/pickers/ToggleIconPicker";
6+
import { useDarkMode } from "lib/DarkModeContext";
67
import { encodeParams, fetcherCatchErrorStatus } from "lib/GeneralUtils";
78
import { useState } from "react";
89
import { BiLineChart } from "react-icons/bi";
@@ -48,6 +49,7 @@ export default function QueueTimeCharts({
4849
width?: number;
4950
}) {
5051
const [chartType, setChartType] = useState<any>("heatmap");
52+
const { darkMode } = useDarkMode();
5153

5254
const { data, error, isLoading } = useQueryWithError(props);
5355
if (isLoading) {

torchci/components/queueTimeAnalysis/components/charts/QueueTimeEchartElement.tsx

Lines changed: 95 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import dayjs from "dayjs";
22
import isoWeek from "dayjs/plugin/isoWeek";
33
import * as echarts from "echarts";
4+
import { useDarkMode } from "lib/DarkModeContext";
5+
import darkThemeHud from "lib/chartTheme";
46
import { useEffect, useRef, useState } from "react";
57

68
dayjs.extend(isoWeek);
@@ -28,6 +30,7 @@ export function QueueTimeEchartElement({
2830
const chartRef = useRef(null); // Create a ref for the chart container
2931
const chartInstanceRef = useRef<echarts.EChartsType | null>(null);
3032
const [rawData, setRawData] = useState<any>(null);
33+
const { darkMode } = useDarkMode();
3134

3235
const queue_axis_value = generateExponential();
3336

@@ -41,14 +44,23 @@ export function QueueTimeEchartElement({
4144
setRawData(data);
4245
}, [data, granularity]);
4346

47+
// Initialize chart instance and handle resize events
4448
useEffect(() => {
4549
if (!chartRef.current) return;
4650

47-
// Prevent duplicate init
48-
echarts.dispose(chartRef.current);
49-
const instance = echarts.init(chartRef.current);
51+
// Dispose of any existing chart instance
52+
if (chartInstanceRef.current) {
53+
chartInstanceRef.current.dispose();
54+
}
55+
56+
// Create new chart with appropriate theme
57+
const instance = echarts.init(
58+
chartRef.current,
59+
darkMode ? darkThemeHud : undefined
60+
);
5061
chartInstanceRef.current = instance;
5162

63+
// Set up resize handlers
5264
const handleResize = () => {
5365
instance.resize();
5466
};
@@ -59,77 +71,30 @@ export function QueueTimeEchartElement({
5971
});
6072
resizeObserver.observe(chartRef.current);
6173

74+
// If we have data already, update the chart
75+
if (rawData && rawData.length > 0) {
76+
updateChart(instance, rawData, chartType, granularity, queue_axis_value);
77+
}
78+
6279
return () => {
6380
resizeObserver.disconnect();
6481
window.removeEventListener("resize", handleResize);
6582
instance.dispose();
6683
};
67-
}, []);
84+
}, [darkMode]);
6885

86+
// Update chart options when data or chart type changes
6987
useEffect(() => {
7088
if (!rawData || rawData.length === 0 || !chartInstanceRef.current) return;
71-
const instance = chartInstanceRef.current;
72-
73-
if (rawData.length == 0) {
74-
return;
75-
}
7689

77-
const startTime = getTruncTime(dayjs(rawData[0].time), granularity);
78-
const endTime = getTruncTime(
79-
dayjs(rawData[rawData.length - 1].time),
80-
granularity
81-
);
82-
const chartData = generateFilledTimeSeries(
83-
startTime,
84-
endTime,
90+
updateChart(
91+
chartInstanceRef.current,
8592
rawData,
86-
granularity
93+
chartType,
94+
granularity,
95+
queue_axis_value
8796
);
88-
const timeDates = generateTimePoints(startTime, endTime, granularity);
89-
90-
let chartRenderOptions = {};
91-
switch (chartType) {
92-
case "heatmap":
93-
chartRenderOptions = getHeatMapOptions(
94-
chartData,
95-
queue_axis_value,
96-
timeDates
97-
);
98-
break;
99-
case "histogram_bar_vertical":
100-
const aggre_hist = sumArrayValues(rawData);
101-
chartRenderOptions = getBarOptions(aggre_hist, queue_axis_value);
102-
break;
103-
case "histogram_bar_horizontal":
104-
const aggre_hist_bar = sumArrayValues(rawData);
105-
chartRenderOptions = getBarChartHorizontal(
106-
aggre_hist_bar,
107-
queue_axis_value
108-
);
109-
break;
110-
case "count_job_line":
111-
const jobCountData = generateFilledTimeSeriesLine(
112-
startTime,
113-
endTime,
114-
rawData,
115-
granularity,
116-
"total_count"
117-
);
118-
chartRenderOptions = getLineChart(jobCountData, timeDates);
119-
break;
120-
case "max_queue_time_line":
121-
const maxQueueTimeData = generateFilledTimeSeriesLine(
122-
startTime,
123-
endTime,
124-
rawData,
125-
granularity,
126-
"max_queue_time"
127-
);
128-
chartRenderOptions = getLineChart(maxQueueTimeData, timeDates);
129-
break;
130-
}
131-
instance.setOption(chartRenderOptions, true);
132-
}, [rawData, chartType]);
97+
}, [rawData, chartType, granularity]);
13398

13499
const height = queue_axis_value.length * 10;
135100
return (
@@ -144,6 +109,73 @@ export function QueueTimeEchartElement({
144109
);
145110
}
146111

112+
// Extracted chart update logic to avoid code duplication
113+
function updateChart(
114+
instance: echarts.EChartsType,
115+
rawData: any[],
116+
chartType: string,
117+
granularity: string,
118+
queue_axis_value: string[]
119+
) {
120+
if (rawData.length === 0) return;
121+
122+
const startTime = getTruncTime(dayjs(rawData[0].time), granularity);
123+
const endTime = getTruncTime(
124+
dayjs(rawData[rawData.length - 1].time),
125+
granularity
126+
);
127+
const chartData = generateFilledTimeSeries(
128+
startTime,
129+
endTime,
130+
rawData,
131+
granularity
132+
);
133+
const timeDates = generateTimePoints(startTime, endTime, granularity);
134+
135+
let chartRenderOptions = {};
136+
switch (chartType) {
137+
case "heatmap":
138+
chartRenderOptions = getHeatMapOptions(
139+
chartData,
140+
queue_axis_value,
141+
timeDates
142+
);
143+
break;
144+
case "histogram_bar_vertical":
145+
const aggre_hist = sumArrayValues(rawData);
146+
chartRenderOptions = getBarOptions(aggre_hist, queue_axis_value);
147+
break;
148+
case "histogram_bar_horizontal":
149+
const aggre_hist_bar = sumArrayValues(rawData);
150+
chartRenderOptions = getBarChartHorizontal(
151+
aggre_hist_bar,
152+
queue_axis_value
153+
);
154+
break;
155+
case "count_job_line":
156+
const jobCountData = generateFilledTimeSeriesLine(
157+
startTime,
158+
endTime,
159+
rawData,
160+
granularity,
161+
"total_count"
162+
);
163+
chartRenderOptions = getLineChart(jobCountData, timeDates);
164+
break;
165+
case "max_queue_time_line":
166+
const maxQueueTimeData = generateFilledTimeSeriesLine(
167+
startTime,
168+
endTime,
169+
rawData,
170+
granularity,
171+
"max_queue_time"
172+
);
173+
chartRenderOptions = getLineChart(maxQueueTimeData, timeDates);
174+
break;
175+
}
176+
instance.setOption(chartRenderOptions, true);
177+
}
178+
147179
const getLineChart = (data: any[], xAxisLabels: string[]) => {
148180
return {
149181
tooltip: {

torchci/components/queueTimeAnalysis/components/searchBarItems/QueueTimeCheckBoxList.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ const HelperContent = styled("div")(({}) => ({
3535
const dynamicStyles = {
3636
height: "800px",
3737
overflowY: "auto", // Dynamically set overflow
38-
backgroundColor: "#f0f0f0",
38+
backgroundColor: "var(--dropdown-bg)",
3939
"&::-webkit-scrollbar": {
4040
width: "8px",
4141
},
@@ -44,7 +44,7 @@ const dynamicStyles = {
4444
borderRadius: "10px",
4545
},
4646
"&::-webkit-scrollbar-track": {
47-
background: "#ccc",
47+
background: "var(--border-color)",
4848
},
4949
};
5050

0 commit comments

Comments
 (0)