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);
if (type === widgetType.latest) {
// TODO: the following won't work for maps
if (datasourcesHasAggregation(widgetConfig.datasources)) {
const onlyHistoryTimewindow = datasourcesHasOnlyComparisonAggregation(widgetConfig.datasources);
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">
<tb-timewindow-config-panel *ngIf="trip" formControlName="timewindowConfig">
<tb-timewindow-config-panel *ngIf="displayTimewindowConfig" formControlName="timewindowConfig">
</tb-timewindow-config-panel>
<tb-map-settings
[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 { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';
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 { cssSizeToStrSize, resolveCssSize } from '@shared/models/widget-settings.models';
import { WidgetConfig, widgetTitleAutocompleteValues } from '@shared/models/widget.models';
@ -29,6 +29,7 @@ import {
getTimewindowConfig,
setTimewindowConfig
} from '@home/components/widget/config/timewindow-config-panel.component';
import { findWidgetModelDefinition } from '@shared/models/widget/widget-model.definition';
@Component({
selector: 'tb-map-basic-config',
@ -42,7 +43,7 @@ export class MapBasicConfigComponent extends BasicWidgetConfigComponent {
trip = false;
predefinedValues = widgetTitleAutocompleteValues;
constructor(protected store: Store<AppState>,
protected widgetConfigComponent: WidgetConfigComponent,
private $injector: Injector,
@ -106,15 +107,11 @@ export class MapBasicConfigComponent extends BasicWidgetConfigComponent {
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 {
if (this.trip) {
setTimewindowConfig(this.widgetConfig.config, config.timewindowConfig);
}
setTimewindowConfig(this.widgetConfig.config, config.timewindowConfig);
this.widgetConfig.config.settings = config.mapSettings || {};
this.widgetConfig.config.showTitle = config.showTitle;
@ -186,4 +183,17 @@ export class MapBasicConfigComponent extends BasicWidgetConfigComponent {
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 = {
datasources,
hasDataPageLink: true,
useDashboardTimewindow: false,
useDashboardTimewindow: isDefined(this.ctx.widgetConfig.useDashboardTimewindow)
? this.ctx.widgetConfig.useDashboardTimewindow : true,
type: widgetType.latest,
callbacks: {
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(
(dataLayersSubscription) => {
let pageSize = this.settings.mapPageSize;

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

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

Loading…
Cancel
Save