@@ -168,8 +168,34 @@ const vehicleDatasets = computed(() =>
168
168
dataset !== undefined ,
169
169
),
170
170
);
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
+
171
196
const lineChartData = computed (() => {
172
197
return {
198
+ labels: chartLabels .value ,
173
199
datasets: [
174
200
{
175
201
label: gridMeterName .value ,
@@ -290,31 +316,7 @@ const chartOptions = computed<ChartOptions<'line'>>(() => ({
290
316
},
291
317
ticks: {
292
318
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 ,
318
320
},
319
321
grid: {
320
322
tickLength: 5 ,
0 commit comments