@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
77 lines • 12.8 kB
JavaScript
import { Pipe } from '@angular/core';
import { AlertService, MeasurementRealtimeService } from '@c8y/ngx-components';
import { of } from 'rxjs';
import { map, catchError } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "@c8y/ngx-components";
const INFO_GAUGE_COLORS = {
GREEN: 'var(--c8y-brand-50)',
YELLOW: 'var(--c8y-palette-status-warning)',
RED: 'var(--c8y-palette-status-danger)'
};
export class InfoGaugeCurrentMeasurementPipe {
constructor(measurementRealtime, alert) {
this.measurementRealtime = measurementRealtime;
this.alert = alert;
}
transform(datapoint, calculateGauge) {
return this.measurementRealtime
.latestValueOfSpecificMeasurement$(datapoint.fragment, datapoint.series, datapoint.__target, 1, true)
.pipe(map(m => {
// in case measurement is not stored in DB when initially requested.
if (!m) {
return { value: Number.NaN, date: '', unit: datapoint.unit || '', notFound: true };
}
const measurementValue = m[datapoint.fragment][datapoint.series];
const data = {
value: measurementValue.value,
unit: measurementValue.unit || datapoint.unit,
date: m.time
};
if (!calculateGauge) {
return data;
}
const gauge = this.calculateGauge(datapoint, measurementValue.value);
return { ...data, ...gauge };
}), catchError(e => {
this.alert.addServerFailure(e);
return of({ value: Number.NaN, date: '', unit: '' });
}));
}
calculateGauge(datapoint, value) {
const val = value;
const min = Number(datapoint.min || 0);
const max = Number(datapoint.max || 0);
const yMin = Number(datapoint.yellowRangeMin);
const yMax = Number(datapoint.yellowRangeMax);
const rMin = Number(datapoint.redRangeMin);
const rMax = Number(datapoint.redRangeMax);
// Previously d3 was used for linear scale: d3.scale.linear().domain([min, max]).range([0, 100]);
// wanted to avoid importing d3 just for this.
const scale = (value1) => (value1 - min) / ((max - min) / 100);
const strokeDashOffset = 125.75 + (377.25 - (scale(val) / 100) * 377.25);
let color = INFO_GAUGE_COLORS.GREEN;
if (Number.isFinite(yMin) && Number.isFinite(yMax)) {
if (val >= yMin && val <= yMax) {
color = INFO_GAUGE_COLORS.YELLOW;
}
}
if (Number.isFinite(rMin) && Number.isFinite(rMax)) {
if (val >= rMin && val <= rMax) {
color = INFO_GAUGE_COLORS.RED;
}
}
return { color, strokeDashOffset };
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InfoGaugeCurrentMeasurementPipe, deps: [{ token: i1.MeasurementRealtimeService }, { token: i1.AlertService }], target: i0.ɵɵFactoryTarget.Pipe }); }
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: InfoGaugeCurrentMeasurementPipe, isStandalone: true, name: "infoGaugeCurrentMeasurement" }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InfoGaugeCurrentMeasurementPipe, decorators: [{
type: Pipe,
args: [{
name: 'infoGaugeCurrentMeasurement',
pure: true,
standalone: true
}]
}], ctorParameters: () => [{ type: i1.MeasurementRealtimeService }, { type: i1.AlertService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVudC1tZWFzdXJlbWVudC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvaW5mby1nYXVnZS9jdXJyZW50LW1lYXN1cmVtZW50LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFcEQsT0FBTyxFQUFFLFlBQVksRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRS9FLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRWpELE1BQU0saUJBQWlCLEdBQUc7SUFDeEIsS0FBSyxFQUFFLHFCQUFxQjtJQUM1QixNQUFNLEVBQUUsbUNBQW1DO0lBQzNDLEdBQUcsRUFBRSxrQ0FBa0M7Q0FDL0IsQ0FBQztBQU9YLE1BQU0sT0FBTywrQkFBK0I7SUFDMUMsWUFDVSxtQkFBK0MsRUFDL0MsS0FBbUI7UUFEbkIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUE0QjtRQUMvQyxVQUFLLEdBQUwsS0FBSyxDQUFjO0lBQzFCLENBQUM7SUFnQkosU0FBUyxDQUNQLFNBQXFCLEVBQ3JCLGNBQXdCO1FBU3hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQjthQUM1QixpQ0FBaUMsQ0FDaEMsU0FBUyxDQUFDLFFBQVEsRUFDbEIsU0FBUyxDQUFDLE1BQU0sRUFDaEIsU0FBUyxDQUFDLFFBQVEsRUFDbEIsQ0FBQyxFQUNELElBQUksQ0FDTDthQUNBLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixvRUFBb0U7WUFDcEUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNQLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUs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QUFJLEVBQUUsQ0FBQztnQkFDL0IsS0FBSyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQztZQUNoQyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztJQUNyQyxDQUFDOytHQTlGVSwrQkFBK0I7NkdBQS9CLCtCQUErQjs7NEZBQS9CLCtCQUErQjtrQkFMM0MsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsNkJBQTZCO29CQUNuQyxJQUFJLEVBQUUsSUFBSTtvQkFDVixVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IEtQSURldGFpbHMgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2RhdGFwb2ludC1zZWxlY3Rvcic7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UsIE1lYXN1cmVtZW50UmVhbHRpbWVTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBJTWVhc3VyZW1lbnRWYWx1ZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmNvbnN0IElORk9fR0FVR0VfQ09MT1JTID0ge1xuICBHUkVFTjogJ3ZhcigtLWM4eS1icmFuZC01MCknLFxuICBZRUxMT1c6ICd2YXIoLS1jOHktcGFsZXR0ZS1zdGF0dXMtd2FybmluZyknLFxuICBSRUQ6ICd2YXIoLS1jOHktcGFsZXR0ZS1zdGF0dXMtZGFuZ2VyKSdcbn0gYXMgY29uc3Q7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2luZm9HYXVnZUN1cnJlbnRNZWFzdXJlbWVudCcsXG4gIHB1cmU6IHRydWUsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSW5mb0dhdWdlQ3VycmVudE1lYXN1cmVtZW50UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1lYXN1cmVtZW50UmVhbHRpbWU6IE1lYXN1cmVtZW50UmVhbHRpbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZVxuICApIHt9XG4gIHRyYW5zZm9ybShcbiAgICBkYXRhcG9pbnQ6IEtQSURldGFpbHMsXG4gICAgY2FsY3VsYXRlR2F1Z2U/OiBmYWxzZVxuICApOiBPYnNlcnZhYmxlPHsgZGF0ZTogc3RyaW5nOyB2YWx1ZTogbnVtYmVyOyB1bml0OiBzdHJpbmc7IG5vdEZvdW5kPzogYm9vbGVhbiB9PjtcbiAgdHJhbnNmb3JtKFxuICAgIGRhdGFwb2ludDogS1BJRGV0YWlscyxcbiAgICBjYWxjdWxhdGVHYXVnZT86IHRydWVcbiAgKTogT2JzZXJ2YWJsZTx7XG4gICAgZGF0ZTogc3RyaW5nO1xuICAgIHZhbHVlOiBudW1iZXI7XG4gICAgdW5pdDogc3RyaW5nO1xuICAgIGNvbG9yOiAodHlwZW9mIElORk9fR0FVR0VfQ09MT1JTKVtrZXlvZiB0eXBlb2YgSU5GT19HQVVHRV9DT0xPUlNdO1xuICAgIHN0cm9rZURhc2hPZmZzZXQ6IG51bWJlcjtcbiAgICBub3RGb3VuZD86IGJvb2xlYW47XG4gIH0+O1xuICB0cmFuc2Zvcm0oXG4gICAgZGF0YXBvaW50OiBLUElEZXRhaWxzLFxuICAgIGNhbGN1bGF0ZUdhdWdlPzogYm9vbGVhblxuICApOiBPYnNlcnZhYmxlPHtcbiAgICBkYXRlOiBzdHJpbmc7XG4gICAgdmFsdWU6IG51bWJlcjtcbiAgICB1bml0OiBzdHJpbmc7XG4gICAgY29sb3I/OiAodHlwZW9mIElORk9fR0FVR0VfQ09MT1JTKVtrZXlvZiB0eXBlb2YgSU5GT19HQVVHRV9DT0xPUlNdO1xuICAgIHN0cm9rZURhc2hPZmZzZXQ/OiBudW1iZXI7XG4gICAgbm90Rm91bmQ/OiBib29sZWFuO1xuICB9PiB7XG4gICAgcmV0dXJuIHRoaXMubWVhc3VyZW1lbnRSZWFsdGltZVxuICAgICAgLmxhdGVzdFZhbHVlT2ZTcGVjaWZpY01lYXN1cmVtZW50JChcbiAgICAgICAgZGF0YXBvaW50LmZyYWdtZW50LFxuICAgICAgICBkYXRhcG9pbnQuc2VyaWVzLFxuICAgICAgICBkYXRhcG9pbnQuX190YXJnZXQsXG4gICAgICAgIDEsXG4gICAgICAgIHRydWVcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAobSA9PiB7XG4gICAgICAgICAgLy8gaW4gY2FzZSBtZWFzdXJlbWVudCBpcyBub3Qgc3RvcmVkIGluIERCIHdoZW4gaW5pdGlhbGx5IHJlcXVlc3RlZC5cbiAgICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBOdW1iZXIuTmFOLCBkYXRlOiAnJywgdW5pdDogZGF0YXBvaW50LnVuaXQgfHwgJycsIG5vdEZvdW5kOiB0cnVlIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG1lYXN1cmVtZW50VmFsdWU6IElNZWFzdXJlbWVudFZhbHVlID0gbVtkYXRhcG9pbnQuZnJhZ21lbnRdW2RhdGFwb2ludC5zZXJpZXNdO1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICB2YWx1ZTogbWVhc3VyZW1lbnRWYWx1ZS52YWx1ZSxcbiAgICAgICAgICAgIHVuaXQ6IG1lYXN1cmVtZW50VmFsdWUudW5pdCB8fCBkYXRhcG9pbnQudW5pdCxcbiAgICAgICAgICAgIGRhdGU6IG0udGltZVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKCFjYWxjdWxhdGVHYXVnZSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGdhdWdlID0gdGhpcy5jYWxjdWxhdGVHYXVnZShkYXRhcG9pbnQsIG1lYXN1cmVtZW50VmFsdWUudmFsdWUpO1xuICAgICAgICAgIHJldHVybiB7IC4uLmRhdGEsIC4uLmdhdWdlIH07XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKGUgPT4ge1xuICAgICAgICAgIHRoaXMuYWxlcnQuYWRkU2VydmVyRmFpbHVyZShlKTtcblxuICAgICAgICAgIHJldHVybiBvZih7IHZhbHVlOiBOdW1iZXIuTmFOLCBkYXRlOiAnJywgdW5pdDogJycgfSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVHYXVnZShkYXRhcG9pbnQ6IEtQSURldGFpbHMsIHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCB2YWwgPSB2YWx1ZTtcbiAgICBjb25zdCBtaW4gPSBOdW1iZXIoZGF0YXBvaW50Lm1pbiB8fCAwKTtcbiAgICBjb25zdCBtYXggPSBOdW1iZXIoZGF0YXBvaW50Lm1heCB8fCAwKTtcbiAgICBjb25zdCB5TWluID0gTnVtYmVyKGRhdGFwb2ludC55ZWxsb3dSYW5nZU1pbik7XG4gICAgY29uc3QgeU1heCA9IE51bWJlcihkYXRhcG9pbnQueWVsbG93UmFuZ2VNYXgpO1xuICAgIGNvbnN0IHJNaW4gPSBOdW1iZXIoZGF0YXBvaW50LnJlZFJhbmdlTWluKTtcbiAgICBjb25zdCByTWF4ID0gTnVtYmVyKGRhdGFwb2ludC5yZWRSYW5nZU1heCk7XG5cbiAgICAvLyBQcmV2aW91c2x5IGQzIHdhcyB1c2VkIGZvciBsaW5lYXIgc2NhbGU6IGQzLnNjYWxlLmxpbmVhcigpLmRvbWFpbihbbWluLCBtYXhdKS5yYW5nZShbMCwgMTAwXSk7XG4gICAgLy8gd2FudGVkIHRvIGF2b2lkIGltcG9ydGluZyBkMyBqdXN0IGZvciB0aGlzLlxuICAgIGNvbnN0IHNjYWxlID0gKHZhbHVlMTogbnVtYmVyKSA9PiAodmFsdWUxIC0gbWluKSAvICgobWF4IC0gbWluKSAvIDEwMCk7XG5cbiAgICBjb25zdCBzdHJva2VEYXNoT2Zmc2V0ID0gMTI1Ljc1ICsgKDM3Ny4yNSAtIChzY2FsZSh2YWwpIC8gMTAwKSAqIDM3Ny4yNSk7XG4gICAgbGV0IGNvbG9yOiAodHlwZW9mIElORk9fR0FVR0VfQ09MT1JTKVtrZXlvZiB0eXBlb2YgSU5GT19HQVVHRV9DT0xPUlNdID0gSU5GT19HQVVHRV9DT0xPUlMuR1JFRU47XG5cbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHlNaW4pICYmIE51bWJlci5pc0Zpbml0ZSh5TWF4KSkge1xuICAgICAgaWYgKHZhbCA+PSB5TWluICYmIHZhbCA8PSB5TWF4KSB7XG4gICAgICAgIGNvbG9yID0gSU5GT19HQVVHRV9DT0xPUlMuWUVMTE9XO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChOdW1iZXIuaXNGaW5pdGUock1pbikgJiYgTnVtYmVyLmlzRmluaXRlKHJNYXgpKSB7XG4gICAgICBpZiAodmFsID49IHJNaW4gJiYgdmFsIDw9IHJNYXgpIHtcbiAgICAgICAgY29sb3IgPSBJTkZPX0dBVUdFX0NPTE9SUy5SRUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY29sb3IsIHN0cm9rZURhc2hPZmZzZXQgfTtcbiAgfVxufVxuIl19