UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

77 lines 12.8 kB
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