Browse Source

fix performance issue for the new wrapper datasource

pages-datasources
mohamedsalem401 1 year ago
parent
commit
7d80b0019e
  1. 19
      packages/core/src/dom_components/model/ComponentWrapper.ts

19
packages/core/src/dom_components/model/ComponentWrapper.ts

@ -17,6 +17,7 @@ type ResolverCurrentItemType = string | number;
export default class ComponentWrapper extends ComponentWithCollectionsState<DataVariableProps> { export default class ComponentWrapper extends ComponentWithCollectionsState<DataVariableProps> {
dataSourceWatcher?: DataResolverListener; dataSourceWatcher?: DataResolverListener;
private _resolverCurrentItem?: ResolverCurrentItemType; private _resolverCurrentItem?: ResolverCurrentItemType;
private _isWatchingCollectionStateMap = false;
get defaults() { get defaults() {
return { return {
@ -47,10 +48,9 @@ export default class ComponentWrapper extends ComponentWithCollectionsState<Data
super(props, opt); super(props, opt);
const hasDataResolver = this.getDataResolver(); const hasDataResolver = this.getDataResolver();
this.syncComponentsCollectionState();
if (hasDataResolver) { if (hasDataResolver) {
this.onDataSourceChange(); this.onDataSourceChange();
this.syncComponentsCollectionState();
} }
} }
@ -135,9 +135,18 @@ export default class ComponentWrapper extends ComponentWithCollectionsState<Data
} }
protected listenToPropsChange() { protected listenToPropsChange() {
this.on(`change:dataResolver`, () => { this.on(`change:dataResolver`, (_, value) => {
this.onCollectionsStateMapUpdate(this.getCollectionsStateMap()); const hasResolver = !isUndefined(value);
this.listenToDataSource();
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(); this.listenToDataSource();

Loading…
Cancel
Save