Timewindow: optimize advanced configuration parameters update, add deepClean
This commit is contained in:
parent
083078b7f5
commit
6d509ca5d9
@ -27,7 +27,8 @@ import { serverErrorCodesTranslations } from '@shared/models/constants';
|
||||
import { SubscriptionEntityInfo } from '@core/api/widget-api.models';
|
||||
import {
|
||||
CompiledTbFunction,
|
||||
compileTbFunction, GenericFunction,
|
||||
compileTbFunction,
|
||||
GenericFunction,
|
||||
isNotEmptyTbFunction,
|
||||
TbFunction
|
||||
} from '@shared/models/js-function.models';
|
||||
@ -773,6 +774,33 @@ export function deepTrim<T>(obj: T): T {
|
||||
}, (Array.isArray(obj) ? [] : {}) as T);
|
||||
}
|
||||
|
||||
export function deepClean<T extends Record<string, any> | any[]>(obj: T, {
|
||||
cleanKeys = []
|
||||
} = {}): T {
|
||||
return _.transform(obj, (result, value, key) => {
|
||||
if (cleanKeys.includes(key)) {
|
||||
return;
|
||||
}
|
||||
if (Array.isArray(value) || isLiteralObject(value)) {
|
||||
value = deepClean(value, {cleanKeys});
|
||||
}
|
||||
if(isLiteralObject(value) && isEmpty(value)) {
|
||||
return;
|
||||
}
|
||||
if (Array.isArray(value) && !value.length) {
|
||||
return;
|
||||
}
|
||||
if (value === undefined || value === null || value === '' || Number.isNaN(value)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (Array.isArray(result)) {
|
||||
return result.push(value);
|
||||
}
|
||||
result[key] = value;
|
||||
});
|
||||
}
|
||||
|
||||
export function generateSecret(length?: number): string {
|
||||
if (isUndefined(length) || length == null) {
|
||||
length = 1;
|
||||
|
||||
@ -36,7 +36,7 @@ import { Store } from '@ngrx/store';
|
||||
import { AppState } from '@core/core.state';
|
||||
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
||||
import { TimeService } from '@core/services/time.service';
|
||||
import { deepClone, isDefined, isDefinedAndNotNull, isObject, mergeDeep } from '@core/utils';
|
||||
import { deepClean, deepClone, isDefined, isDefinedAndNotNull, isEmpty, mergeDeepIgnoreArray } from '@core/utils';
|
||||
import { ToggleHeaderOption } from '@shared/components/toggle-header.component';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
@ -423,7 +423,7 @@ export class TimewindowConfigDialogComponent extends PageComponent implements On
|
||||
|
||||
update() {
|
||||
const timewindowFormValue = this.timewindowForm.getRawValue();
|
||||
this.timewindow = mergeDeep(this.timewindow, timewindowFormValue);
|
||||
this.timewindow = mergeDeepIgnoreArray(this.timewindow, timewindowFormValue);
|
||||
|
||||
const realtimeConfigurableLastIntervalsAvailable = !(timewindowFormValue.hideAggInterval &&
|
||||
(timewindowFormValue.realtime.hideInterval || timewindowFormValue.realtime.hideLastInterval));
|
||||
@ -434,62 +434,41 @@ export class TimewindowConfigDialogComponent extends PageComponent implements On
|
||||
const historyConfigurableQuickIntervalsAvailable = !(timewindowFormValue.hideAggInterval &&
|
||||
(timewindowFormValue.history.hideInterval || timewindowFormValue.history.hideQuickInterval));
|
||||
|
||||
if (realtimeConfigurableLastIntervalsAvailable && timewindowFormValue.realtime.advancedParams.allowedLastIntervals?.length) {
|
||||
this.timewindow.realtime.advancedParams.allowedLastIntervals = timewindowFormValue.realtime.advancedParams.allowedLastIntervals;
|
||||
} else {
|
||||
if (!realtimeConfigurableLastIntervalsAvailable) {
|
||||
delete this.timewindow.realtime.advancedParams.allowedLastIntervals;
|
||||
}
|
||||
if (realtimeConfigurableQuickIntervalsAvailable && timewindowFormValue.realtime.advancedParams.allowedQuickIntervals?.length) {
|
||||
this.timewindow.realtime.advancedParams.allowedQuickIntervals = timewindowFormValue.realtime.advancedParams.allowedQuickIntervals;
|
||||
} else {
|
||||
if (!realtimeConfigurableQuickIntervalsAvailable) {
|
||||
delete this.timewindow.realtime.advancedParams.allowedQuickIntervals;
|
||||
}
|
||||
if (realtimeConfigurableLastIntervalsAvailable && isObject(timewindowFormValue.realtime.advancedParams.lastAggIntervalsConfig) &&
|
||||
Object.keys(timewindowFormValue.realtime.advancedParams.lastAggIntervalsConfig).length) {
|
||||
if (realtimeConfigurableLastIntervalsAvailable && !isEmpty(timewindowFormValue.realtime.advancedParams.lastAggIntervalsConfig)) {
|
||||
this.timewindow.realtime.advancedParams.lastAggIntervalsConfig = timewindowFormValue.realtime.advancedParams.lastAggIntervalsConfig;
|
||||
} else {
|
||||
delete this.timewindow.realtime.advancedParams.lastAggIntervalsConfig;
|
||||
}
|
||||
if (realtimeConfigurableQuickIntervalsAvailable && isObject(timewindowFormValue.realtime.advancedParams.quickAggIntervalsConfig) &&
|
||||
Object.keys(timewindowFormValue.realtime.advancedParams.quickAggIntervalsConfig).length) {
|
||||
if (realtimeConfigurableQuickIntervalsAvailable && !isEmpty(timewindowFormValue.realtime.advancedParams.quickAggIntervalsConfig)) {
|
||||
this.timewindow.realtime.advancedParams.quickAggIntervalsConfig = timewindowFormValue.realtime.advancedParams.quickAggIntervalsConfig;
|
||||
} else {
|
||||
delete this.timewindow.realtime.advancedParams.quickAggIntervalsConfig;
|
||||
}
|
||||
|
||||
if (historyConfigurableLastIntervalsAvailable && timewindowFormValue.history.advancedParams.allowedLastIntervals?.length) {
|
||||
this.timewindow.history.advancedParams.allowedLastIntervals = timewindowFormValue.history.advancedParams.allowedLastIntervals;
|
||||
} else {
|
||||
if (!historyConfigurableLastIntervalsAvailable) {
|
||||
delete this.timewindow.history.advancedParams.allowedLastIntervals;
|
||||
}
|
||||
if (historyConfigurableQuickIntervalsAvailable && timewindowFormValue.history.advancedParams.allowedQuickIntervals?.length) {
|
||||
this.timewindow.history.advancedParams.allowedQuickIntervals = timewindowFormValue.history.advancedParams.allowedQuickIntervals;
|
||||
} else {
|
||||
if (!historyConfigurableQuickIntervalsAvailable) {
|
||||
delete this.timewindow.history.advancedParams.allowedQuickIntervals;
|
||||
}
|
||||
if (historyConfigurableLastIntervalsAvailable && isObject(timewindowFormValue.history.advancedParams.lastAggIntervalsConfig) &&
|
||||
Object.keys(timewindowFormValue.history.advancedParams.lastAggIntervalsConfig).length) {
|
||||
if (historyConfigurableLastIntervalsAvailable && !isEmpty(timewindowFormValue.history.advancedParams.lastAggIntervalsConfig)) {
|
||||
this.timewindow.history.advancedParams.lastAggIntervalsConfig = timewindowFormValue.history.advancedParams.lastAggIntervalsConfig;
|
||||
} else {
|
||||
delete this.timewindow.history.advancedParams.lastAggIntervalsConfig;
|
||||
}
|
||||
if (historyConfigurableQuickIntervalsAvailable && isObject(timewindowFormValue.history.advancedParams.quickAggIntervalsConfig) &&
|
||||
Object.keys(timewindowFormValue.history.advancedParams.quickAggIntervalsConfig).length) {
|
||||
if (historyConfigurableQuickIntervalsAvailable && !isEmpty(timewindowFormValue.history.advancedParams.quickAggIntervalsConfig)) {
|
||||
this.timewindow.history.advancedParams.quickAggIntervalsConfig = timewindowFormValue.history.advancedParams.quickAggIntervalsConfig;
|
||||
} else {
|
||||
delete this.timewindow.history.advancedParams.quickAggIntervalsConfig;
|
||||
}
|
||||
|
||||
if (!Object.keys(this.timewindow.realtime.advancedParams).length) {
|
||||
delete this.timewindow.realtime.advancedParams;
|
||||
}
|
||||
if (!Object.keys(this.timewindow.history.advancedParams).length) {
|
||||
delete this.timewindow.history.advancedParams;
|
||||
}
|
||||
|
||||
if (timewindowFormValue.allowedAggTypes?.length && !timewindowFormValue.hideAggregation) {
|
||||
this.timewindow.allowedAggTypes = timewindowFormValue.allowedAggTypes;
|
||||
} else {
|
||||
if (timewindowFormValue.hideAggregation) {
|
||||
delete this.timewindow.allowedAggTypes;
|
||||
}
|
||||
|
||||
@ -541,7 +520,7 @@ export class TimewindowConfigDialogComponent extends PageComponent implements On
|
||||
if (!this.aggregation) {
|
||||
delete this.timewindow.aggregation;
|
||||
}
|
||||
this.dialogRef.close(this.timewindow);
|
||||
this.dialogRef.close(deepClean(this.timewindow));
|
||||
}
|
||||
|
||||
cancel() {
|
||||
|
||||
@ -382,8 +382,7 @@ export class TimewindowPanelComponent extends PageComponent implements OnInit, O
|
||||
takeUntil(this.destroy$)
|
||||
).subscribe(() => {
|
||||
this.prepareTimewindowConfig();
|
||||
this.clearTimewindowConfig();
|
||||
this.changeTimewindow.emit(this.timewindow);
|
||||
this.changeTimewindow.emit(this.clearTimewindowConfig());
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -410,8 +409,7 @@ export class TimewindowPanelComponent extends PageComponent implements OnInit, O
|
||||
|
||||
update() {
|
||||
this.prepareTimewindowConfig();
|
||||
this.clearTimewindowConfig();
|
||||
this.result = this.timewindow;
|
||||
this.result = this.clearTimewindowConfig();
|
||||
this.overlayRef?.dispose();
|
||||
}
|
||||
|
||||
@ -447,8 +445,8 @@ export class TimewindowPanelComponent extends PageComponent implements OnInit, O
|
||||
}
|
||||
}
|
||||
|
||||
private clearTimewindowConfig() {
|
||||
clearTimewindowConfig(this.timewindow, this.quickIntervalOnly, this.historyOnly, this.aggregation, this.timezone);
|
||||
private clearTimewindowConfig(): Timewindow {
|
||||
return clearTimewindowConfig(this.timewindow, this.quickIntervalOnly, this.historyOnly, this.aggregation, this.timezone);
|
||||
}
|
||||
|
||||
private updateTimewindowForm() {
|
||||
|
||||
@ -15,12 +15,11 @@
|
||||
///
|
||||
|
||||
import { TimeService } from '@core/services/time.service';
|
||||
import { deepClone, isDefined, isDefinedAndNotNull, isNumeric, isUndefined, isUndefinedOrNull } from '@app/core/utils';
|
||||
import { deepClean, deepClone, isDefined, isDefinedAndNotNull, isNumeric, isUndefined } from '@app/core/utils';
|
||||
import moment_ from 'moment';
|
||||
import * as momentTz from 'moment-timezone';
|
||||
import { IntervalType } from '@shared/models/telemetry/telemetry.models';
|
||||
import { FormGroup } from '@angular/forms';
|
||||
import { isEmpty } from 'lodash';
|
||||
|
||||
const moment = moment_;
|
||||
|
||||
@ -457,8 +456,7 @@ export const initModelFromDefaultTimewindow = (value: Timewindow, quickIntervalO
|
||||
if (historyOnly) {
|
||||
model.selectedTab = TimewindowType.HISTORY;
|
||||
}
|
||||
clearTimewindowConfig(model, quickIntervalOnly, historyOnly, hasAggregation);
|
||||
return model;
|
||||
return clearTimewindowConfig(model, quickIntervalOnly, historyOnly, hasAggregation);
|
||||
};
|
||||
|
||||
export const toHistoryTimewindow = (timewindow: Timewindow, startTimeMs: number, endTimeMs: number,
|
||||
@ -1173,17 +1171,14 @@ export const clearTimewindowConfig = (timewindow: Timewindow, quickIntervalOnly:
|
||||
delete timewindow.aggregation;
|
||||
}
|
||||
|
||||
if (isEmpty(timewindow.history)) {
|
||||
delete timewindow.history;
|
||||
}
|
||||
if (historyOnly || isEmpty(timewindow.realtime)) {
|
||||
if (historyOnly) {
|
||||
delete timewindow.realtime;
|
||||
}
|
||||
|
||||
if (!hasTimezone || isUndefinedOrNull(timewindow.timezone)) {
|
||||
if (!hasTimezone) {
|
||||
delete timewindow.timezone;
|
||||
}
|
||||
return timewindow;
|
||||
return deepClean(timewindow);
|
||||
};
|
||||
|
||||
export interface TimeInterval {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user