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