Skip to content

Commit a6b26dc

Browse files
authored
Merge pull request #2739 from benderl/fixes
rewrite koala history chart x-axis labels
2 parents 401403c + bdc31b2 commit a6b26dc

File tree

1 file changed

+27
-25
lines changed
  • packages/modules/web_themes/koala/source/src/components/charts/historyChart

1 file changed

+27
-25
lines changed

packages/modules/web_themes/koala/source/src/components/charts/historyChart/HistoryChart.vue

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,34 @@ const vehicleDatasets = computed(() =>
168168
dataset !== undefined,
169169
),
170170
);
171+
172+
const chartLabels = computed(() => {
173+
const minTimestamp = selectedData.value.length
174+
? selectedData.value[0].timestamp
175+
: Math.floor(Date.now() / 1000) - chartRange.value;
176+
const maxTimestamp = selectedData.value.length
177+
? selectedData.value[selectedData.value.length - 1].timestamp
178+
: Math.floor(Date.now() / 1000);
179+
const dataRange = maxTimestamp - minTimestamp;
180+
let range = 300; // 5 Minuten
181+
if (dataRange <= 30 * 60) { // bis 15 Minuten
182+
range = 60; // 1 Minute
183+
} else if (dataRange <= 60 * 60) { // bis 30 Minuten
184+
range = 120; // 2 Minuten
185+
}
186+
187+
const calculatedLabels = <number[]>[];
188+
let first = minTimestamp - (minTimestamp % range);
189+
if (first < minTimestamp) first += range;
190+
for (let t = first; t <= maxTimestamp; t += range) {
191+
calculatedLabels.push(t * 1000);
192+
}
193+
return calculatedLabels;
194+
});
195+
171196
const lineChartData = computed(() => {
172197
return {
198+
labels: chartLabels.value,
173199
datasets: [
174200
{
175201
label: gridMeterName.value,
@@ -290,31 +316,7 @@ const chartOptions = computed<ChartOptions<'line'>>(() => ({
290316
},
291317
ticks: {
292318
maxTicksLimit: 40,
293-
source: 'data' as const,
294-
callback: (value) => {
295-
const formatTimestamp = (date: Date): string => {
296-
return date.toLocaleTimeString([], {
297-
hour: '2-digit',
298-
minute: '2-digit',
299-
});
300-
};
301-
// value is timestamp in ms
302-
const date = new Date(value as number);
303-
const minutes = date.getMinutes();
304-
const seconds = date.getSeconds();
305-
// only display rounded minutes
306-
if (seconds < 10) {
307-
if (chartRange.value <= 2700)
308-
// if chart range is 45min or less, show every minute
309-
// is limited by maxTicksLimit if too many points
310-
return formatTimestamp(date);
311-
if (minutes % 5 === 0) {
312-
// show every 5 minutes
313-
return formatTimestamp(date);
314-
}
315-
}
316-
return;
317-
},
319+
source: 'labels' as const,
318320
},
319321
grid: {
320322
tickLength: 5,

0 commit comments

Comments
 (0)