Merge pull request #4958 from ChantsovaEkaterina/feature/charts-comparison-custom-interval
[3.3.1] UI: add custom interval option to charts comparison
This commit is contained in:
		
						commit
						6e8f6fd701
					
				@ -243,6 +243,7 @@ export interface WidgetSubscriptionOptions {
 | 
			
		||||
  legendConfig?: LegendConfig;
 | 
			
		||||
  comparisonEnabled?: boolean;
 | 
			
		||||
  timeForComparison?: moment_.unitOfTime.DurationConstructor;
 | 
			
		||||
  comparisonCustomIntervalValue?: number;
 | 
			
		||||
  decimals?: number;
 | 
			
		||||
  units?: string;
 | 
			
		||||
  callbacks?: WidgetSubscriptionCallbacks;
 | 
			
		||||
 | 
			
		||||
@ -110,6 +110,7 @@ export class WidgetSubscription implements IWidgetSubscription {
 | 
			
		||||
  units: string;
 | 
			
		||||
  comparisonEnabled: boolean;
 | 
			
		||||
  timeForComparison: ComparisonDuration;
 | 
			
		||||
  comparisonCustomIntervalValue: number;
 | 
			
		||||
  comparisonTimeWindow: WidgetTimewindow;
 | 
			
		||||
  timewindowForComparison: SubscriptionTimewindow;
 | 
			
		||||
 | 
			
		||||
@ -234,6 +235,7 @@ export class WidgetSubscription implements IWidgetSubscription {
 | 
			
		||||
      this.comparisonEnabled = options.comparisonEnabled && isHistoryTypeTimewindow(this.timeWindowConfig);
 | 
			
		||||
      if (this.comparisonEnabled) {
 | 
			
		||||
        this.timeForComparison = options.timeForComparison;
 | 
			
		||||
        this.comparisonCustomIntervalValue = options.comparisonCustomIntervalValue;
 | 
			
		||||
 | 
			
		||||
        this.comparisonTimeWindow = {};
 | 
			
		||||
        this.timewindowForComparison = null;
 | 
			
		||||
@ -1183,7 +1185,8 @@ export class WidgetSubscription implements IWidgetSubscription {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private updateSubscriptionForComparison(): SubscriptionTimewindow {
 | 
			
		||||
    this.timewindowForComparison = createTimewindowForComparison(this.subscriptionTimewindow, this.timeForComparison);
 | 
			
		||||
    this.timewindowForComparison = createTimewindowForComparison(this.subscriptionTimewindow, this.timeForComparison,
 | 
			
		||||
      this.comparisonCustomIntervalValue);
 | 
			
		||||
    this.updateComparisonTimewindow();
 | 
			
		||||
    return this.timewindowForComparison;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -145,6 +145,7 @@ export interface TbFlotComparisonSettings {
 | 
			
		||||
  comparisonEnabled: boolean;
 | 
			
		||||
  timeForComparison: ComparisonDuration;
 | 
			
		||||
  xaxisSecond: TbFlotSecondXAxisSettings;
 | 
			
		||||
  comparisonCustomIntervalValue?: number;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface TbFlotThresholdsSettings {
 | 
			
		||||
@ -546,6 +547,11 @@ const chartSettingsSchemaForComparison: JsonSettingsSchema = {
 | 
			
		||||
        type: 'string',
 | 
			
		||||
        default: 'previousInterval'
 | 
			
		||||
      },
 | 
			
		||||
      comparisonCustomIntervalValue: {
 | 
			
		||||
        title: 'Custom interval value (ms)',
 | 
			
		||||
        type: 'number',
 | 
			
		||||
        default: 7200000
 | 
			
		||||
      },
 | 
			
		||||
      xaxisSecond: {
 | 
			
		||||
        title: 'Second X axis',
 | 
			
		||||
        type: 'object',
 | 
			
		||||
@ -596,9 +602,17 @@ const chartSettingsSchemaForComparison: JsonSettingsSchema = {
 | 
			
		||||
        {
 | 
			
		||||
          value: 'years',
 | 
			
		||||
          label: 'Year ago'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          value: 'customInterval',
 | 
			
		||||
          label: 'Custom interval'
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      key: 'comparisonCustomIntervalValue',
 | 
			
		||||
      condition: 'model.timeForComparison === "customInterval"'
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      key: 'xaxisSecond',
 | 
			
		||||
      items: [
 | 
			
		||||
 | 
			
		||||
@ -908,7 +908,8 @@ export class WidgetComponent extends PageComponent implements OnInit, AfterViewI
 | 
			
		||||
        warnOnPageDataOverflow: this.typeParameters.warnOnPageDataOverflow,
 | 
			
		||||
        ignoreDataUpdateOnIntervalTick: this.typeParameters.ignoreDataUpdateOnIntervalTick,
 | 
			
		||||
        comparisonEnabled: comparisonSettings.comparisonEnabled,
 | 
			
		||||
        timeForComparison: comparisonSettings.timeForComparison
 | 
			
		||||
        timeForComparison: comparisonSettings.timeForComparison,
 | 
			
		||||
        comparisonCustomIntervalValue: comparisonSettings.comparisonCustomIntervalValue
 | 
			
		||||
      };
 | 
			
		||||
      if (this.widget.type === widgetType.alarm) {
 | 
			
		||||
        options.alarmSource = deepClone(this.widget.config.alarmSource);
 | 
			
		||||
 | 
			
		||||
@ -15,7 +15,7 @@
 | 
			
		||||
///
 | 
			
		||||
 | 
			
		||||
import { TimeService } from '@core/services/time.service';
 | 
			
		||||
import { deepClone, isDefined, isUndefined } from '@app/core/utils';
 | 
			
		||||
import { deepClone, isDefined, isNumeric, isUndefined } from '@app/core/utils';
 | 
			
		||||
import * as moment_ from 'moment';
 | 
			
		||||
import * as momentTz from 'moment-timezone';
 | 
			
		||||
 | 
			
		||||
@ -28,7 +28,7 @@ export const DAY = 24 * HOUR;
 | 
			
		||||
export const WEEK = 7 * DAY;
 | 
			
		||||
export const YEAR = DAY * 365;
 | 
			
		||||
 | 
			
		||||
export type ComparisonDuration = moment_.unitOfTime.DurationConstructor | 'previousInterval';
 | 
			
		||||
export type ComparisonDuration = moment_.unitOfTime.DurationConstructor | 'previousInterval' | 'customInterval';
 | 
			
		||||
 | 
			
		||||
export enum TimewindowType {
 | 
			
		||||
  REALTIME,
 | 
			
		||||
@ -640,7 +640,7 @@ export function calculateIntervalComparisonEndTime(interval: QuickTimeInterval,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function createTimewindowForComparison(subscriptionTimewindow: SubscriptionTimewindow,
 | 
			
		||||
                                              timeUnit: ComparisonDuration): SubscriptionTimewindow {
 | 
			
		||||
                                              timeUnit: ComparisonDuration, customIntervalValue: number): SubscriptionTimewindow {
 | 
			
		||||
  const timewindowForComparison: SubscriptionTimewindow = {
 | 
			
		||||
    fixedWindow: null,
 | 
			
		||||
    realtimeWindowMs: null,
 | 
			
		||||
@ -667,6 +667,15 @@ export function createTimewindowForComparison(subscriptionTimewindow: Subscripti
 | 
			
		||||
        endTimeMs = subscriptionTimewindow.fixedWindow.startTimeMs;
 | 
			
		||||
        startTimeMs = endTimeMs - timeInterval;
 | 
			
		||||
      }
 | 
			
		||||
    } else if (timeUnit === 'customInterval') {
 | 
			
		||||
      if (isNumeric(customIntervalValue) && isFinite(customIntervalValue) && customIntervalValue > 0) {
 | 
			
		||||
        const timeInterval = subscriptionTimewindow.fixedWindow.endTimeMs - subscriptionTimewindow.fixedWindow.startTimeMs;
 | 
			
		||||
        endTimeMs = subscriptionTimewindow.fixedWindow.endTimeMs - Math.round(customIntervalValue);
 | 
			
		||||
        startTimeMs = endTimeMs - timeInterval;
 | 
			
		||||
      } else {
 | 
			
		||||
        endTimeMs = subscriptionTimewindow.fixedWindow.endTimeMs;
 | 
			
		||||
        startTimeMs = subscriptionTimewindow.fixedWindow.startTimeMs;
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
      const timeInterval = subscriptionTimewindow.fixedWindow.endTimeMs - subscriptionTimewindow.fixedWindow.startTimeMs;
 | 
			
		||||
      endTimeMs = moment(subscriptionTimewindow.fixedWindow.endTimeMs).subtract(1, timeUnit).valueOf();
 | 
			
		||||
 | 
			
		||||
@ -467,6 +467,7 @@ export interface WidgetActionDescriptor extends CustomActionDescriptor {
 | 
			
		||||
export interface WidgetComparisonSettings {
 | 
			
		||||
  comparisonEnabled?: boolean;
 | 
			
		||||
  timeForComparison?: moment_.unitOfTime.DurationConstructor;
 | 
			
		||||
  comparisonCustomIntervalValue?: number;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface WidgetConfig {
 | 
			
		||||
 | 
			
		||||
@ -2263,6 +2263,7 @@
 | 
			
		||||
        "total": "total",
 | 
			
		||||
        "comparison-time-ago": {
 | 
			
		||||
            "previousInterval": "(previous interval)",
 | 
			
		||||
            "customInterval": "(custom interval)",
 | 
			
		||||
            "days": "(day ago)",
 | 
			
		||||
            "weeks": "(week ago)",
 | 
			
		||||
            "months": "(month ago)",
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user