From a2e512de2662179629b42ba69bbed0f637bf0da1 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 8 Jun 2022 10:38:42 +0200 Subject: [PATCH] MOBILE-4091 mycourses: Fix mypage error and empty page --- src/core/classes/site.ts | 2 +- .../features/block/services/block-delegate.ts | 4 +++- src/core/features/courses/pages/my/my.ts | 16 ++++++++++++---- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/core/classes/site.ts b/src/core/classes/site.ts index 43f058af3..c8781f9f7 100644 --- a/src/core/classes/site.ts +++ b/src/core/classes/site.ts @@ -104,7 +104,7 @@ export class CoreSite { '3.9': 2020061500, '3.10': 2020110900, '3.11': 2021051700, - '4.0': 2021100300, // @todo [4.0] replace with right value when released. Using a tmp value to be able to test new things. + '4.0': 2022041900, }; // Possible cache update frequencies. diff --git a/src/core/features/block/services/block-delegate.ts b/src/core/features/block/services/block-delegate.ts index 8a5b28b8d..5a2aa3d81 100644 --- a/src/core/features/block/services/block-delegate.ts +++ b/src/core/features/block/services/block-delegate.ts @@ -195,7 +195,9 @@ export class CoreBlockDelegateService extends CoreDelegate { * @return Whether is enabled or disabled in site. */ protected isFeatureDisabled(handler: CoreBlockHandler, site: CoreSite): boolean { - return this.areBlocksDisabledInSite(site) || super.isFeatureDisabled(handler, site); + // Allow displaying my overview even if all blocks are disabled, to avoid having an empty My Courses. + return (this.areBlocksDisabledInSite(site) && handler.blockName !== 'myoverview') || + super.isFeatureDisabled(handler, site); } /** diff --git a/src/core/features/courses/pages/my/my.ts b/src/core/features/courses/pages/my/my.ts index 3f8b321a0..ef5ae03a4 100644 --- a/src/core/features/courses/pages/my/my.ts +++ b/src/core/features/courses/pages/my/my.ts @@ -18,6 +18,7 @@ import { AsyncComponent } from '@classes/async-component'; import { PageLoadsManager } from '@classes/page-loads-manager'; import { CorePromisedValue } from '@classes/promised-value'; import { CoreBlockComponent } from '@features/block/components/block/block'; +import { CoreBlockDelegate } from '@features/block/services/block-delegate'; import { CoreCourseBlock } from '@features/course/services/course'; import { CoreCoursesDashboard, CoreCoursesDashboardProvider } from '@features/courses/services/dashboard'; import { CoreMainMenuDeepLinkManager } from '@features/mainmenu/classes/deep-link-manager'; @@ -98,22 +99,30 @@ export class CoreCoursesMyCoursesPage implements OnInit, OnDestroy, AsyncCompone const available = await CoreCoursesDashboard.isAvailable(); const disabled = await CoreCourses.isMyCoursesDisabled(); + const supportsMyParam = !!CoreSites.getCurrentSite()?.isVersionGreaterEqualThan('4.0'); + if (available && !disabled) { try { const blocks = await loadWatcher.watchRequest( CoreCoursesDashboard.getDashboardBlocksObservable({ - myPage: this.myPageCourses, + myPage: supportsMyParam ? this.myPageCourses : undefined, readingStrategy: loadWatcher.getReadingStrategy(), }), ); // My overview block should always be in main blocks, but check side blocks too just in case. this.loadedBlock = blocks.mainBlocks.concat(blocks.sideBlocks).find((block) => block.name == 'myoverview'); - this.hasSideBlocks = blocks.sideBlocks.length > 0; + this.hasSideBlocks = supportsMyParam && CoreBlockDelegate.hasSupportedBlock(blocks.sideBlocks); await CoreUtils.nextTicks(2); this.myOverviewBlock = this.block?.dynamicComponent?.instance as AddonBlockMyOverviewComponent; + + if (!this.loadedBlock && !supportsMyParam) { + // In old sites, display the block even if not found in Dashboard. + // This is because the "My courses" page doesn't exist in the site so it can't be configured. + this.loadFallbackBlock(); + } } catch (error) { CoreDomUtils.showErrorModal(error); @@ -121,10 +130,9 @@ export class CoreCoursesMyCoursesPage implements OnInit, OnDestroy, AsyncCompone this.loadFallbackBlock(); } } else if (!available) { - // WS not available, or my courses page not available. show fallback block. + // WS not available, show fallback block. this.loadFallbackBlock(); } else { - // Disabled. this.loadedBlock = undefined; }