From 7d80b0019e7d73c39dbaed114f30b0e300739059 Mon Sep 17 00:00:00 2001 From: mohamedsalem401 Date: Mon, 29 Sep 2025 14:13:41 +0300 Subject: [PATCH] fix performance issue for the new wrapper datasource --- .../dom_components/model/ComponentWrapper.ts | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) 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();