From 26a1fad8c8e1009f1a20f39f8005890e3e3d504d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Wed, 8 May 2019 11:33:58 +0200 Subject: [PATCH] MOBILE-3014 block: Support for only title block type --- .../providers/block-handler.ts | 2 +- .../myoverview/providers/block-handler.ts | 2 +- .../providers/block-handler.ts | 2 +- .../providers/block-handler.ts | 2 +- .../sitemainmenu/providers/block-handler.ts | 2 +- .../starredcourses/providers/block-handler.ts | 2 +- .../block/timeline/providers/block-handler.ts | 2 +- .../block/classes/base-block-component.ts | 9 +++- src/core/block/classes/base-block-handler.ts | 2 +- src/core/block/components/block/block.ts | 5 +- .../block/components/components.module.ts | 12 ++++- .../core-block-only-title.html | 3 ++ .../only-title-block/only-title-block.ts | 50 +++++++++++++++++++ src/core/block/providers/delegate.ts | 15 +++++- 14 files changed, 96 insertions(+), 14 deletions(-) create mode 100644 src/core/block/components/only-title-block/core-block-only-title.html create mode 100644 src/core/block/components/only-title-block/only-title-block.ts diff --git a/src/addon/block/activitymodules/providers/block-handler.ts b/src/addon/block/activitymodules/providers/block-handler.ts index 0024324c9..752d23a47 100644 --- a/src/addon/block/activitymodules/providers/block-handler.ts +++ b/src/addon/block/activitymodules/providers/block-handler.ts @@ -38,7 +38,7 @@ export class AddonBlockActivityModulesHandler extends CoreBlockBaseHandler { * @param {number} instanceId The instance ID associated with the context level. * @return {CoreBlockHandlerData|Promise} Data or promise resolved with the data. */ - getDisplayData?(injector: Injector, block: any, contextLevel: string, instanceId: number) + getDisplayData(injector: Injector, block: any, contextLevel: string, instanceId: number) : CoreBlockHandlerData | Promise { return { diff --git a/src/addon/block/myoverview/providers/block-handler.ts b/src/addon/block/myoverview/providers/block-handler.ts index 5f723467c..e0a593b9a 100644 --- a/src/addon/block/myoverview/providers/block-handler.ts +++ b/src/addon/block/myoverview/providers/block-handler.ts @@ -50,7 +50,7 @@ export class AddonBlockMyOverviewHandler extends CoreBlockBaseHandler { * @param {number} instanceId The instance ID associated with the context level. * @return {CoreBlockHandlerData|Promise} Data or promise resolved with the data. */ - getDisplayData?(injector: Injector, block: any, contextLevel: string, instanceId: number) + getDisplayData(injector: Injector, block: any, contextLevel: string, instanceId: number) : CoreBlockHandlerData | Promise { return { diff --git a/src/addon/block/recentlyaccessedcourses/providers/block-handler.ts b/src/addon/block/recentlyaccessedcourses/providers/block-handler.ts index a1117bd5d..3af9cf0dd 100644 --- a/src/addon/block/recentlyaccessedcourses/providers/block-handler.ts +++ b/src/addon/block/recentlyaccessedcourses/providers/block-handler.ts @@ -38,7 +38,7 @@ export class AddonBlockRecentlyAccessedCoursesHandler extends CoreBlockBaseHandl * @param {number} instanceId The instance ID associated with the context level. * @return {CoreBlockHandlerData|Promise} Data or promise resolved with the data. */ - getDisplayData?(injector: Injector, block: any, contextLevel: string, instanceId: number) + getDisplayData(injector: Injector, block: any, contextLevel: string, instanceId: number) : CoreBlockHandlerData | Promise { return { diff --git a/src/addon/block/recentlyaccesseditems/providers/block-handler.ts b/src/addon/block/recentlyaccesseditems/providers/block-handler.ts index 2963017e8..dfadcc542 100644 --- a/src/addon/block/recentlyaccesseditems/providers/block-handler.ts +++ b/src/addon/block/recentlyaccesseditems/providers/block-handler.ts @@ -38,7 +38,7 @@ export class AddonBlockRecentlyAccessedItemsHandler extends CoreBlockBaseHandler * @param {number} instanceId The instance ID associated with the context level. * @return {CoreBlockHandlerData|Promise} Data or promise resolved with the data. */ - getDisplayData?(injector: Injector, block: any, contextLevel: string, instanceId: number) + getDisplayData(injector: Injector, block: any, contextLevel: string, instanceId: number) : CoreBlockHandlerData | Promise { return { diff --git a/src/addon/block/sitemainmenu/providers/block-handler.ts b/src/addon/block/sitemainmenu/providers/block-handler.ts index 8c699aff0..dcaf4fe01 100644 --- a/src/addon/block/sitemainmenu/providers/block-handler.ts +++ b/src/addon/block/sitemainmenu/providers/block-handler.ts @@ -38,7 +38,7 @@ export class AddonBlockSiteMainMenuHandler extends CoreBlockBaseHandler { * @param {number} instanceId The instance ID associated with the context level. * @return {CoreBlockHandlerData|Promise} Data or promise resolved with the data. */ - getDisplayData?(injector: Injector, block: any, contextLevel: string, instanceId: number) + getDisplayData(injector: Injector, block: any, contextLevel: string, instanceId: number) : CoreBlockHandlerData | Promise { return { diff --git a/src/addon/block/starredcourses/providers/block-handler.ts b/src/addon/block/starredcourses/providers/block-handler.ts index 7675876b1..c7abc3485 100644 --- a/src/addon/block/starredcourses/providers/block-handler.ts +++ b/src/addon/block/starredcourses/providers/block-handler.ts @@ -38,7 +38,7 @@ export class AddonBlockStarredCoursesHandler extends CoreBlockBaseHandler { * @param {number} instanceId The instance ID associated with the context level. * @return {CoreBlockHandlerData|Promise} Data or promise resolved with the data. */ - getDisplayData?(injector: Injector, block: any, contextLevel: string, instanceId: number) + getDisplayData(injector: Injector, block: any, contextLevel: string, instanceId: number) : CoreBlockHandlerData | Promise { return { diff --git a/src/addon/block/timeline/providers/block-handler.ts b/src/addon/block/timeline/providers/block-handler.ts index 2e89d60fb..8973fbc5d 100644 --- a/src/addon/block/timeline/providers/block-handler.ts +++ b/src/addon/block/timeline/providers/block-handler.ts @@ -55,7 +55,7 @@ export class AddonBlockTimelineHandler extends CoreBlockBaseHandler { * @param {number} instanceId The instance ID associated with the context level. * @return {CoreBlockHandlerData|Promise} Data or promise resolved with the data. */ - getDisplayData?(injector: Injector, block: any, contextLevel: string, instanceId: number) + getDisplayData(injector: Injector, block: any, contextLevel: string, instanceId: number) : CoreBlockHandlerData | Promise { return { diff --git a/src/core/block/classes/base-block-component.ts b/src/core/block/classes/base-block-component.ts index 56cbad4f6..46dc2c33b 100644 --- a/src/core/block/classes/base-block-component.ts +++ b/src/core/block/classes/base-block-component.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Injector, OnInit } from '@angular/core'; +import { Injector, OnInit, Input } from '@angular/core'; import { CoreLoggerProvider } from '@providers/logger'; import { CoreDomUtilsProvider } from '@providers/utils/dom'; @@ -20,6 +20,13 @@ import { CoreDomUtilsProvider } from '@providers/utils/dom'; * Template class to easily create components for blocks. */ export class CoreBlockBaseComponent implements OnInit { + @Input() title: string; // The block title. + @Input() block: any; // The block to render. + @Input() contextLevel: string; // The context where the block will be used. + @Input() instanceId: number; // The instance ID associated with the context level. + @Input() link: string; // Link to go when clicked. + @Input() linkParams: string; // Link params to go when clicked. + loaded: boolean; // If the component has been loaded. protected fetchContentDefaultError: string; // Default error to show when loading contents. diff --git a/src/core/block/classes/base-block-handler.ts b/src/core/block/classes/base-block-handler.ts index 85fe49995..695d8182e 100644 --- a/src/core/block/classes/base-block-handler.ts +++ b/src/core/block/classes/base-block-handler.ts @@ -47,7 +47,7 @@ export class CoreBlockBaseHandler implements CoreBlockHandler { * @param {number} instanceId The instance ID associated with the context level. * @return {CoreBlockHandlerData|Promise} Data or promise resolved with the data. */ - getDisplayData?(injector: Injector, block: any, contextLevel: string, instanceId: number) + getDisplayData(injector: Injector, block: any, contextLevel: string, instanceId: number) : CoreBlockHandlerData | Promise { // To be overridden. diff --git a/src/core/block/components/block/block.ts b/src/core/block/components/block/block.ts index fffba5683..faf8aa3be 100644 --- a/src/core/block/components/block/block.ts +++ b/src/core/block/components/block/block.ts @@ -33,7 +33,6 @@ export class CoreBlockComponent implements OnInit, OnDestroy { @Input() instanceId: number; // The instance ID associated with the context level. @Input() extraData: any; // Any extra data to be passed to the block. - title: string; // The title of the block. componentClass: any; // The class of the component to render. data: any = {}; // Data to pass to the component. class: string; // CSS class to apply to the block. @@ -80,15 +79,17 @@ export class CoreBlockComponent implements OnInit, OnDestroy { return; } - this.title = data.title; this.class = data.class; this.componentClass = data.component; // Set up the data needed by the block component. this.data = Object.assign({ + title: data.title, block: this.block, contextLevel: this.contextLevel, instanceId: this.instanceId, + link: data.link || null, + linkParams: data.linkParams || null, }, this.extraData || {}, data.componentData || {}); }).catch(() => { // Ignore errors. diff --git a/src/core/block/components/components.module.ts b/src/core/block/components/components.module.ts index 512729b8e..896804473 100644 --- a/src/core/block/components/components.module.ts +++ b/src/core/block/components/components.module.ts @@ -16,23 +16,31 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { IonicModule } from 'ionic-angular'; import { TranslateModule } from '@ngx-translate/core'; +import { CoreDirectivesModule } from '@directives/directives.module'; import { CoreBlockComponent } from './block/block'; +import { CoreBlockOnlyTitleComponent } from './only-title-block/only-title-block'; import { CoreComponentsModule } from '@components/components.module'; @NgModule({ declarations: [ - CoreBlockComponent + CoreBlockComponent, + CoreBlockOnlyTitleComponent ], imports: [ CommonModule, IonicModule, + CoreDirectivesModule, TranslateModule.forChild(), CoreComponentsModule ], providers: [ ], exports: [ - CoreBlockComponent + CoreBlockComponent, + CoreBlockOnlyTitleComponent + ], + entryComponents: [ + CoreBlockOnlyTitleComponent ] }) export class CoreBlockComponentsModule {} diff --git a/src/core/block/components/only-title-block/core-block-only-title.html b/src/core/block/components/only-title-block/core-block-only-title.html new file mode 100644 index 000000000..287592371 --- /dev/null +++ b/src/core/block/components/only-title-block/core-block-only-title.html @@ -0,0 +1,3 @@ + +

{{ title | translate }}

+
\ No newline at end of file diff --git a/src/core/block/components/only-title-block/only-title-block.ts b/src/core/block/components/only-title-block/only-title-block.ts new file mode 100644 index 000000000..a128c44d1 --- /dev/null +++ b/src/core/block/components/only-title-block/only-title-block.ts @@ -0,0 +1,50 @@ +// (C) Copyright 2015 Martin Dougiamas +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Injector, OnInit, Component } from '@angular/core'; +import { CoreBlockBaseComponent } from '../../classes/base-block-component'; +import { CoreLoginHelperProvider } from '@core/login/providers/helper'; + +/** + * Component to render blocks with only a title and link. + */ +@Component({ + selector: 'core-block-only-title', + templateUrl: 'core-block-only-title.html' +}) +export class CoreBlockOnlyTitleComponent extends CoreBlockBaseComponent implements OnInit { + + protected loginHelper: CoreLoginHelperProvider; + + constructor(injector: Injector) { + super(injector, 'CoreBlockOnlyTitleComponent'); + this.loginHelper = injector.get(CoreLoginHelperProvider); + } + + /** + * Component being initialized. + */ + ngOnInit(): void { + super.ngOnInit(); + + this.fetchContentDefaultError = 'Error getting ' + this.block.contents.title + ' data.'; + } + + /** + * Go to the block page. + */ + gotoBlock(): void { + this.loginHelper.redirect(this.link, this.linkParams); + } +} diff --git a/src/core/block/providers/delegate.ts b/src/core/block/providers/delegate.ts index 47b90ecda..b4e6fcf40 100644 --- a/src/core/block/providers/delegate.ts +++ b/src/core/block/providers/delegate.ts @@ -73,6 +73,18 @@ export interface CoreBlockHandlerData { * @type {any} */ componentData?: any; + + /** + * Link to go when showing only title. + * @type {string} + */ + link?: string; + + /** + * Params of the link. + * @type {[type]} + */ + linkParams?: any; } /** @@ -127,7 +139,8 @@ export class CoreBlockDelegate extends CoreDelegate { * @return {Promise} Promise resolved with the display data. */ getBlockDisplayData(injector: Injector, block: any, contextLevel: string, instanceId: number): Promise { - return Promise.resolve(this.executeFunctionOnEnabled(block.name, 'getDisplayData', [injector, block])); + return Promise.resolve(this.executeFunctionOnEnabled(block.name, 'getDisplayData', + [injector, block, contextLevel, instanceId])); } /**