diff --git a/packages/core/src/dom_components/model/ComponentWrapper.ts b/packages/core/src/dom_components/model/ComponentWrapper.ts index e7d00a82f..7bc780ce9 100644 --- a/packages/core/src/dom_components/model/ComponentWrapper.ts +++ b/packages/core/src/dom_components/model/ComponentWrapper.ts @@ -17,6 +17,7 @@ type ResolverCurrentItemType = string | number; export default class ComponentWrapper extends ComponentWithCollectionsState { dataSourceWatcher?: DataResolverListener; private _resolverCurrentItem?: ResolverCurrentItemType; + private _isWatchingCollectionStateMap = false; get defaults() { return { @@ -47,10 +48,9 @@ export default class ComponentWrapper extends ComponentWithCollectionsState { - this.onCollectionsStateMapUpdate(this.getCollectionsStateMap()); - this.listenToDataSource(); + this.on(`change:dataResolver`, (_, value) => { + const hasResolver = !isUndefined(value); + + if (hasResolver && !this._isWatchingCollectionStateMap) { + this._isWatchingCollectionStateMap = true; + this.syncComponentsCollectionState(); + this.onCollectionsStateMapUpdate(this.getCollectionsStateMap()); + this.listenToDataSource(); + } else if (!hasResolver && this._isWatchingCollectionStateMap) { + this._isWatchingCollectionStateMap = false; + this.stopSyncComponentCollectionState(); + } }); this.listenToDataSource();