From 70191ad5bf14e2493e533241dc776dc96f96df4f Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 4 Oct 2022 10:55:29 +0200 Subject: [PATCH] MOBILE-3817 core: Convert has changes func to return Promise --- .../components/myoverview/myoverview.ts | 8 ++++---- src/core/classes/page-load-watcher.ts | 16 +++++++++++----- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/addons/block/myoverview/components/myoverview/myoverview.ts b/src/addons/block/myoverview/components/myoverview/myoverview.ts index 3f9ff1f7b..6e7897558 100644 --- a/src/addons/block/myoverview/components/myoverview/myoverview.ts +++ b/src/addons/block/myoverview/components/myoverview/myoverview.ts @@ -711,10 +711,10 @@ export class AddonBlockMyOverviewComponent extends CoreBlockBaseComponent implem * @param newCourses New courses. * @return Whether it has meaningful changes. */ - protected coursesHaveMeaningfulChanges( + protected async coursesHaveMeaningfulChanges( previousCourses: CoreEnrolledCourseDataWithExtraInfoAndOptions[], newCourses: CoreEnrolledCourseDataWithExtraInfoAndOptions[], - ): boolean { + ): Promise { if (previousCourses.length !== newCourses.length) { return true; } @@ -746,10 +746,10 @@ export class AddonBlockMyOverviewComponent extends CoreBlockBaseComponent implem * @param newCourses New courses. * @return Whether it has meaningful changes. */ - protected customFilterCoursesHaveMeaningfulChanges( + protected async customFilterCoursesHaveMeaningfulChanges( previousCourses: CoreCourseSummaryData[], newCourses: CoreCourseSummaryData[], - ): boolean { + ): Promise { if (previousCourses.length !== newCourses.length) { return true; } diff --git a/src/core/classes/page-load-watcher.ts b/src/core/classes/page-load-watcher.ts index a76594db2..988dca6d1 100644 --- a/src/core/classes/page-load-watcher.ts +++ b/src/core/classes/page-load-watcher.ts @@ -29,6 +29,7 @@ export class PageLoadWatcher { protected ongoingRequests = 0; protected components = new Set(); protected loadedTimeout?: number; + protected hasChangesPromises: Promise[] = []; constructor( protected loadsManager: PageLoadsManager, @@ -97,7 +98,7 @@ export class PageLoadWatcher { */ watchRequest( observable: WSObservable, - hasMeaningfulChanges?: (previousValue: T, newValue: T) => boolean, + hasMeaningfulChanges?: (previousValue: T, newValue: T) => Promise, ): Promise { const promisedValue = new CorePromisedValue(); let subscription: Subscription | null = null; @@ -124,9 +125,11 @@ export class PageLoadWatcher { } // Second value, it means data was updated in background. Compare data. - if (hasMeaningfulChanges?.(firstValue, value)) { - this.hasChanges = true; + if (!hasMeaningfulChanges) { + return; } + + this.hasChangesPromises.push(CoreUtils.ignoreErrors(hasMeaningfulChanges(firstValue, value), false)); }, error: (error) => { promisedValue.reject(error); @@ -150,8 +153,11 @@ export class PageLoadWatcher { // It seems load has finished. Wait to make sure no new component has been rendered and started loading. // If a new component or a new request starts the timeout will be cancelled, no need to double check it. clearTimeout(this.loadedTimeout); - this.loadedTimeout = window.setTimeout(() => { - // Loading finished. + this.loadedTimeout = window.setTimeout(async () => { + // Loading finished. Calculate has changes. + const values = await Promise.all(this.hasChangesPromises); + this.hasChanges = this.hasChanges || values.includes(true); + this.loadsManager.onPageLoaded(this); }, 100); }