@c8y/ngx-components 1022.16.2 → 1022.21.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/asset-property/asset-property.model.d.ts +0 -8
- package/core/asset-property/asset-property.model.d.ts.map +1 -1
- package/core/authentication/new-password.component.d.ts +3 -2
- package/core/authentication/new-password.component.d.ts.map +1 -1
- package/core/modal/modal.service.d.ts +1 -0
- package/core/modal/modal.service.d.ts.map +1 -1
- package/core/user/user-edit-modal.component.d.ts +1 -0
- package/core/user/user-edit-modal.component.d.ts.map +1 -1
- package/core/user/user-edit.component.d.ts +4 -1
- package/core/user/user-edit.component.d.ts.map +1 -1
- package/datapoint-explorer/datapoint-explorer.module.d.ts +2 -0
- package/datapoint-explorer/datapoint-explorer.module.d.ts.map +1 -1
- package/datapoint-explorer/devicemanagement/c8y-ngx-components-datapoint-explorer-devicemanagement.d.ts.map +1 -0
- package/datapoint-explorer/devicemanagement/index.d.ts +2 -0
- package/datapoint-explorer/devicemanagement/index.d.ts.map +1 -0
- package/datapoint-explorer/view/datapoint-explorer.component.d.ts +6 -3
- package/datapoint-explorer/view/datapoint-explorer.component.d.ts.map +1 -1
- package/datapoint-explorer/view/datapoint-explorer.model.d.ts +8 -0
- package/datapoint-explorer/view/datapoint-explorer.model.d.ts.map +1 -0
- package/datapoint-explorer/view/index.d.ts +1 -0
- package/datapoint-explorer/view/index.d.ts.map +1 -1
- package/echart/services/chart-realtime.service.d.ts +2 -0
- package/echart/services/chart-realtime.service.d.ts.map +1 -1
- package/echart/services/echarts-options.service.d.ts +4 -4
- package/echart/services/echarts-options.service.d.ts.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer-devicemanagement.mjs +38 -0
- package/fesm2022/c8y-ngx-components-datapoint-explorer-devicemanagement.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +143 -142
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-echart.mjs +53 -17
- package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-time-context.mjs +12 -5
- package/fesm2022/c8y-ngx-components-time-context.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +2 -2
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +4 -4
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +1152 -1128
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +25 -24
- package/locales/es.po +6 -3
- package/locales/fr.po +36 -33
- package/locales/ja_JP.po +75 -70
- package/locales/ko.po +6 -3
- package/locales/locales.pot +6 -15
- package/locales/nl.po +6 -3
- package/locales/pl.po +6 -3
- package/locales/pt_BR.po +6 -3
- package/locales/zh_CN.po +6 -3
- package/locales/zh_TW.po +6 -3
- package/package.json +1 -1
- package/time-context/index.d.ts +1 -0
- package/time-context/index.d.ts.map +1 -1
- package/time-context/time-context.component.d.ts +6 -3
- package/time-context/time-context.component.d.ts.map +1 -1
- package/time-context/time-context.model.d.ts +10 -0
- package/time-context/time-context.model.d.ts.map +1 -0
- package/time-context/time-context.service.d.ts +2 -6
- package/time-context/time-context.service.d.ts.map +1 -1
- package/device-parameters/c8y-ngx-components-device-parameters.d.ts.map +0 -1
- package/device-parameters/device-parameter-details.component.d.ts +0 -22
- package/device-parameters/device-parameter-details.component.d.ts.map +0 -1
- package/device-parameters/device-parameter-value.component.d.ts +0 -12
- package/device-parameters/device-parameter-value.component.d.ts.map +0 -1
- package/device-parameters/device-parameters-list.component.d.ts +0 -23
- package/device-parameters/device-parameters-list.component.d.ts.map +0 -1
- package/device-parameters/device-parameters-tab.guard.d.ts +0 -11
- package/device-parameters/device-parameters-tab.guard.d.ts.map +0 -1
- package/device-parameters/index.d.ts +0 -7
- package/device-parameters/index.d.ts.map +0 -1
- package/device-parameters/parameter-type-cell-renderer.components.d.ts +0 -8
- package/device-parameters/parameter-type-cell-renderer.components.d.ts.map +0 -1
- package/fesm2022/c8y-ngx-components-device-parameters.mjs +0 -215
- package/fesm2022/c8y-ngx-components-device-parameters.mjs.map +0 -1
|
@@ -368,7 +368,7 @@ const ICONS_MAP = {
|
|
|
368
368
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
369
369
|
const INDEX_HTML = '/index.html';
|
|
370
370
|
class EchartsOptionsService {
|
|
371
|
-
constructor(datePipe, yAxisService, chartTypesService, severityIconPipe, severityLabelPipe, translate, router) {
|
|
371
|
+
constructor(datePipe, yAxisService, chartTypesService, severityIconPipe, severityLabelPipe, translate, router, appState) {
|
|
372
372
|
this.datePipe = datePipe;
|
|
373
373
|
this.yAxisService = yAxisService;
|
|
374
374
|
this.chartTypesService = chartTypesService;
|
|
@@ -376,6 +376,7 @@ class EchartsOptionsService {
|
|
|
376
376
|
this.severityLabelPipe = severityLabelPipe;
|
|
377
377
|
this.translate = translate;
|
|
378
378
|
this.router = router;
|
|
379
|
+
this.appState = appState;
|
|
379
380
|
this.TOOLTIP_WIDTH = 300;
|
|
380
381
|
}
|
|
381
382
|
getChartOptions(datapointsWithValues, timeRange, showSplitLines, events, alarms, displayOptions, selectedTimeRange, aggregatedDatapoints, sliderZoomUsed = false) {
|
|
@@ -389,6 +390,8 @@ class EchartsOptionsService {
|
|
|
389
390
|
const gridLeft = leftAxis.length ? leftAxis.length * this.yAxisService.Y_AXIS_OFFSET : 32;
|
|
390
391
|
const rightAxis = Array.isArray(yAxis) ? yAxis.filter(yx => yx.position === 'right') : [];
|
|
391
392
|
const gridRight = rightAxis.length ? rightAxis.length * this.yAxisService.Y_AXIS_OFFSET : 16;
|
|
393
|
+
const currentUser = this.appState.currentUser?.getValue();
|
|
394
|
+
const selectedLanguage = currentUser?.customProperties?.['c8y_UserPreference-language'] || 'en';
|
|
392
395
|
let intervalInMs = this.calculateExtendedIntervalInMs(selectedTimeRange?.interval || timeRange.interval || 'hours', selectedTimeRange || timeRange);
|
|
393
396
|
if (sliderZoomUsed) {
|
|
394
397
|
intervalInMs = this.calculateExtendedIntervalInMs(timeRange.interval || 'hours', timeRange);
|
|
@@ -482,7 +485,36 @@ class EchartsOptionsService {
|
|
|
482
485
|
axisLabel: {
|
|
483
486
|
hideOverlap: true,
|
|
484
487
|
borderWidth: 2, // as there is no margin for labels spacing, transparent border is a workaround
|
|
485
|
-
borderColor: 'transparent'
|
|
488
|
+
borderColor: 'transparent',
|
|
489
|
+
formatter: value => {
|
|
490
|
+
const date = new Date(value);
|
|
491
|
+
const locale = selectedLanguage.replace('_', '-');
|
|
492
|
+
const isStartOfMinute = date.getSeconds() === 0;
|
|
493
|
+
const isStartOfDay = date.getHours() === 0 && date.getMinutes() === 0 && date.getSeconds() === 0;
|
|
494
|
+
const isStartOfYear = date.getMonth() === 0 && date.getDate() === 1 && isStartOfDay;
|
|
495
|
+
let options;
|
|
496
|
+
// Case 1: Tick is start of year
|
|
497
|
+
// Shows only the year, e.g. "2025"
|
|
498
|
+
if (isStartOfYear) {
|
|
499
|
+
options = { year: 'numeric' };
|
|
500
|
+
}
|
|
501
|
+
// Case 2: Tick is start of day
|
|
502
|
+
// Shows abbreviated month and day, e.g. "Jan 13"
|
|
503
|
+
else if (isStartOfDay) {
|
|
504
|
+
options = { month: 'short', day: 'numeric' };
|
|
505
|
+
}
|
|
506
|
+
// Case 3: Tick is start of minute
|
|
507
|
+
// Shows hour and minute, e.g. "14:30" (format depends on locale)
|
|
508
|
+
else if (isStartOfMinute) {
|
|
509
|
+
options = { hour: 'numeric', minute: '2-digit' };
|
|
510
|
+
}
|
|
511
|
+
// Case 4: Interval is 1 minute or less
|
|
512
|
+
// Shows seconds, e.g. ":45"
|
|
513
|
+
else {
|
|
514
|
+
options = { second: '2-digit' };
|
|
515
|
+
}
|
|
516
|
+
return new Intl.DateTimeFormat(locale, options).format(date);
|
|
517
|
+
}
|
|
486
518
|
},
|
|
487
519
|
splitLine: {
|
|
488
520
|
show: showSplitLines.XAxis,
|
|
@@ -1345,12 +1377,12 @@ class EchartsOptionsService {
|
|
|
1345
1377
|
return acc;
|
|
1346
1378
|
}, null);
|
|
1347
1379
|
}
|
|
1348
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: EchartsOptionsService, deps: [{ token: i1$1.DatePipe }, { token: YAxisService }, { token: ChartTypesService }, { token: i4.AlarmSeverityToIconPipe }, { token: i4.AlarmSeverityToLabelPipe }, { token: i5.TranslateService }, { token: i6.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1380
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: EchartsOptionsService, deps: [{ token: i1$1.DatePipe }, { token: YAxisService }, { token: ChartTypesService }, { token: i4.AlarmSeverityToIconPipe }, { token: i4.AlarmSeverityToLabelPipe }, { token: i5.TranslateService }, { token: i6.Router }, { token: i1$1.AppStateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1349
1381
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: EchartsOptionsService }); }
|
|
1350
1382
|
}
|
|
1351
1383
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: EchartsOptionsService, decorators: [{
|
|
1352
1384
|
type: Injectable
|
|
1353
|
-
}], ctorParameters: () => [{ type: i1$1.DatePipe }, { type: YAxisService }, { type: ChartTypesService }, { type: i4.AlarmSeverityToIconPipe }, { type: i4.AlarmSeverityToLabelPipe }, { type: i5.TranslateService }, { type: i6.Router }] });
|
|
1385
|
+
}], ctorParameters: () => [{ type: i1$1.DatePipe }, { type: YAxisService }, { type: ChartTypesService }, { type: i4.AlarmSeverityToIconPipe }, { type: i4.AlarmSeverityToLabelPipe }, { type: i5.TranslateService }, { type: i6.Router }, { type: i1$1.AppStateService }] });
|
|
1354
1386
|
|
|
1355
1387
|
class ChartRealtimeService {
|
|
1356
1388
|
constructor(measurementRealtime, alarmRealtimeService, eventRealtimeService, echartsOptionsService) {
|
|
@@ -1362,6 +1394,7 @@ class ChartRealtimeService {
|
|
|
1362
1394
|
this.MIN_REALTIME_TIMEOUT = 250;
|
|
1363
1395
|
this.MAX_REALTIME_TIMEOUT = 5_000;
|
|
1364
1396
|
this.lastMeasurements = new Map();
|
|
1397
|
+
this.pendingAlarmsOrEvents = new Map();
|
|
1365
1398
|
this.currentAlarms = [];
|
|
1366
1399
|
this.currentEvents = [];
|
|
1367
1400
|
}
|
|
@@ -1403,7 +1436,7 @@ class ChartRealtimeService {
|
|
|
1403
1436
|
dateFrom: this.currentTimeRange.dateFrom.toISOString(),
|
|
1404
1437
|
dateTo: this.currentTimeRange.dateTo.toISOString()
|
|
1405
1438
|
});
|
|
1406
|
-
interval(this.INTERVAL)
|
|
1439
|
+
this.realtimeIntervalSubscription = interval(this.INTERVAL)
|
|
1407
1440
|
.pipe(tap(() => {
|
|
1408
1441
|
const windowSize = this.currentTimeRange.dateTo.valueOf() - this.currentTimeRange.dateFrom.valueOf();
|
|
1409
1442
|
const now = Date.now();
|
|
@@ -1438,7 +1471,16 @@ class ChartRealtimeService {
|
|
|
1438
1471
|
this.realtimeSubscriptionMeasurements = measurement$
|
|
1439
1472
|
.pipe(buffer(bufferReset$))
|
|
1440
1473
|
.subscribe(measurements => {
|
|
1441
|
-
this.
|
|
1474
|
+
const alarmsOrEvents = Array.from(this.pendingAlarmsOrEvents.values());
|
|
1475
|
+
this.pendingAlarmsOrEvents.clear();
|
|
1476
|
+
if (alarmsOrEvents.length) {
|
|
1477
|
+
alarmsOrEvents.forEach(alarmOrEvent => {
|
|
1478
|
+
this.updateChartInstance(measurements, alarmOrEvent, displayOptions, datapointOutOfSyncCallback);
|
|
1479
|
+
});
|
|
1480
|
+
}
|
|
1481
|
+
else {
|
|
1482
|
+
this.updateChartInstance(measurements, null, displayOptions, datapointOutOfSyncCallback);
|
|
1483
|
+
}
|
|
1442
1484
|
// Store the last measurements
|
|
1443
1485
|
measurements.forEach(measurement => {
|
|
1444
1486
|
this.lastMeasurements.set(measurement.datapoint.fragment, measurement);
|
|
@@ -1446,27 +1488,21 @@ class ChartRealtimeService {
|
|
|
1446
1488
|
});
|
|
1447
1489
|
this.realtimeSubscriptionAlarmsEvents = allAlarmsAndEvents$
|
|
1448
1490
|
.pipe(map(alarmOrEvent => {
|
|
1449
|
-
const foundAlarmOrEvent = activeAlarmsOrEvents.find(aOrE =>
|
|
1450
|
-
return aOrE.filters.type === alarmOrEvent.type;
|
|
1451
|
-
});
|
|
1491
|
+
const foundAlarmOrEvent = activeAlarmsOrEvents.find(aOrE => aOrE.filters.type === alarmOrEvent.type);
|
|
1452
1492
|
if (foundAlarmOrEvent) {
|
|
1453
1493
|
alarmOrEvent['color'] = foundAlarmOrEvent.color;
|
|
1454
1494
|
alarmOrEvent['selectedDatapoint'] = foundAlarmOrEvent.selectedDatapoint;
|
|
1495
|
+
const key = String(alarmOrEvent.id || alarmOrEvent.creationTime);
|
|
1496
|
+
this.pendingAlarmsOrEvents.set(key, alarmOrEvent);
|
|
1455
1497
|
}
|
|
1456
|
-
|
|
1457
|
-
const fragment = alarmOrEvent['selectedDatapoint']?.fragment;
|
|
1458
|
-
if (fragment && this.lastMeasurements.has(fragment)) {
|
|
1459
|
-
const lastMeasurement = this.lastMeasurements.get(fragment);
|
|
1460
|
-
this.updateChartInstance([lastMeasurement], alarmOrEvent, displayOptions, datapointOutOfSyncCallback);
|
|
1461
|
-
}
|
|
1462
|
-
}
|
|
1463
|
-
return foundAlarmOrEvent ? alarmOrEvent : null;
|
|
1498
|
+
return null;
|
|
1464
1499
|
}))
|
|
1465
1500
|
.subscribe();
|
|
1466
1501
|
}
|
|
1467
1502
|
stopRealtime() {
|
|
1468
1503
|
this.realtimeSubscriptionMeasurements?.unsubscribe();
|
|
1469
1504
|
this.realtimeSubscriptionAlarmsEvents?.unsubscribe();
|
|
1505
|
+
this.realtimeIntervalSubscription?.unsubscribe();
|
|
1470
1506
|
}
|
|
1471
1507
|
/**
|
|
1472
1508
|
* Updates the chart with the current alarms and events data. Only used when no active datapoints are selected.
|