Merge pull request #13226 from vvlladd28/bug/widger-settings/mutation-default-settings

Fix mutation of default widget settings
This commit is contained in:
Igor Kulikov 2025-04-17 12:50:57 +03:00 committed by GitHub
commit 221a68c719
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
33 changed files with 60 additions and 64 deletions

View File

@ -40,7 +40,7 @@ export class AlarmCountWidgetSettingsComponent extends WidgetSettingsComponent {
}
protected defaultSettings(): WidgetSettings {
return {...countDefaultSettings(true)};
return countDefaultSettings(true);
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -56,7 +56,7 @@ export class ActionButtonWidgetSettingsComponent extends WidgetSettingsComponent
}
protected defaultSettings(): WidgetSettings {
return {...actionButtonDefaultSettings};
return actionButtonDefaultSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -54,7 +54,7 @@ export class CommandButtonWidgetSettingsComponent extends WidgetSettingsComponen
}
protected defaultSettings(): WidgetSettings {
return {...commandButtonDefaultSettings};
return commandButtonDefaultSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -61,7 +61,7 @@ export class PowerButtonWidgetSettingsComponent extends WidgetSettingsComponent
}
protected defaultSettings(): WidgetSettings {
return {...powerButtonDefaultSettings};
return powerButtonDefaultSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -77,7 +77,7 @@ export class SegmentedButtonWidgetSettingsComponent extends WidgetSettingsCompon
}
protected defaultSettings(): WidgetSettings {
return {...segmentedButtonDefaultSettings};
return segmentedButtonDefaultSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -55,7 +55,7 @@ export class ToggleButtonWidgetSettingsComponent extends WidgetSettingsComponent
}
protected defaultSettings(): WidgetSettings {
return {...toggleButtonDefaultSettings};
return toggleButtonDefaultSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -24,7 +24,6 @@ import {
AggregatedValueCardKeyPosition,
aggregatedValueCardKeyPositionTranslations
} from '@home/components/widget/lib/cards/aggregated-value-card.models';
import { constantColor } from '@shared/models/widget-settings.models';
@Component({
selector: 'tb-aggregated-value-card-key-settings',
@ -50,7 +49,7 @@ export class AggregatedValueCardKeySettingsComponent extends WidgetSettingsCompo
}
protected defaultSettings(): WidgetSettings {
return {...aggregatedValueCardDefaultKeySettings};
return aggregatedValueCardDefaultKeySettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -44,7 +44,7 @@ export class AggregatedValueCardWidgetSettingsComponent extends WidgetSettingsCo
}
protected defaultSettings(): WidgetSettings {
return {...aggregatedValueCardDefaultSettings};
return aggregatedValueCardDefaultSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -40,7 +40,7 @@ export class LabelCardWidgetSettingsComponent extends WidgetSettingsComponent {
}
protected defaultSettings(): WidgetSettings {
return {...labelCardWidgetDefaultSettings};
return labelCardWidgetDefaultSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -43,7 +43,7 @@ export class LabelValueCardWidgetSettingsComponent extends WidgetSettingsCompone
}
protected defaultSettings(): WidgetSettings {
return {...labelValueCardWidgetDefaultSettings};
return labelValueCardWidgetDefaultSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -15,7 +15,7 @@
///
import { Component } from "@angular/core";
import { UntypedFormBuilder, UntypedFormGroup, Validators } from "@angular/forms";
import { UntypedFormBuilder, UntypedFormGroup } from "@angular/forms";
import { WidgetSettings, WidgetSettingsComponent } from "@shared/models/widget.models";
import { AppState } from '@core/core.state';
import { Store } from "@ngrx/store";
@ -43,7 +43,7 @@ export class MobileAppQrCodeWidgetSettingsComponent extends WidgetSettingsCompon
}
protected defaultSettings(): WidgetSettings {
return {...mobileAppQrCodeWidgetDefaultSettings};
return mobileAppQrCodeWidgetDefaultSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -57,7 +57,7 @@ export class ProgressBarWidgetSettingsComponent extends WidgetSettingsComponent
}
protected defaultSettings(): WidgetSettings {
return {...progressBarDefaultSettings};
return progressBarDefaultSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -42,7 +42,7 @@ export class UnreadNotificationWidgetSettingsComponent extends WidgetSettingsCom
}
protected defaultSettings(): WidgetSettings {
return {...unreadNotificationDefaultSettings};
return unreadNotificationDefaultSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -54,7 +54,7 @@ export class ValueChartCardWidgetSettingsComponent extends WidgetSettingsCompone
}
protected defaultSettings(): WidgetSettings {
return {...valueChartCardDefaultSettings};
return valueChartCardDefaultSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -25,10 +25,10 @@ import {
import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
import { Store } from '@ngrx/store';
import { AppState } from '@core/core.state';
import { formatValue, mergeDeep } from '@core/utils';
import { formatValue } from '@core/utils';
import { DateFormatProcessor, DateFormatSettings } from '@shared/models/widget-settings.models';
import {
barChartWithLabelsDefaultSettings, BarChartWithLabelsWidgetSettings
barChartWithLabelsDefaultSettings
} from '@home/components/widget/lib/chart/bar-chart-with-labels-widget.models';
@Component({
@ -68,7 +68,7 @@ export class BarChartWithLabelsWidgetSettingsComponent extends WidgetSettingsCom
}
protected defaultSettings(): WidgetSettings {
return mergeDeep<BarChartWithLabelsWidgetSettings>({} as BarChartWithLabelsWidgetSettings, barChartWithLabelsDefaultSettings);
return barChartWithLabelsDefaultSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -29,9 +29,11 @@ import {
} from '@shared/models/widget.models';
import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
import {
DoughnutLayout, doughnutLayoutImages,
DoughnutLayout,
doughnutLayoutImages,
doughnutLayouts,
doughnutLayoutTranslations, horizontalDoughnutLayoutImages
doughnutLayoutTranslations,
horizontalDoughnutLayoutImages
} from '@home/components/widget/lib/chart/doughnut-widget.models';
import {
chartLabelPositions,
@ -44,7 +46,7 @@ import {
pieChartLabelPositionTranslations
} from '@home/components/widget/lib/chart/chart.models';
import { radarChartShapes, radarChartShapeTranslations } from '@home/components/widget/lib/chart/radar-chart.models';
import { formatValue, isDefinedAndNotNull, mergeDeep } from '@core/utils';
import { formatValue, isDefinedAndNotNull } from '@core/utils';
import { Store } from '@ngrx/store';
import { AppState } from '@core/core.state';
import { WidgetConfigComponentData } from '@home/models/widget-component.models';
@ -116,7 +118,7 @@ export abstract class LatestChartWidgetSettingsComponent<S extends LatestChartWi
}
protected defaultSettings(): WidgetSettings {
return mergeDeep<S>({} as S, this.defaultLatestChartSettings());
return this.defaultLatestChartSettings();
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -25,11 +25,8 @@ import {
import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';
import { Store } from '@ngrx/store';
import { AppState } from '@core/core.state';
import { formatValue, mergeDeepIgnoreArray } from '@core/utils';
import {
rangeChartDefaultSettings,
RangeChartWidgetSettings
} from '@home/components/widget/lib/chart/range-chart-widget.models';
import { formatValue } from '@core/utils';
import { rangeChartDefaultSettings } from '@home/components/widget/lib/chart/range-chart-widget.models';
import { DateFormatProcessor, DateFormatSettings } from '@shared/models/widget-settings.models';
import {
lineSeriesStepTypes,
@ -99,7 +96,7 @@ export class RangeChartWidgetSettingsComponent extends WidgetSettingsComponent {
}
protected defaultSettings(): WidgetSettings {
return mergeDeepIgnoreArray<RangeChartWidgetSettings>({} as RangeChartWidgetSettings, rangeChartDefaultSettings);
return rangeChartDefaultSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -19,13 +19,16 @@ import { WidgetSettings, WidgetSettingsComponent } from '@shared/models/widget.m
import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
import { Store } from '@ngrx/store';
import { AppState } from '@core/core.state';
import { isDefinedAndNotNull, mergeDeep } from '@core/utils';
import { isDefinedAndNotNull } from '@core/utils';
import {
timeSeriesChartKeyDefaultSettings,
TimeSeriesChartKeySettings,
TimeSeriesChartSeriesType,
timeSeriesChartSeriesTypes,
timeSeriesChartSeriesTypeTranslations, TimeSeriesChartType, timeSeriesChartTypeTranslations, TimeSeriesChartYAxisId
timeSeriesChartSeriesTypeTranslations,
TimeSeriesChartType,
timeSeriesChartTypeTranslations,
TimeSeriesChartYAxisId
} from '@home/components/widget/lib/chart/time-series-chart.models';
import { WidgetConfigComponentData } from '@home/models/widget-component.models';
import { TimeSeriesChartWidgetSettings } from '@home/components/widget/lib/chart/time-series-chart-widget.models';
@ -79,8 +82,7 @@ export class TimeSeriesChartKeySettingsComponent extends WidgetSettingsComponent
}
protected defaultSettings(): WidgetSettings {
return mergeDeep<TimeSeriesChartKeySettings>({} as TimeSeriesChartKeySettings,
timeSeriesChartKeyDefaultSettings);
return timeSeriesChartKeyDefaultSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -26,11 +26,10 @@ import {
import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';
import { Store } from '@ngrx/store';
import { AppState } from '@core/core.state';
import { formatValue, isDefinedAndNotNull, mergeDeep } from '@core/utils';
import { formatValue, isDefinedAndNotNull } from '@core/utils';
import { DateFormatProcessor, DateFormatSettings } from '@shared/models/widget-settings.models';
import {
timeSeriesChartWidgetDefaultSettings,
TimeSeriesChartWidgetSettings
timeSeriesChartWidgetDefaultSettings
} from '@home/components/widget/lib/chart/time-series-chart-widget.models';
import {
TimeSeriesChartKeySettings,
@ -120,7 +119,7 @@ export class TimeSeriesChartWidgetSettingsComponent extends WidgetSettingsCompon
}
protected defaultSettings(): WidgetSettings {
return mergeDeep<TimeSeriesChartWidgetSettings>({} as TimeSeriesChartWidgetSettings, timeSeriesChartWidgetDefaultSettings);
return timeSeriesChartWidgetDefaultSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -61,7 +61,7 @@ export class SingleSwitchWidgetSettingsComponent extends WidgetSettingsComponent
}
protected defaultSettings(): WidgetSettings {
return {...singleSwitchDefaultSettings};
return singleSwitchDefaultSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -67,7 +67,7 @@ export class SliderWidgetSettingsComponent extends WidgetSettingsComponent {
}
protected defaultSettings(): WidgetSettings {
return {...sliderWidgetDefaultSettings};
return sliderWidgetDefaultSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -72,7 +72,7 @@ export class ValueStepperWidgetSettingsComponent extends WidgetSettingsComponent
}
protected defaultSettings(): WidgetSettings {
return {...valueStepperDefaultSettings};
return valueStepperDefaultSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -40,7 +40,7 @@ export class EntityCountWidgetSettingsComponent extends WidgetSettingsComponent
}
protected defaultSettings(): WidgetSettings {
return {...countDefaultSettings(false)};
return countDefaultSettings(false);
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -21,7 +21,8 @@ import { Store } from '@ngrx/store';
import { AppState } from '@core/core.state';
import { formatValue } from '@core/utils';
import {
batteryLevelDefaultSettings, BatteryLevelLayout,
batteryLevelDefaultSettings,
BatteryLevelLayout,
batteryLevelLayoutImages,
batteryLevelLayouts,
batteryLevelLayoutTranslations
@ -68,7 +69,7 @@ export class BatteryLevelWidgetSettingsComponent extends WidgetSettingsComponent
}
protected defaultSettings(): WidgetSettings {
return {...batteryLevelDefaultSettings};
return batteryLevelDefaultSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -57,7 +57,7 @@ export class SignalStrengthWidgetSettingsComponent extends WidgetSettingsCompone
}
protected defaultSettings(): WidgetSettings {
return {...signalStrengthDefaultSettings};
return signalStrengthDefaultSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -64,7 +64,7 @@ export class StatusWidgetSettingsComponent extends WidgetSettingsComponent {
}
protected defaultSettings(): WidgetSettings {
return {...statusWidgetDefaultSettings};
return statusWidgetDefaultSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -40,9 +40,7 @@ export class MapWidgetSettingsLegacyComponent extends WidgetSettingsComponent {
}
protected defaultSettings(): WidgetSettings {
return {
...defaultMapSettings
};
return defaultMapSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -40,9 +40,7 @@ export class RouteMapWidgetSettingsComponent extends WidgetSettingsComponent {
}
protected defaultSettings(): WidgetSettings {
return {
...defaultMapSettings
};
return defaultMapSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -57,9 +57,7 @@ export class TripAnimationWidgetSettingsComponent extends WidgetSettingsComponen
}
protected defaultSettings(): WidgetSettings {
return {
...defaultTripAnimationSettings
};
return defaultTripAnimationSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -19,8 +19,8 @@ import { WidgetSettings, WidgetSettingsComponent } from '@shared/models/widget.m
import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
import { Store } from '@ngrx/store';
import { AppState } from '@core/core.state';
import { isDefinedAndNotNull, mergeDeepIgnoreArray } from '@core/utils';
import { mapWidgetDefaultSettings, MapWidgetSettings } from '@home/components/widget/lib/maps/map-widget.models';
import { isDefinedAndNotNull } from '@core/utils';
import { mapWidgetDefaultSettings } from '@home/components/widget/lib/maps/map-widget.models';
import { WidgetConfigComponentData } from '@home/models/widget-component.models';
@Component({
@ -53,7 +53,7 @@ export class MapWidgetSettingsComponent extends WidgetSettingsComponent {
}
protected defaultSettings(): WidgetSettings {
return mergeDeepIgnoreArray<MapWidgetSettings>({} as MapWidgetSettings, mapWidgetDefaultSettings);
return mapWidgetDefaultSettings;
}
protected prepareInputSettings(settings: WidgetSettings): WidgetSettings {

View File

@ -48,7 +48,7 @@ export class ScadaSymbolWidgetSettingsComponent extends WidgetSettingsComponent
}
protected defaultSettings(): WidgetSettings {
return {...scadaSymbolWidgetDefaultSettings};
return scadaSymbolWidgetDefaultSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -70,7 +70,7 @@ export class WindSpeedDirectionWidgetSettingsComponent extends WidgetSettingsCom
}
protected defaultSettings(): WidgetSettings {
return {...windSpeedDirectionDefaultSettings};
return windSpeedDirectionDefaultSettings;
}
protected onSettingsSet(settings: WidgetSettings) {

View File

@ -37,17 +37,19 @@ import { AbstractControl, UntypedFormGroup } from '@angular/forms';
import { Observable } from 'rxjs';
import { Dashboard } from '@shared/models/dashboard.models';
import { IAliasController } from '@core/api/widget-api.models';
import { isNotEmptyStr, mergeDeepIgnoreArray } from '@core/utils';
import { isNotEmptyStr, mergeDeep, mergeDeepIgnoreArray } from '@core/utils';
import { WidgetConfigComponentData } from '@home/models/widget-component.models';
import { ComponentStyle, Font, TimewindowStyle } from '@shared/models/widget-settings.models';
import { NULL_UUID } from '@shared/models/id/has-uuid';
import { EntityInfoData, HasTenantId, HasVersion } from '@shared/models/entity.models';
import { DataKeysCallbacks, DataKeySettingsFunction } from '@home/components/widget/lib/settings/common/key/data-keys.component.models';
import {
DataKeysCallbacks,
DataKeySettingsFunction
} from '@home/components/widget/lib/settings/common/key/data-keys.component.models';
import { WidgetConfigCallbacks } from '@home/components/widget/config/widget-config.component.models';
import { TbFunction } from '@shared/models/js-function.models';
import { FormProperty, jsonFormSchemaToFormProperties } from '@shared/models/dynamic-form.models';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { Device } from '@shared/models/device.models';
export enum widgetType {
timeseries = 'timeseries',
@ -1000,9 +1002,9 @@ export abstract class WidgetSettingsComponent extends PageComponent implements
set settings(value: WidgetSettings) {
if (!value) {
this.settingsValue = this.defaultSettings();
this.settingsValue = mergeDeep({}, this.defaultSettings());
} else {
this.settingsValue = mergeDeepIgnoreArray(this.defaultSettings(), value);
this.settingsValue = mergeDeepIgnoreArray({}, this.defaultSettings(), value);
}
if (!this.settingsSet) {
this.settingsSet = true;