From 0bfe870af1dffed5f9b1447c65e28bea8e36861e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Fri, 12 Nov 2021 16:32:54 +0100 Subject: [PATCH] MOBILE-3914 dashboard: Add side blocks on dashboard --- .../components/side-blocks/side-blocks.ts | 15 ++++-- .../courses/pages/dashboard/dashboard.html | 13 ++--- .../courses/pages/dashboard/dashboard.ts | 8 +++- .../features/courses/services/dashboard.ts | 47 ++++++++++++++++++- .../services/handlers/dashboard-home.ts | 2 +- 5 files changed, 72 insertions(+), 13 deletions(-) diff --git a/src/core/features/block/components/side-blocks/side-blocks.ts b/src/core/features/block/components/side-blocks/side-blocks.ts index 18dc3c9ca..eefc8f527 100644 --- a/src/core/features/block/components/side-blocks/side-blocks.ts +++ b/src/core/features/block/components/side-blocks/side-blocks.ts @@ -20,6 +20,7 @@ import { CoreBlockHelper } from '../../services/block-helper'; import { CoreBlockComponent } from '../block/block'; import { CoreUtils } from '@services/utils/utils'; import { IonRefresher } from '@ionic/angular'; +import { CoreCoursesDashboard } from '@features/courses/services/dashboard'; /** * Component that displays the list of side blocks. @@ -30,7 +31,7 @@ import { IonRefresher } from '@ionic/angular'; }) export class CoreBlockSideBlocksComponent implements OnInit { - @Input() courseId!: number; + @Input() courseId?: number; @Input() downloadEnabled = false; @ViewChildren(CoreBlockComponent) blocksComponents?: QueryList; @@ -55,8 +56,10 @@ export class CoreBlockSideBlocksComponent implements OnInit { async invalidateBlocks(): Promise { const promises: Promise[] = []; - if (CoreBlockHelper.canGetCourseBlocks()) { + if (this.courseId) { promises.push(CoreCourse.invalidateCourseBlocks(this.courseId)); + } else { + promises.push(CoreCoursesDashboard.invalidateDashboardBlocks()); } // Invalidate the blocks. @@ -76,7 +79,13 @@ export class CoreBlockSideBlocksComponent implements OnInit { */ async loadContent(): Promise { try { - this.blocks = await CoreBlockHelper.getCourseBlocks(this.courseId); + if (this.courseId) { + this.blocks = await CoreBlockHelper.getCourseBlocks(this.courseId); + } else { + const blocks = await CoreCoursesDashboard.getDashboardBlocks(); + + this.blocks = blocks.sideBlocks; + } } catch (error) { CoreDomUtils.showErrorModal(error); diff --git a/src/core/features/courses/pages/dashboard/dashboard.html b/src/core/features/courses/pages/dashboard/dashboard.html index c79854f7a..ee5fb7421 100644 --- a/src/core/features/courses/pages/dashboard/dashboard.html +++ b/src/core/features/courses/pages/dashboard/dashboard.html @@ -4,10 +4,9 @@ - + @@ -20,11 +19,13 @@ + [extraData]="{'downloadEnabled': downloadEnabled}"> - + + + diff --git a/src/core/features/courses/pages/dashboard/dashboard.ts b/src/core/features/courses/pages/dashboard/dashboard.ts index 5102614cc..2b7448a0b 100644 --- a/src/core/features/courses/pages/dashboard/dashboard.ts +++ b/src/core/features/courses/pages/dashboard/dashboard.ts @@ -23,6 +23,7 @@ import { CoreDomUtils } from '@services/utils/dom'; import { CoreCourseBlock } from '@features/course/services/course'; import { CoreBlockComponent } from '@features/block/components/block/block'; import { CoreNavigator } from '@services/navigator'; +import { CoreBlockDelegate } from '@features/block/services/block-delegate'; /** * Page that displays the dashboard page. @@ -36,6 +37,7 @@ export class CoreCoursesDashboardPage implements OnInit, OnDestroy { @ViewChildren(CoreBlockComponent) blocksComponents?: QueryList; + hasSideBlocks = false; searchEnabled = false; downloadEnabled = false; downloadCourseEnabled = false; @@ -88,7 +90,11 @@ export class CoreCoursesDashboardPage implements OnInit, OnDestroy { this.userId = CoreSites.getCurrentSiteUserId(); try { - this.blocks = await CoreCoursesDashboard.getDashboardBlocks(); + const blocks = await CoreCoursesDashboard.getDashboardBlocks(); + + this.blocks = blocks.mainBlocks; + + this.hasSideBlocks = CoreBlockDelegate.hasSupportedBlock(blocks.sideBlocks); } catch (error) { CoreDomUtils.showErrorModal(error); diff --git a/src/core/features/courses/services/dashboard.ts b/src/core/features/courses/services/dashboard.ts index d592f2e2d..76823a0b2 100644 --- a/src/core/features/courses/services/dashboard.ts +++ b/src/core/features/courses/services/dashboard.ts @@ -38,14 +38,14 @@ export class CoreCoursesDashboardProvider { } /** - * Get dashboard blocks. + * Get dashboard blocks from WS. * * @param userId User ID. Default, current user. * @param siteId Site ID. If not defined, current site. * @return Promise resolved with the list of blocks. * @since 3.6 */ - async getDashboardBlocks(userId?: number, siteId?: string): Promise { + protected async getDashboardBlocksFromWS(userId?: number, siteId?: string): Promise { const site = await CoreSites.getSite(siteId); const params: CoreBlockGetDashboardBlocksWSParams = { @@ -63,6 +63,44 @@ export class CoreCoursesDashboardProvider { return result.blocks || []; } + /** + * Get dashboard blocks. + * + * @param userId User ID. Default, current user. + * @param siteId Site ID. If not defined, current site. + * @return Promise resolved with the list of blocks. + */ + async getDashboardBlocks(userId?: number, siteId?: string): Promise { + const blocks = await CoreCoursesDashboard.getDashboardBlocksFromWS(userId, siteId); + + let mainBlocks: CoreCourseBlock[] = []; + let sideBlocks: CoreCourseBlock[] = []; + + blocks.forEach((block) => { + if (block.region == 'content' || block.region == 'main') { + mainBlocks.push(block); + } else { + sideBlocks.push(block); + } + }); + + if (mainBlocks.length == 0) { + mainBlocks = []; + sideBlocks = []; + + blocks.forEach((block) => { + if (block.region.match('side')) { + sideBlocks.push(block); + } else { + mainBlocks.push(block); + } + }); + } + + return { mainBlocks, sideBlocks }; + + } + /** * Invalidates dashboard blocks WS call. * @@ -122,6 +160,11 @@ export class CoreCoursesDashboardProvider { export const CoreCoursesDashboard = makeSingleton(CoreCoursesDashboardProvider); +export type CoreCoursesDashboardBlocks = { + mainBlocks: CoreCourseBlock[]; + sideBlocks: CoreCourseBlock[]; +}; + /** * Params of core_block_get_dashboard_blocks WS. */ diff --git a/src/core/features/courses/services/handlers/dashboard-home.ts b/src/core/features/courses/services/handlers/dashboard-home.ts index 998a6fac7..0076031a8 100644 --- a/src/core/features/courses/services/handlers/dashboard-home.ts +++ b/src/core/features/courses/services/handlers/dashboard-home.ts @@ -68,7 +68,7 @@ export class CoreDashboardHomeHandlerService implements CoreMainMenuHomeHandler if (dashboardAvailable && blocksEnabled) { const blocks = await CoreCoursesDashboard.getDashboardBlocks(undefined, siteId); - return CoreBlockDelegate.hasSupportedBlock(blocks); + return CoreBlockDelegate.hasSupportedBlock(blocks.mainBlocks) || CoreBlockDelegate.hasSupportedBlock(blocks.sideBlocks); } // Check if my overview is enabled. If it's enabled we will fake enabled blocks.