Commit 8e78589b64e588f97cec424dde728ca6f126baf5

Authored by Igor Kulikov
Committed by GitHub
2 parents a0ae28f2 31d0425c

Merge pull request #3272 from vvlladd28/improvement/map/calculate-function2

[3.0] Fix calculation value in function for map widget
@@ -20,7 +20,15 @@ import { Datasource, DatasourceData } from '@app/shared/models/widget.models'; @@ -20,7 +20,15 @@ import { Datasource, DatasourceData } from '@app/shared/models/widget.models';
20 import _ from 'lodash'; 20 import _ from 'lodash';
21 import { Observable, Observer, of } from 'rxjs'; 21 import { Observable, Observer, of } from 'rxjs';
22 import { map } from 'rxjs/operators'; 22 import { map } from 'rxjs/operators';
23 -import { createLabelFromDatasource, hashCode, isDefinedAndNotNull, isNumber, isUndefined, padValue } from '@core/utils'; 23 +import {
  24 + createLabelFromDatasource,
  25 + hashCode,
  26 + isDefined,
  27 + isDefinedAndNotNull, isFunction,
  28 + isNumber,
  29 + isUndefined,
  30 + padValue
  31 +} from '@core/utils';
24 32
25 export function createTooltip(target: L.Layer, 33 export function createTooltip(target: L.Layer,
26 settings: MarkerSettings | PolylineSettings | PolygonSettings, 34 settings: MarkerSettings | PolylineSettings | PolygonSettings,
@@ -403,6 +411,24 @@ export function safeExecute(func: (...args: any[]) => any, params = []) { @@ -403,6 +411,24 @@ export function safeExecute(func: (...args: any[]) => any, params = []) {
403 return res; 411 return res;
404 } 412 }
405 413
  414 +export function functionValueCalculator(useFunction: boolean, func: (...args: any[]) => any, params = [], defaultValue: any) {
  415 + let res;
  416 + if (useFunction && isDefined(func) && isFunction(func)) {
  417 + try {
  418 + res = func(...params);
  419 + if (!isDefinedAndNotNull(res) || res === '') {
  420 + res = defaultValue;
  421 + }
  422 + } catch (err) {
  423 + res = defaultValue;
  424 + console.log('error in external function:', err);
  425 + }
  426 + } else {
  427 + res = defaultValue;
  428 + }
  429 + return res;
  430 +}
  431 +
406 export function calculateNewPointCoordinate(coordinate: number, imageSize: number): number { 432 export function calculateNewPointCoordinate(coordinate: number, imageSize: number): number {
407 let pointCoordinate = coordinate / imageSize; 433 let pointCoordinate = coordinate / imageSize;
408 if (pointCoordinate < 0) { 434 if (pointCoordinate < 0) {
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 /// 15 ///
16 16
17 import L, { LatLngExpression, LeafletMouseEvent } from 'leaflet'; 17 import L, { LatLngExpression, LeafletMouseEvent } from 'leaflet';
18 -import { createTooltip, parseWithTranslation, safeExecute } from './maps-utils'; 18 +import { createTooltip, functionValueCalculator, parseWithTranslation, safeExecute } from './maps-utils';
19 import { FormattedData, PolygonSettings } from './map-models'; 19 import { FormattedData, PolygonSettings } from './map-models';
20 20
21 export class Polygon { 21 export class Polygon {
@@ -97,10 +97,7 @@ export class Polygon { @@ -97,10 +97,7 @@ export class Polygon {
97 } 97 }
98 98
99 private getPolygonColor(settings: PolygonSettings): string | null { 99 private getPolygonColor(settings: PolygonSettings): string | null {
100 - if (settings.usePolygonColorFunction) {  
101 - return safeExecute(settings.polygonColorFunction, [this.data, this.dataSources, this.data.dsIndex]);  
102 - } else {  
103 - return settings.polygonColor;  
104 - } 100 + return functionValueCalculator(settings.usePolygonColorFunction, settings.polygonColorFunction,
  101 + [this.data, this.dataSources, this.data.dsIndex], settings.polygonColor);
105 } 102 }
106 } 103 }
@@ -18,7 +18,7 @@ import L, { PolylineDecoratorOptions } from 'leaflet'; @@ -18,7 +18,7 @@ import L, { PolylineDecoratorOptions } from 'leaflet';
18 import 'leaflet-polylinedecorator'; 18 import 'leaflet-polylinedecorator';
19 19
20 import { FormattedData, PolylineSettings } from './map-models'; 20 import { FormattedData, PolylineSettings } from './map-models';
21 -import { safeExecute } from '@home/components/widget/lib/maps/maps-utils'; 21 +import { functionValueCalculator, safeExecute } from '@home/components/widget/lib/maps/maps-utils';
22 22
23 export class Polyline { 23 export class Polyline {
24 24
@@ -72,15 +72,12 @@ export class Polyline { @@ -72,15 +72,12 @@ export class Polyline {
72 getPolyStyle(settings: PolylineSettings): L.PolylineOptions { 72 getPolyStyle(settings: PolylineSettings): L.PolylineOptions {
73 return { 73 return {
74 interactive: false, 74 interactive: false,
75 - color: settings.useColorFunction ?  
76 - safeExecute(settings.colorFunction,  
77 - [this.data, this.dataSources, this.data.dsIndex]) : settings.color,  
78 - opacity: settings.useStrokeOpacityFunction ?  
79 - safeExecute(settings.strokeOpacityFunction,  
80 - [this.data, this.dataSources, this.data.dsIndex]) : settings.strokeOpacity,  
81 - weight: settings.useStrokeWeightFunction ?  
82 - safeExecute(settings.strokeWeightFunction,  
83 - [this.data, this.dataSources, this.data.dsIndex]) : settings.strokeWeight, 75 + color: functionValueCalculator(settings.useColorFunction, settings.colorFunction,
  76 + [this.data, this.dataSources, this.data.dsIndex], settings.color),
  77 + opacity: functionValueCalculator(settings.useStrokeOpacityFunction, settings.strokeOpacityFunction,
  78 + [this.data, this.dataSources, this.data.dsIndex], settings.strokeOpacity),
  79 + weight: functionValueCalculator(settings.useStrokeWeightFunction, settings.strokeWeightFunction,
  80 + [this.data, this.dataSources, this.data.dsIndex], settings.strokeWeight)
84 } 81 }
85 } 82 }
86 83