Commit 40252c99b1f330696903a15ab1aae5ee661e1103

Authored by Chantsova Ekaterina
1 parent 74aca329

UI: add custom interval option to charts comparison

... ... @@ -238,6 +238,7 @@ export interface WidgetSubscriptionOptions {
238 238 legendConfig?: LegendConfig;
239 239 comparisonEnabled?: boolean;
240 240 timeForComparison?: moment_.unitOfTime.DurationConstructor;
  241 + comparisonCustomIntervalValue?: number;
241 242 decimals?: number;
242 243 units?: string;
243 244 callbacks?: WidgetSubscriptionCallbacks;
... ...
... ... @@ -109,6 +109,7 @@ export class WidgetSubscription implements IWidgetSubscription {
109 109 units: string;
110 110 comparisonEnabled: boolean;
111 111 timeForComparison: ComparisonDuration;
  112 + comparisonCustomIntervalValue: number;
112 113 comparisonTimeWindow: WidgetTimewindow;
113 114 timewindowForComparison: SubscriptionTimewindow;
114 115
... ... @@ -233,6 +234,7 @@ export class WidgetSubscription implements IWidgetSubscription {
233 234 this.comparisonEnabled = options.comparisonEnabled && isHistoryTypeTimewindow(this.timeWindowConfig);
234 235 if (this.comparisonEnabled) {
235 236 this.timeForComparison = options.timeForComparison;
  237 + this.comparisonCustomIntervalValue = options.comparisonCustomIntervalValue;
236 238
237 239 this.comparisonTimeWindow = {};
238 240 this.timewindowForComparison = null;
... ... @@ -1154,7 +1156,8 @@ export class WidgetSubscription implements IWidgetSubscription {
1154 1156 }
1155 1157
1156 1158 private updateSubscriptionForComparison(): SubscriptionTimewindow {
1157   - this.timewindowForComparison = createTimewindowForComparison(this.subscriptionTimewindow, this.timeForComparison);
  1159 + this.timewindowForComparison = createTimewindowForComparison(this.subscriptionTimewindow, this.timeForComparison,
  1160 + this.comparisonCustomIntervalValue);
1158 1161 this.updateComparisonTimewindow();
1159 1162 return this.timewindowForComparison;
1160 1163 }
... ...
... ... @@ -145,6 +145,7 @@ export interface TbFlotComparisonSettings {
145 145 comparisonEnabled: boolean;
146 146 timeForComparison: ComparisonDuration;
147 147 xaxisSecond: TbFlotSecondXAxisSettings;
  148 + comparisonCustomIntervalValue?: number;
148 149 }
149 150
150 151 export interface TbFlotThresholdsSettings {
... ... @@ -546,6 +547,11 @@ const chartSettingsSchemaForComparison: JsonSettingsSchema = {
546 547 type: 'string',
547 548 default: 'previousInterval'
548 549 },
  550 + comparisonCustomIntervalValue: {
  551 + title: 'Custom interval value (ms)',
  552 + type: 'number',
  553 + default: 7200000
  554 + },
549 555 xaxisSecond: {
550 556 title: 'Second X axis',
551 557 type: 'object',
... ... @@ -596,10 +602,18 @@ const chartSettingsSchemaForComparison: JsonSettingsSchema = {
596 602 {
597 603 value: 'years',
598 604 label: 'Year ago'
  605 + },
  606 + {
  607 + value: 'customInterval',
  608 + label: 'Custom interval'
599 609 }
600 610 ]
601 611 },
602 612 {
  613 + key: 'comparisonCustomIntervalValue',
  614 + condition: 'model.timeForComparison === "customInterval"'
  615 + },
  616 + {
603 617 key: 'xaxisSecond',
604 618 items: [
605 619 {
... ...
... ... @@ -907,7 +907,8 @@ export class WidgetComponent extends PageComponent implements OnInit, AfterViewI
907 907 warnOnPageDataOverflow: this.typeParameters.warnOnPageDataOverflow,
908 908 ignoreDataUpdateOnIntervalTick: this.typeParameters.ignoreDataUpdateOnIntervalTick,
909 909 comparisonEnabled: comparisonSettings.comparisonEnabled,
910   - timeForComparison: comparisonSettings.timeForComparison
  910 + timeForComparison: comparisonSettings.timeForComparison,
  911 + comparisonCustomIntervalValue: comparisonSettings.comparisonCustomIntervalValue
911 912 };
912 913 if (this.widget.type === widgetType.alarm) {
913 914 options.alarmSource = deepClone(this.widget.config.alarmSource);
... ...
... ... @@ -15,7 +15,7 @@
15 15 ///
16 16
17 17 import { TimeService } from '@core/services/time.service';
18   -import { deepClone, isDefined, isUndefined } from '@app/core/utils';
  18 +import { deepClone, isDefined, isNumeric, isUndefined } from '@app/core/utils';
19 19 import * as moment_ from 'moment';
20 20 import * as momentTz from 'moment-timezone';
21 21
... ... @@ -28,7 +28,7 @@ export const DAY = 24 * HOUR;
28 28 export const WEEK = 7 * DAY;
29 29 export const YEAR = DAY * 365;
30 30
31   -export type ComparisonDuration = moment_.unitOfTime.DurationConstructor | 'previousInterval';
  31 +export type ComparisonDuration = moment_.unitOfTime.DurationConstructor | 'previousInterval' | 'customInterval';
32 32
33 33 export enum TimewindowType {
34 34 REALTIME,
... ... @@ -640,7 +640,7 @@ export function calculateIntervalComparisonEndTime(interval: QuickTimeInterval,
640 640 }
641 641
642 642 export function createTimewindowForComparison(subscriptionTimewindow: SubscriptionTimewindow,
643   - timeUnit: ComparisonDuration): SubscriptionTimewindow {
  643 + timeUnit: ComparisonDuration, customIntervalValue: number): SubscriptionTimewindow {
644 644 const timewindowForComparison: SubscriptionTimewindow = {
645 645 fixedWindow: null,
646 646 realtimeWindowMs: null,
... ... @@ -667,6 +667,15 @@ export function createTimewindowForComparison(subscriptionTimewindow: Subscripti
667 667 endTimeMs = subscriptionTimewindow.fixedWindow.startTimeMs;
668 668 startTimeMs = endTimeMs - timeInterval;
669 669 }
  670 + } else if (timeUnit === 'customInterval') {
  671 + if (isNumeric(customIntervalValue) && isFinite(customIntervalValue) && customIntervalValue > 0) {
  672 + const timeInterval = subscriptionTimewindow.fixedWindow.endTimeMs - subscriptionTimewindow.fixedWindow.startTimeMs;
  673 + endTimeMs = subscriptionTimewindow.fixedWindow.endTimeMs - Math.round(customIntervalValue);
  674 + startTimeMs = endTimeMs - timeInterval;
  675 + } else {
  676 + endTimeMs = subscriptionTimewindow.fixedWindow.endTimeMs;
  677 + startTimeMs = subscriptionTimewindow.fixedWindow.startTimeMs;
  678 + }
670 679 } else {
671 680 const timeInterval = subscriptionTimewindow.fixedWindow.endTimeMs - subscriptionTimewindow.fixedWindow.startTimeMs;
672 681 endTimeMs = moment(subscriptionTimewindow.fixedWindow.endTimeMs).subtract(1, timeUnit).valueOf();
... ...
... ... @@ -467,6 +467,7 @@ export interface WidgetActionDescriptor extends CustomActionDescriptor {
467 467 export interface WidgetComparisonSettings {
468 468 comparisonEnabled?: boolean;
469 469 timeForComparison?: moment_.unitOfTime.DurationConstructor;
  470 + comparisonCustomIntervalValue?: number;
470 471 }
471 472
472 473 export interface WidgetConfig {
... ...
... ... @@ -2258,6 +2258,7 @@
2258 2258 "total": "total",
2259 2259 "comparison-time-ago": {
2260 2260 "previousInterval": "(previous interval)",
  2261 + "customInterval": "(custom interval)",
2261 2262 "days": "(day ago)",
2262 2263 "weeks": "(week ago)",
2263 2264 "months": "(month ago)",
... ...