Refactoring

This commit is contained in:
Ekaterina Chantsova 2025-09-10 19:12:50 +03:00
parent 7bc16bcbb9
commit f6a1085214
2 changed files with 45 additions and 53 deletions

View File

@ -17,21 +17,17 @@
import { EntityAliases, EntityAliasInfo, getEntityAliasId } from '@shared/models/alias.models'; import { EntityAliases, EntityAliasInfo, getEntityAliasId } from '@shared/models/alias.models';
import { FilterInfo, Filters, getFilterId } from '@shared/models/query/query.models'; import { FilterInfo, Filters, getFilterId } from '@shared/models/query/query.models';
import { Dashboard } from '@shared/models/dashboard.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 { import {
additionalMapDataSourcesToDatasources, additionalMapDataSourcesToDatasources,
BaseMapSettings, BaseMapSettings,
CirclesDataLayerSettings,
MapDataLayerSettings, MapDataLayerSettings,
MapDataLayerType, MapDataLayerType,
MapDataSourceSettings, MapDataSourceSettings,
mapDataSourceSettingsToDatasource, mapDataSourceSettingsToDatasource,
MapType, MapType
MarkersDataLayerSettings,
PolygonsDataLayerSettings
} from '@shared/models/widget/maps/map.models'; } from '@shared/models/widget/maps/map.models';
import { WidgetModelDefinition } from '@shared/models/widget/widget-model.definition'; import { WidgetModelDefinition } from '@shared/models/widget/widget-model.definition';
import { deepClone } from '@core/utils';
interface AliasFilterPair { interface AliasFilterPair {
alias?: EntityAliasInfo, alias?: EntityAliasInfo,
@ -127,7 +123,7 @@ export const MapModelDefinition: WidgetModelDefinition<MapDatasourcesInfo> = {
datasources.push(...getMapDataLayersDatasources(settings.circles)); datasources.push(...getMapDataLayersDatasources(settings.circles));
} }
if (settings.additionalDataSources?.length) { if (settings.additionalDataSources?.length) {
datasources.push(...getMapDataLayersDatasources(settings.additionalDataSources)); datasources.push(...additionalMapDataSourcesToDatasources(settings.additionalDataSources));
} }
return datasources; return datasources;
}, },
@ -138,13 +134,13 @@ export const MapModelDefinition: WidgetModelDefinition<MapDatasourcesInfo> = {
} else { } else {
const datasources: Datasource[] = []; const datasources: Datasource[] = [];
if (settings.markers?.length) { if (settings.markers?.length) {
datasources.push(...getMapLatestDataLayersDatasources(settings.markers, 'markers')); datasources.push(...getMapDataLayersDatasources(settings.markers, true, 'markers'));
} }
if (settings.polygons?.length) { if (settings.polygons?.length) {
datasources.push(...getMapLatestDataLayersDatasources(settings.polygons, 'polygons')); datasources.push(...getMapDataLayersDatasources(settings.polygons, true, 'polygons'));
} }
if (settings.circles?.length) { if (settings.circles?.length) {
datasources.push(...getMapLatestDataLayersDatasources(settings.circles, 'circles')); datasources.push(...getMapDataLayersDatasources(settings.circles, true, 'circles'));
} }
if (settings.additionalDataSources?.length) { if (settings.additionalDataSources?.length) {
datasources.push(...additionalMapDataSourcesToDatasources(settings.additionalDataSources)); datasources.push(...additionalMapDataSourcesToDatasources(settings.additionalDataSources));
@ -238,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[] = []; const datasources: Datasource[] = [];
settings.forEach((dsSettings) => { settings.forEach((dsSettings) => {
datasources.push(mapDataSourceSettingsToDatasource(dsSettings)); const datasource: Datasource = mapDataSourceSettingsToDatasource(dsSettings, null, includeDataKeys, dataLayerType);
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);
datasources.push(datasource); datasources.push(datasource);
if ((dsSettings).additionalDataSources?.length) { if (dsSettings.additionalDataSources?.length) {
(dsSettings).additionalDataSources.forEach((ds) => { dsSettings.additionalDataSources.forEach((ds) => {
const additionalDatasource: Datasource = mapDataSourceSettingsToDatasource(ds); const additionalDatasource: Datasource = mapDataSourceSettingsToDatasource(ds);
additionalDatasource.dataKeys.push(...dataKeys); if (includeDataKeys) {
additionalDatasource.dataKeys.push(...datasource.dataKeys);
}
datasources.push(additionalDatasource); datasources.push(additionalDatasource);
}); });
} }
}); });
return datasources; return datasources;
}; };
const getMapLatestDataLayerDatasourceDataKeys = (settings: MapDataLayerSettings,
dataLayerType: MapDataLayerType): DataKey[] => {
const dataKeys = settings.additionalDataKeys?.length ? deepClone(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;
};

View File

@ -24,6 +24,7 @@ import {
} from '@shared/models/widget.models'; } from '@shared/models/widget.models';
import { AttributeScope, DataKeyType } from '@shared/models/telemetry/telemetry.models'; import { AttributeScope, DataKeyType } from '@shared/models/telemetry/telemetry.models';
import { import {
deepClone,
guid, guid,
hashCode, hashCode,
isDefinedAndNotNull, isDefinedAndNotNull,
@ -61,19 +62,44 @@ export interface TbMapDatasource extends Datasource {
mapDataIds: string[]; 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 { return {
type: settings.dsType, type: settings.dsType,
name: settings.dsLabel, name: settings.dsLabel,
deviceId: settings.dsDeviceId, deviceId: settings.dsDeviceId,
entityAliasId: settings.dsEntityAliasId, entityAliasId: settings.dsEntityAliasId,
filterId: settings.dsFilterId, filterId: settings.dsFilterId,
dataKeys: [], dataKeys: dataKeys,
latestDataKeys: [], latestDataKeys: [],
mapDataIds: [id] 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 { export enum DataLayerPatternType {
pattern = 'pattern', pattern = 'pattern',
@ -658,10 +684,11 @@ export interface AdditionalMapDataSourceSettings extends MapDataSourceSettings {
dataKeys: DataKey[]; dataKeys: DataKey[];
} }
export const additionalMapDataSourcesToDatasources = (additionalMapDataSources: AdditionalMapDataSourceSettings[]): TbMapDatasource[] => { export const additionalMapDataSourcesToDatasources = (additionalMapDataSources: AdditionalMapDataSourceSettings[],
includeDataKeys = true): TbMapDatasource[] => {
return additionalMapDataSources.map(addDs => { return additionalMapDataSources.map(addDs => {
const res = mapDataSourceSettingsToDatasource(addDs); const res = mapDataSourceSettingsToDatasource(addDs);
res.dataKeys = addDs.dataKeys; res.dataKeys = includeDataKeys ? addDs.dataKeys : [];
return res; return res;
}); });
}; };