diff --git a/packages/core/src/data_sources/model/DataVariableListenerManager.ts b/packages/core/src/data_sources/model/DataVariableListenerManager.ts index d10fbd43d..82a4fb913 100644 --- a/packages/core/src/data_sources/model/DataVariableListenerManager.ts +++ b/packages/core/src/data_sources/model/DataVariableListenerManager.ts @@ -3,13 +3,11 @@ import { stringToPath } from '../../utils/mixins'; import { Model } from '../../common'; import EditorModel from '../../editor/model/Editor'; import DataVariable, { DataVariableType } from './DataVariable'; -import ComponentView from '../../dom_components/view/ComponentView'; import { DynamicValue } from '../types'; import { DataCondition, ConditionalVariableType } from './conditional_variables/DataCondition'; import ComponentDataVariable from './ComponentDataVariable'; export interface DynamicVariableListenerManagerOptions { - model: Model | ComponentView; em: EditorModel; dataVariable: DynamicValue; updateValueFromDataVariable: (value: any) => void; @@ -18,13 +16,12 @@ export interface DynamicVariableListenerManagerOptions { export default class DynamicVariableListenerManager { private dataListeners: DataVariableListener[] = []; private em: EditorModel; - private model: Model | ComponentView; private dynamicVariable: DynamicValue; private updateValueFromDynamicVariable: (value: any) => void; + private model = new Model(); constructor(options: DynamicVariableListenerManagerOptions) { this.em = options.em; - this.model = options.model; this.dynamicVariable = options.dataVariable; this.updateValueFromDynamicVariable = options.updateValueFromDataVariable; @@ -37,7 +34,7 @@ export default class DynamicVariableListenerManager { }; listenToDynamicVariable() { - const { em, dynamicVariable, model } = this; + const { em, dynamicVariable } = this; this.removeListeners(); // @ts-ignore @@ -51,7 +48,7 @@ export default class DynamicVariableListenerManager { dataListeners = this.listenToConditionalVariable(dynamicVariable as DataCondition, em); break; } - dataListeners.forEach((ls) => model.listenTo(ls.obj, ls.event, this.onChange)); + dataListeners.forEach((ls) => this.model.listenTo(ls.obj, ls.event, this.onChange)); this.dataListeners = dataListeners; } @@ -81,8 +78,7 @@ export default class DynamicVariableListenerManager { } private removeListeners() { - const { model } = this; - this.dataListeners.forEach((ls) => model.stopListening(ls.obj, ls.event, this.onChange)); + this.dataListeners.forEach((ls) => this.model.stopListening(ls.obj, ls.event, this.onChange)); this.dataListeners = []; } diff --git a/packages/core/src/data_sources/model/conditional_variables/DataCondition.ts b/packages/core/src/data_sources/model/conditional_variables/DataCondition.ts index d5a481645..6208a318f 100644 --- a/packages/core/src/data_sources/model/conditional_variables/DataCondition.ts +++ b/packages/core/src/data_sources/model/conditional_variables/DataCondition.ts @@ -94,7 +94,6 @@ export class DataCondition extends Model { dataVariables.forEach((variable) => { const variableInstance = new DataVariable(variable, { em: this.em }); const listener = new DynamicVariableListenerManager({ - model: this as any, em: this.em!, dataVariable: variableInstance, updateValueFromDataVariable: (() => { diff --git a/packages/core/src/data_sources/view/ComponentDataVariableView.ts b/packages/core/src/data_sources/view/ComponentDataVariableView.ts index f1bba3708..1d53474d3 100644 --- a/packages/core/src/data_sources/view/ComponentDataVariableView.ts +++ b/packages/core/src/data_sources/view/ComponentDataVariableView.ts @@ -8,7 +8,6 @@ export default class ComponentDataVariableView extends ComponentView this.postRender(), diff --git a/packages/core/src/domain_abstract/model/StyleableModel.ts b/packages/core/src/domain_abstract/model/StyleableModel.ts index 4e3641728..5621b4d67 100644 --- a/packages/core/src/domain_abstract/model/StyleableModel.ts +++ b/packages/core/src/domain_abstract/model/StyleableModel.ts @@ -168,7 +168,6 @@ export default class StyleableModel extends Model this.dynamicVariableListeners[styleProp].listenToDynamicVariable(); } else { this.dynamicVariableListeners[styleProp] = new DynamicVariableListenerManager({ - model: this, em: this.em!, dataVariable: dataVar, updateValueFromDataVariable: () => this.updateView(), diff --git a/packages/core/src/trait_manager/model/Trait.ts b/packages/core/src/trait_manager/model/Trait.ts index 185bbce1d..49575e9c9 100644 --- a/packages/core/src/trait_manager/model/Trait.ts +++ b/packages/core/src/trait_manager/model/Trait.ts @@ -77,7 +77,6 @@ export default class Trait extends Model { const dv = this.dynamicVariable.getDataValue(); this.set({ value: dv }); this.dynamicVariableListener = new DynamicVariableListenerManager({ - model: this, em: this.em, dataVariable: this.dynamicVariable, updateValueFromDataVariable: this.updateValueFromDataVariable.bind(this), @@ -384,6 +383,7 @@ export default class Trait extends Model { } getInitValue() { + if (this.hasDynamicValue()) return this.getDynamicValue(); const { component } = this; const name = this.getName(); let value;