Browse Source

Map widgets: fix subscription for latest data when aggregation enabled for one of keys

pull/14685/head
Ekaterina Chantsova 11 months ago
parent
commit
33c76828e3
  1. 1
      ui-ngx/src/app/core/services/dashboard-utils.service.ts
  2. 2
      ui-ngx/src/app/modules/home/components/widget/config/basic/map/map-basic-config.component.html
  3. 26
      ui-ngx/src/app/modules/home/components/widget/config/basic/map/map-basic-config.component.ts
  4. 6
      ui-ngx/src/app/modules/home/components/widget/lib/maps/map.ts
  5. 17
      ui-ngx/src/app/modules/home/components/widget/widget-config.component.ts

1
ui-ngx/src/app/core/services/dashboard-utils.service.ts

@ -297,6 +297,7 @@ export class DashboardUtilsService {
} }
widgetConfig.datasources = this.validateAndUpdateDatasources(widgetConfig.datasources); widgetConfig.datasources = this.validateAndUpdateDatasources(widgetConfig.datasources);
if (type === widgetType.latest) { if (type === widgetType.latest) {
// TODO: the following won't work for maps
if (datasourcesHasAggregation(widgetConfig.datasources)) { if (datasourcesHasAggregation(widgetConfig.datasources)) {
const onlyHistoryTimewindow = datasourcesHasOnlyComparisonAggregation(widgetConfig.datasources); const onlyHistoryTimewindow = datasourcesHasOnlyComparisonAggregation(widgetConfig.datasources);
widgetConfig.timewindow = initModelFromDefaultTimewindow(widgetConfig.timewindow, true, widgetConfig.timewindow = initModelFromDefaultTimewindow(widgetConfig.timewindow, true,

2
ui-ngx/src/app/modules/home/components/widget/config/basic/map/map-basic-config.component.html

@ -16,7 +16,7 @@
--> -->
<ng-container [formGroup]="mapWidgetConfigForm"> <ng-container [formGroup]="mapWidgetConfigForm">
<tb-timewindow-config-panel *ngIf="trip" formControlName="timewindowConfig"> <tb-timewindow-config-panel *ngIf="displayTimewindowConfig" formControlName="timewindowConfig">
</tb-timewindow-config-panel> </tb-timewindow-config-panel>
<tb-map-settings <tb-map-settings
[trip]="trip" [trip]="trip"

26
ui-ngx/src/app/modules/home/components/widget/config/basic/map/map-basic-config.component.ts

@ -21,7 +21,7 @@ import { AppState } from '@core/core.state';
import { WidgetConfigComponent } from '@home/components/widget/widget-config.component'; import { WidgetConfigComponent } from '@home/components/widget/widget-config.component';
import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';
import { WidgetConfigComponentData } from '@home/models/widget-component.models'; import { WidgetConfigComponentData } from '@home/models/widget-component.models';
import { isDefinedAndNotNull, isUndefined, mergeDeep, mergeDeepIgnoreArray } from '@core/utils'; import { isDefinedAndNotNull, isUndefined, mergeDeepIgnoreArray } from '@core/utils';
import { mapWidgetDefaultSettings, MapWidgetSettings } from '@home/components/widget/lib/maps/map-widget.models'; import { mapWidgetDefaultSettings, MapWidgetSettings } from '@home/components/widget/lib/maps/map-widget.models';
import { cssSizeToStrSize, resolveCssSize } from '@shared/models/widget-settings.models'; import { cssSizeToStrSize, resolveCssSize } from '@shared/models/widget-settings.models';
import { WidgetConfig, widgetTitleAutocompleteValues } from '@shared/models/widget.models'; import { WidgetConfig, widgetTitleAutocompleteValues } from '@shared/models/widget.models';
@ -29,6 +29,7 @@ import {
getTimewindowConfig, getTimewindowConfig,
setTimewindowConfig setTimewindowConfig
} from '@home/components/widget/config/timewindow-config-panel.component'; } from '@home/components/widget/config/timewindow-config-panel.component';
import { findWidgetModelDefinition } from '@shared/models/widget/widget-model.definition';
@Component({ @Component({
selector: 'tb-map-basic-config', selector: 'tb-map-basic-config',
@ -42,7 +43,7 @@ export class MapBasicConfigComponent extends BasicWidgetConfigComponent {
trip = false; trip = false;
predefinedValues = widgetTitleAutocompleteValues; predefinedValues = widgetTitleAutocompleteValues;
constructor(protected store: Store<AppState>, constructor(protected store: Store<AppState>,
protected widgetConfigComponent: WidgetConfigComponent, protected widgetConfigComponent: WidgetConfigComponent,
private $injector: Injector, private $injector: Injector,
@ -106,15 +107,11 @@ export class MapBasicConfigComponent extends BasicWidgetConfigComponent {
actions: [configData.config.actions || {}, []] actions: [configData.config.actions || {}, []]
}); });
if (this.trip) { this.mapWidgetConfigForm.addControl('timewindowConfig', this.fb.control(getTimewindowConfig(configData.config)));
this.mapWidgetConfigForm.addControl('timewindowConfig', this.fb.control(getTimewindowConfig(configData.config)))
}
} }
protected prepareOutputConfig(config: any): WidgetConfigComponentData { protected prepareOutputConfig(config: any): WidgetConfigComponentData {
if (this.trip) { setTimewindowConfig(this.widgetConfig.config, config.timewindowConfig);
setTimewindowConfig(this.widgetConfig.config, config.timewindowConfig);
}
this.widgetConfig.config.settings = config.mapSettings || {}; this.widgetConfig.config.settings = config.mapSettings || {};
this.widgetConfig.config.showTitle = config.showTitle; this.widgetConfig.config.showTitle = config.showTitle;
@ -186,4 +183,17 @@ export class MapBasicConfigComponent extends BasicWidgetConfigComponent {
config.enableFullscreen = buttons.includes('fullscreen'); config.enableFullscreen = buttons.includes('fullscreen');
} }
public get displayTimewindowConfig(): boolean {
if (this.trip) {
return true;
} else {
const widgetDefinition = findWidgetModelDefinition(this.widget);
if (widgetDefinition) {
return widgetDefinition.hasTimewindow(this.widget);
} else {
return false;
}
}
}
} }

6
ui-ngx/src/app/modules/home/components/widget/lib/maps/map.ts

@ -342,7 +342,8 @@ export abstract class TbMap<S extends BaseMapSettings> {
const dataLayersSubscriptionOptions: WidgetSubscriptionOptions = { const dataLayersSubscriptionOptions: WidgetSubscriptionOptions = {
datasources, datasources,
hasDataPageLink: true, hasDataPageLink: true,
useDashboardTimewindow: false, useDashboardTimewindow: isDefined(this.ctx.widgetConfig.useDashboardTimewindow)
? this.ctx.widgetConfig.useDashboardTimewindow : true,
type: widgetType.latest, type: widgetType.latest,
callbacks: { callbacks: {
onDataUpdated: (subscription) => { onDataUpdated: (subscription) => {
@ -354,6 +355,9 @@ export abstract class TbMap<S extends BaseMapSettings> {
} }
} }
}; };
if (!dataLayersSubscriptionOptions.useDashboardTimewindow) {
dataLayersSubscriptionOptions.timeWindowConfig = this.ctx.widgetConfig.timewindow;
}
this.ctx.subscriptionApi.createSubscription(dataLayersSubscriptionOptions, false).subscribe( this.ctx.subscriptionApi.createSubscription(dataLayersSubscriptionOptions, false).subscribe(
(dataLayersSubscription) => { (dataLayersSubscription) => {
let pageSize = this.settings.mapPageSize; let pageSize = this.settings.mapPageSize;

17
ui-ngx/src/app/modules/home/components/widget/widget-config.component.ts

@ -38,10 +38,11 @@ import {
TargetDevice, TargetDevice,
targetDeviceValid, targetDeviceValid,
Widget, Widget,
widgetTypeCanHaveTimewindow,
WidgetConfigMode, WidgetConfigMode,
widgetTitleAutocompleteValues, widgetTitleAutocompleteValues,
widgetType widgetType,
widgetTypeCanHaveTimewindow,
widgetTypeHasTimewindow
} from '@shared/models/widget.models'; } from '@shared/models/widget.models';
import { import {
AsyncValidator, AsyncValidator,
@ -88,6 +89,7 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { WidgetService } from '@core/http/widget.service'; import { WidgetService } from '@core/http/widget.service';
import { TimeService } from '@core/services/time.service'; import { TimeService } from '@core/services/time.service';
import { initModelFromDefaultTimewindow } from '@shared/models/time/time.models'; import { initModelFromDefaultTimewindow } from '@shared/models/time/time.models';
import { findWidgetModelDefinition } from '@shared/models/widget/widget-model.definition';
import Timeout = NodeJS.Timeout; import Timeout = NodeJS.Timeout;
@Component({ @Component({
@ -734,11 +736,16 @@ export class WidgetConfigComponent extends PageComponent implements OnInit, OnDe
} }
public get displayTimewindowConfig(): boolean { public get displayTimewindowConfig(): boolean {
if (this.widgetType === widgetType.timeseries || this.widgetType === widgetType.alarm) { if (widgetTypeHasTimewindow(this.widgetType)) {
return true; return true;
} else if (this.widgetType === widgetType.latest) { } else if (this.widgetType === widgetType.latest) {
const datasources = this.dataSettings.get('datasources').value; const widgetDefinition = findWidgetModelDefinition(this.widget);
return datasourcesHasAggregation(datasources); if (widgetDefinition) {
return widgetDefinition.hasTimewindow(this.widget);
} else {
const datasources = this.dataSettings.get('datasources').value;
return datasourcesHasAggregation(datasources);
}
} }
} }

Loading…
Cancel
Save