Merge pull request #13994 from ChantsovaEkaterina/bug/map-duplicate-lat-long-keys
Fixed lat/long keys duplication in additional keys list in map widget settings
This commit is contained in:
		
						commit
						05a4c5ea19
					
				@ -17,18 +17,15 @@
 | 
			
		||||
import { EntityAliases, EntityAliasInfo, getEntityAliasId } from '@shared/models/alias.models';
 | 
			
		||||
import { FilterInfo, Filters, getFilterId } from '@shared/models/query/query.models';
 | 
			
		||||
import { Dashboard } from '@shared/models/dashboard.models';
 | 
			
		||||
import { DataKey, Datasource, datasourcesHasAggregation, DatasourceType, Widget } from '@shared/models/widget.models';
 | 
			
		||||
import { Datasource, datasourcesHasAggregation, DatasourceType, Widget } from '@shared/models/widget.models';
 | 
			
		||||
import {
 | 
			
		||||
  additionalMapDataSourcesToDatasources,
 | 
			
		||||
  BaseMapSettings,
 | 
			
		||||
  CirclesDataLayerSettings,
 | 
			
		||||
  MapDataLayerSettings,
 | 
			
		||||
  MapDataLayerType,
 | 
			
		||||
  MapDataSourceSettings,
 | 
			
		||||
  mapDataSourceSettingsToDatasource,
 | 
			
		||||
  MapType,
 | 
			
		||||
  MarkersDataLayerSettings,
 | 
			
		||||
  PolygonsDataLayerSettings
 | 
			
		||||
  MapType
 | 
			
		||||
} from '@shared/models/widget/maps/map.models';
 | 
			
		||||
import { WidgetModelDefinition } from '@shared/models/widget/widget-model.definition';
 | 
			
		||||
 | 
			
		||||
@ -126,7 +123,7 @@ export const MapModelDefinition: WidgetModelDefinition<MapDatasourcesInfo> = {
 | 
			
		||||
      datasources.push(...getMapDataLayersDatasources(settings.circles));
 | 
			
		||||
    }
 | 
			
		||||
    if (settings.additionalDataSources?.length) {
 | 
			
		||||
      datasources.push(...getMapDataLayersDatasources(settings.additionalDataSources));
 | 
			
		||||
      datasources.push(...additionalMapDataSourcesToDatasources(settings.additionalDataSources));
 | 
			
		||||
    }
 | 
			
		||||
    return datasources;
 | 
			
		||||
  },
 | 
			
		||||
@ -137,13 +134,13 @@ export const MapModelDefinition: WidgetModelDefinition<MapDatasourcesInfo> = {
 | 
			
		||||
    } else {
 | 
			
		||||
      const datasources: Datasource[] = [];
 | 
			
		||||
      if (settings.markers?.length) {
 | 
			
		||||
        datasources.push(...getMapLatestDataLayersDatasources(settings.markers, 'markers'));
 | 
			
		||||
        datasources.push(...getMapDataLayersDatasources(settings.markers, true, 'markers'));
 | 
			
		||||
      }
 | 
			
		||||
      if (settings.polygons?.length) {
 | 
			
		||||
        datasources.push(...getMapLatestDataLayersDatasources(settings.polygons, 'polygons'));
 | 
			
		||||
        datasources.push(...getMapDataLayersDatasources(settings.polygons, true, 'polygons'));
 | 
			
		||||
      }
 | 
			
		||||
      if (settings.circles?.length) {
 | 
			
		||||
        datasources.push(...getMapLatestDataLayersDatasources(settings.circles, 'circles'));
 | 
			
		||||
        datasources.push(...getMapDataLayersDatasources(settings.circles, true, 'circles'));
 | 
			
		||||
      }
 | 
			
		||||
      if (settings.additionalDataSources?.length) {
 | 
			
		||||
        datasources.push(...additionalMapDataSourcesToDatasources(settings.additionalDataSources));
 | 
			
		||||
@ -237,52 +234,21 @@ const prepareAliasAndFilterPair = (dashboard: Dashboard, settings: MapDataSource
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const getMapDataLayersDatasources = (settings: MapDataLayerSettings[] | MapDataSourceSettings[]): Datasource[] => {
 | 
			
		||||
const getMapDataLayersDatasources = (settings: MapDataLayerSettings[],
 | 
			
		||||
                                     includeDataKeys = false, dataLayerType?: MapDataLayerType): Datasource[] => {
 | 
			
		||||
  const datasources: Datasource[] = [];
 | 
			
		||||
  settings.forEach((dsSettings) => {
 | 
			
		||||
    datasources.push(mapDataSourceSettingsToDatasource(dsSettings));
 | 
			
		||||
    if ((dsSettings as MapDataLayerSettings).additionalDataSources?.length) {
 | 
			
		||||
      (dsSettings as MapDataLayerSettings).additionalDataSources.forEach((ds) => {
 | 
			
		||||
        datasources.push(mapDataSourceSettingsToDatasource(ds));
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
  });
 | 
			
		||||
  return datasources;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const getMapLatestDataLayersDatasources = (settings: MapDataLayerSettings[],
 | 
			
		||||
                                     dataLayerType: MapDataLayerType): Datasource[] => {
 | 
			
		||||
  const datasources: Datasource[] = [];
 | 
			
		||||
  settings.forEach((dsSettings) => {
 | 
			
		||||
    const dataKeys: DataKey[] = getMapLatestDataLayerDatasourceDataKeys(dsSettings, dataLayerType);
 | 
			
		||||
    const datasource: Datasource = mapDataSourceSettingsToDatasource(dsSettings);
 | 
			
		||||
    datasource.dataKeys.push(...dataKeys);
 | 
			
		||||
    const datasource: Datasource = mapDataSourceSettingsToDatasource(dsSettings, null, includeDataKeys, dataLayerType);
 | 
			
		||||
    datasources.push(datasource);
 | 
			
		||||
    if ((dsSettings).additionalDataSources?.length) {
 | 
			
		||||
      (dsSettings).additionalDataSources.forEach((ds) => {
 | 
			
		||||
    if (dsSettings.additionalDataSources?.length) {
 | 
			
		||||
      dsSettings.additionalDataSources.forEach((ds) => {
 | 
			
		||||
        const additionalDatasource: Datasource = mapDataSourceSettingsToDatasource(ds);
 | 
			
		||||
        additionalDatasource.dataKeys.push(...dataKeys);
 | 
			
		||||
        if (includeDataKeys) {
 | 
			
		||||
          additionalDatasource.dataKeys.push(...datasource.dataKeys);
 | 
			
		||||
        }
 | 
			
		||||
        datasources.push(additionalDatasource);
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
  });
 | 
			
		||||
  return datasources;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const getMapLatestDataLayerDatasourceDataKeys = (settings: MapDataLayerSettings,
 | 
			
		||||
                                           dataLayerType: MapDataLayerType): DataKey[] => {
 | 
			
		||||
  const dataKeys = settings.additionalDataKeys || [];
 | 
			
		||||
  switch (dataLayerType) {
 | 
			
		||||
    case 'markers':
 | 
			
		||||
      const markersSettings = settings as MarkersDataLayerSettings;
 | 
			
		||||
      dataKeys.push(markersSettings.xKey, markersSettings.yKey);
 | 
			
		||||
      break;
 | 
			
		||||
    case 'polygons':
 | 
			
		||||
      dataKeys.push((settings as PolygonsDataLayerSettings).polygonKey);
 | 
			
		||||
      break;
 | 
			
		||||
    case 'circles':
 | 
			
		||||
      dataKeys.push((settings as CirclesDataLayerSettings).circleKey);
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
  return dataKeys;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -24,6 +24,7 @@ import {
 | 
			
		||||
} from '@shared/models/widget.models';
 | 
			
		||||
import { AttributeScope, DataKeyType } from '@shared/models/telemetry/telemetry.models';
 | 
			
		||||
import {
 | 
			
		||||
  deepClone,
 | 
			
		||||
  guid,
 | 
			
		||||
  hashCode,
 | 
			
		||||
  isDefinedAndNotNull,
 | 
			
		||||
@ -61,19 +62,44 @@ export interface TbMapDatasource extends Datasource {
 | 
			
		||||
  mapDataIds: string[];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const mapDataSourceSettingsToDatasource = (settings: MapDataSourceSettings, id = guid()): TbMapDatasource => {
 | 
			
		||||
export const mapDataSourceSettingsToDatasource = (settings: MapDataSourceSettings | MapDataLayerSettings,
 | 
			
		||||
                                                  id = guid(),
 | 
			
		||||
                                                  includeDataKeys = false, dataLayerType?: MapDataLayerType): TbMapDatasource => {
 | 
			
		||||
  const dataKeys = includeDataKeys ? mapDataLayerDatasourceDataKeys((settings as MapDataLayerSettings), dataLayerType) : [];
 | 
			
		||||
  return {
 | 
			
		||||
    type: settings.dsType,
 | 
			
		||||
    name: settings.dsLabel,
 | 
			
		||||
    deviceId: settings.dsDeviceId,
 | 
			
		||||
    entityAliasId: settings.dsEntityAliasId,
 | 
			
		||||
    filterId: settings.dsFilterId,
 | 
			
		||||
    dataKeys: [],
 | 
			
		||||
    dataKeys: dataKeys,
 | 
			
		||||
    latestDataKeys: [],
 | 
			
		||||
    mapDataIds: [id]
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const mapDataLayerDatasourceDataKeys = (settings: MapDataLayerSettings,
 | 
			
		||||
                                                 dataLayerType: MapDataLayerType): DataKey[] => {
 | 
			
		||||
  const dataKeys = settings.additionalDataKeys?.length ? deepClone(settings.additionalDataKeys) : [];
 | 
			
		||||
  switch (dataLayerType) {
 | 
			
		||||
    case 'trips':
 | 
			
		||||
      const tripsSettings = settings as TripsDataLayerSettings;
 | 
			
		||||
      dataKeys.push(tripsSettings.xKey, tripsSettings.yKey);
 | 
			
		||||
      break;
 | 
			
		||||
    case 'markers':
 | 
			
		||||
      const markersSettings = settings as MarkersDataLayerSettings;
 | 
			
		||||
      dataKeys.push(markersSettings.xKey, markersSettings.yKey);
 | 
			
		||||
      break;
 | 
			
		||||
    case 'polygons':
 | 
			
		||||
      dataKeys.push((settings as PolygonsDataLayerSettings).polygonKey);
 | 
			
		||||
      break;
 | 
			
		||||
    case 'circles':
 | 
			
		||||
      dataKeys.push((settings as CirclesDataLayerSettings).circleKey);
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
  return dataKeys;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
export enum DataLayerPatternType {
 | 
			
		||||
  pattern = 'pattern',
 | 
			
		||||
@ -658,10 +684,11 @@ export interface AdditionalMapDataSourceSettings extends MapDataSourceSettings {
 | 
			
		||||
  dataKeys: DataKey[];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const additionalMapDataSourcesToDatasources = (additionalMapDataSources: AdditionalMapDataSourceSettings[]): TbMapDatasource[] => {
 | 
			
		||||
export const additionalMapDataSourcesToDatasources = (additionalMapDataSources: AdditionalMapDataSourceSettings[],
 | 
			
		||||
                                                      includeDataKeys = true): TbMapDatasource[] => {
 | 
			
		||||
  return additionalMapDataSources.map(addDs => {
 | 
			
		||||
    const res = mapDataSourceSettingsToDatasource(addDs);
 | 
			
		||||
    res.dataKeys = addDs.dataKeys;
 | 
			
		||||
    res.dataKeys = includeDataKeys ? addDs.dataKeys : [];
 | 
			
		||||
    return res;
 | 
			
		||||
  });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user