diff --git a/ui-ngx/src/app/modules/home/models/dashboard-component.models.ts b/ui-ngx/src/app/modules/home/models/dashboard-component.models.ts index facb159af4..71f5aaaf72 100644 --- a/ui-ngx/src/app/modules/home/models/dashboard-component.models.ts +++ b/ui-ngx/src/app/modules/home/models/dashboard-component.models.ts @@ -43,6 +43,7 @@ import { UtilsService } from '@core/services/utils.service'; import { TbPopoverComponent } from '@shared/components/popover.component'; import { ComponentStyle, iconStyle, textStyle } from '@shared/models/widget-settings.models'; import { TbContextMenuEvent } from '@shared/models/jquery-event.models'; +import { widgetHasTimewindow } from '@shared/models/widget/widget-model.definition'; export interface WidgetsData { widgets: Array; @@ -616,14 +617,11 @@ export class DashboardWidget implements GridsterItem, IDashboardWidget { this.dropShadow = isDefined(this.widget.config.dropShadow) ? this.widget.config.dropShadow : true; this.enableFullscreen = isDefined(this.widget.config.enableFullscreen) ? this.widget.config.enableFullscreen : true; - let canHaveTimewindow = false; + const canHaveTimewindow = widgetHasTimewindow(this.widget); let onlyQuickInterval = false; let onlyHistoryTimewindow = false; - if (this.widget.type === widgetType.timeseries || this.widget.type === widgetType.alarm) { - canHaveTimewindow = true; - } else if (this.widget.type === widgetType.latest) { - canHaveTimewindow = datasourcesHasAggregation(this.widget.config.datasources); - onlyQuickInterval = canHaveTimewindow; + if (this.widget.type === widgetType.latest) { + onlyQuickInterval = datasourcesHasAggregation(this.widget.config.datasources); if (canHaveTimewindow) { onlyHistoryTimewindow = datasourcesHasOnlyComparisonAggregation(this.widget.config.datasources); } diff --git a/ui-ngx/src/app/shared/models/widget/home-widgets/api-usage-model.definition.ts b/ui-ngx/src/app/shared/models/widget/home-widgets/api-usage-model.definition.ts index 5c92b84cbe..04f1155d2f 100644 --- a/ui-ngx/src/app/shared/models/widget/home-widgets/api-usage-model.definition.ts +++ b/ui-ngx/src/app/shared/models/widget/home-widgets/api-usage-model.definition.ts @@ -72,6 +72,12 @@ export const ApiUsageModelDefinition: WidgetModelDefinition = { if (settings.trips?.length) { return true; } else { - const datasources: Datasource[] = []; - if (settings.markers?.length) { - datasources.push(...getMapDataLayersDatasources(settings.markers, true, 'markers')); - } - if (settings.polygons?.length) { - datasources.push(...getMapDataLayersDatasources(settings.polygons, true, 'polygons')); - } - if (settings.circles?.length) { - datasources.push(...getMapDataLayersDatasources(settings.circles, true, 'circles')); - } - if (settings.additionalDataSources?.length) { - datasources.push(...additionalMapDataSourcesToDatasources(settings.additionalDataSources)); - } + const datasources: Datasource[] = getMapLatestDataLayersDatasources(settings); return datasourcesHasAggregation(datasources); } + }, + datasourcesHasAggregation(widget: Widget): boolean { + const datasources: Datasource[] = getMapLatestDataLayersDatasources(widget.config.settings as BaseMapSettings); + return datasourcesHasAggregation(datasources); + }, + datasourcesHasOnlyComparisonAggregation(widget: Widget): boolean { + const datasources: Datasource[] = getMapLatestDataLayersDatasources(widget.config.settings as BaseMapSettings); + return datasourcesHasOnlyComparisonAggregation(datasources); } }; @@ -252,3 +254,20 @@ const getMapDataLayersDatasources = (settings: MapDataLayerSettings[], }); return datasources; }; + +const getMapLatestDataLayersDatasources = (settings: BaseMapSettings): Datasource[] => { + const datasources: Datasource[] = []; + if (settings.markers?.length) { + datasources.push(...getMapDataLayersDatasources(settings.markers, true, 'markers')); + } + if (settings.polygons?.length) { + datasources.push(...getMapDataLayersDatasources(settings.polygons, true, 'polygons')); + } + if (settings.circles?.length) { + datasources.push(...getMapDataLayersDatasources(settings.circles, true, 'circles')); + } + if (settings.additionalDataSources?.length) { + datasources.push(...additionalMapDataSourcesToDatasources(settings.additionalDataSources)); + } + return datasources; +}; diff --git a/ui-ngx/src/app/shared/models/widget/widget-model.definition.ts b/ui-ngx/src/app/shared/models/widget/widget-model.definition.ts index 13d0ae765a..6b7b547b40 100644 --- a/ui-ngx/src/app/shared/models/widget/widget-model.definition.ts +++ b/ui-ngx/src/app/shared/models/widget/widget-model.definition.ts @@ -33,6 +33,8 @@ export interface WidgetModelDefinition { updateFromExportInfo(widget: Widget, entityAliases: EntityAliases, filters: Filters, info: T): void; datasources(widget: Widget): Datasource[]; hasTimewindow(widget: Widget): boolean; + datasourcesHasAggregation(widget: Widget): boolean; + datasourcesHasOnlyComparisonAggregation(widget: Widget): boolean; } const widgetModelRegistry: WidgetModelDefinition[] = [