MOBILE-3686 courses: Move my courses to a main menu tab

main
Pau Ferrer Ocaña 2021-10-14 15:05:53 +02:00
parent 3bc40c88fe
commit 6e2bfc5286
3 changed files with 33 additions and 40 deletions

View File

@ -15,9 +15,12 @@
import { APP_INITIALIZER, NgModule, Type } from '@angular/core'; import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
import { Routes } from '@angular/router'; import { Routes } from '@angular/router';
import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate'; import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
import { CoreMainMenuRoutingModule } from '@features/mainmenu/mainmenu-routing.module';
import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
import { CoreMainMenuHomeRoutingModule } from '@features/mainmenu/pages/home/home-routing.module'; import { CoreMainMenuHomeRoutingModule } from '@features/mainmenu/pages/home/home-routing.module';
import { CoreMainMenuHomeDelegate } from '@features/mainmenu/services/home-delegate'; import { CoreMainMenuHomeDelegate } from '@features/mainmenu/services/home-delegate';
import { CoreMainMenuDelegate } from '@features/mainmenu/services/mainmenu-delegate';
import { CorePushNotificationsDelegate } from '@features/pushnotifications/services/push-delegate'; import { CorePushNotificationsDelegate } from '@features/pushnotifications/services/push-delegate';
import { CoreCoursesProvider } from './services/courses'; import { CoreCoursesProvider } from './services/courses';
import { CoreCoursesHelperProvider } from './services/courses-helper'; import { CoreCoursesHelperProvider } from './services/courses-helper';
@ -28,7 +31,10 @@ import { CoreCoursesIndexLinkHandler } from './services/handlers/courses-index-l
import { CoreDashboardHomeHandler, CoreDashboardHomeHandlerService } from './services/handlers/dashboard-home'; import { CoreDashboardHomeHandler, CoreDashboardHomeHandlerService } from './services/handlers/dashboard-home';
import { CoreCoursesDashboardLinkHandler } from './services/handlers/dashboard-link'; import { CoreCoursesDashboardLinkHandler } from './services/handlers/dashboard-link';
import { CoreCoursesEnrolPushClickHandler } from './services/handlers/enrol-push-click'; import { CoreCoursesEnrolPushClickHandler } from './services/handlers/enrol-push-click';
import { CoreCoursesMyCoursesHomeHandler, CoreCoursesMyCoursesHomeHandlerService } from './services/handlers/my-courses-home'; import {
CoreCoursesMyCoursesHomeHandler,
CoreCoursesMyCoursesMainMenuHandlerService,
} from './services/handlers/my-courses-mainmenu';
import { CoreCoursesRequestPushClickHandler } from './services/handlers/request-push-click'; import { CoreCoursesRequestPushClickHandler } from './services/handlers/request-push-click';
export const CORE_COURSES_SERVICES: Type<unknown>[] = [ export const CORE_COURSES_SERVICES: Type<unknown>[] = [
@ -42,10 +48,6 @@ const mainMenuHomeChildrenRoutes: Routes = [
path: CoreDashboardHomeHandlerService.PAGE_NAME, path: CoreDashboardHomeHandlerService.PAGE_NAME,
loadChildren: () => import('./pages/dashboard/dashboard.module').then(m => m.CoreCoursesDashboardPageModule), loadChildren: () => import('./pages/dashboard/dashboard.module').then(m => m.CoreCoursesDashboardPageModule),
}, },
{
path: CoreCoursesMyCoursesHomeHandlerService.PAGE_NAME,
loadChildren: () => import('./pages/list/list.module').then(m => m.CoreCoursesListPageModule),
},
]; ];
const mainMenuHomeSiblingRoutes: Routes = [ const mainMenuHomeSiblingRoutes: Routes = [
@ -55,20 +57,30 @@ const mainMenuHomeSiblingRoutes: Routes = [
}, },
]; ];
const mainMenuTabRoutes: Routes = [
{
path: CoreCoursesMyCoursesMainMenuHandlerService.PAGE_NAME,
loadChildren: () => import('./pages/list/list.module').then(m => m.CoreCoursesListPageModule),
},
];
@NgModule({ @NgModule({
imports: [ imports: [
CoreMainMenuHomeRoutingModule.forChild({ CoreMainMenuHomeRoutingModule.forChild({
children: mainMenuHomeChildrenRoutes, children: mainMenuHomeChildrenRoutes,
siblings: mainMenuHomeSiblingRoutes, siblings: mainMenuHomeSiblingRoutes,
}), }),
CoreMainMenuRoutingModule.forChild({ children: mainMenuTabRoutes }),
CoreMainMenuTabRoutingModule.forChild(mainMenuTabRoutes),
], ],
exports: [CoreMainMenuRoutingModule],
providers: [ providers: [
{ {
provide: APP_INITIALIZER, provide: APP_INITIALIZER,
multi: true, multi: true,
useValue: () => { useValue: () => {
CoreMainMenuHomeDelegate.registerHandler(CoreDashboardHomeHandler.instance); CoreMainMenuHomeDelegate.registerHandler(CoreDashboardHomeHandler.instance);
CoreMainMenuHomeDelegate.registerHandler(CoreCoursesMyCoursesHomeHandler.instance); CoreMainMenuDelegate.registerHandler(CoreCoursesMyCoursesHomeHandler.instance);
CoreContentLinksDelegate.registerHandler(CoreCoursesCourseLinkHandler.instance); CoreContentLinksDelegate.registerHandler(CoreCoursesCourseLinkHandler.instance);
CoreContentLinksDelegate.registerHandler(CoreCoursesIndexLinkHandler.instance); CoreContentLinksDelegate.registerHandler(CoreCoursesIndexLinkHandler.instance);
CoreContentLinksDelegate.registerHandler(CoreCoursesDashboardLinkHandler.instance); CoreContentLinksDelegate.registerHandler(CoreCoursesDashboardLinkHandler.instance);

View File

@ -18,7 +18,7 @@ import { CoreContentLinksHandlerBase } from '@features/contentlinks/classes/base
import { CoreContentLinksAction } from '@features/contentlinks/services/contentlinks-delegate'; import { CoreContentLinksAction } from '@features/contentlinks/services/contentlinks-delegate';
import { CoreNavigator } from '@services/navigator'; import { CoreNavigator } from '@services/navigator';
import { makeSingleton } from '@singletons'; import { makeSingleton } from '@singletons';
import { CoreCoursesMyCoursesHomeHandlerService } from './my-courses-home'; import { CoreCoursesMyCoursesMainMenuHandlerService } from './my-courses-mainmenu';
/** /**
* Handler to treat links to course index (list of courses). * Handler to treat links to course index (list of courses).
@ -31,17 +31,12 @@ export class CoreCoursesIndexLinkHandlerService extends CoreContentLinksHandlerB
pattern = /\/course\/?(index\.php.*)?$/; pattern = /\/course\/?(index\.php.*)?$/;
/** /**
* Get the list of actions for a link (url). * @inheritdoc
*
* @param siteIds List of sites the URL belongs to.
* @param url The URL to treat.
* @param params The params of the URL. E.g. 'mysite.com?id=1' -> {id: 1}
* @return List of (or promise resolved with list of) actions.
*/ */
getActions(siteIds: string[], url: string, params: Params): CoreContentLinksAction[] { getActions(siteIds: string[], url: string, params: Params): CoreContentLinksAction[] {
return [{ return [{
action: (siteId): void => { action: (siteId): void => {
let pageName = CoreCoursesMyCoursesHomeHandlerService.PAGE_NAME; let pageName = CoreCoursesMyCoursesMainMenuHandlerService.PAGE_NAME;
const pageParams: Params = {}; const pageParams: Params = {};
if (params.categoryid) { if (params.categoryid) {
@ -51,7 +46,6 @@ export class CoreCoursesIndexLinkHandlerService extends CoreContentLinksHandlerB
pageParams.mode = 'all'; pageParams.mode = 'all';
} }
CoreNavigator.navigateToSitePath(pageName, { params: pageParams, siteId }); CoreNavigator.navigateToSitePath(pageName, { params: pageParams, siteId });
}, },
}]; }];

View File

@ -13,39 +13,29 @@
// limitations under the License. // limitations under the License.
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { CoreMainMenuHomeHandler, CoreMainMenuHomeHandlerToDisplay } from '@features/mainmenu/services/home-delegate'; import { CoreMainMenuHandler, CoreMainMenuHandlerData } from '@features/mainmenu/services/mainmenu-delegate';
import { CoreSiteHomeHomeHandler } from '@features/sitehome/services/handlers/sitehome-home'; import { CoreSiteHomeHomeHandler } from '@features/sitehome/services/handlers/sitehome-home';
import { CoreSites } from '@services/sites';
import { makeSingleton } from '@singletons'; import { makeSingleton } from '@singletons';
import { CoreCourses } from '../courses'; import { CoreCourses } from '../courses';
import { CoreDashboardHomeHandler } from './dashboard-home'; import { CoreDashboardHomeHandler } from './dashboard-home';
/** /**
* Handler to add my courses into home page. * Handler to add my courses into main menu.
*/ */
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
export class CoreCoursesMyCoursesHomeHandlerService implements CoreMainMenuHomeHandler { export class CoreCoursesMyCoursesMainMenuHandlerService implements CoreMainMenuHandler {
static readonly PAGE_NAME = 'courses'; static readonly PAGE_NAME = 'courses';
name = 'CoreCoursesMyCourses'; name = 'CoreCoursesMyCourses';
priority = 900; priority = 850;
/** /**
* Check if the handler is enabled on a site level. * @inheritdoc
*
* @return Whether or not the handler is enabled on a site level.
*/ */
isEnabled(): Promise<boolean> { async isEnabled(): Promise<boolean> {
return this.isEnabledForSite(); const siteId = CoreSites.getCurrentSiteId();
}
/**
* Check if the handler is enabled on a certain site.
*
* @param siteId Site ID. If not defined, current site.
* @return Whether or not the handler is enabled on a site level.
*/
async isEnabledForSite(siteId?: string): Promise<boolean> {
const disabled = await CoreCourses.isMyCoursesDisabled(siteId); const disabled = await CoreCourses.isMyCoursesDisabled(siteId);
if (disabled) { if (disabled) {
@ -59,20 +49,17 @@ export class CoreCoursesMyCoursesHomeHandlerService implements CoreMainMenuHomeH
} }
/** /**
* Returns the data needed to render the handler. * @inheritdoc
*
* @return Data needed to render the handler.
*/ */
getDisplayData(): CoreMainMenuHomeHandlerToDisplay { getDisplayData(): CoreMainMenuHandlerData {
return { return {
title: 'core.courses.mycourses', title: 'core.courses.mycourses',
page: CoreCoursesMyCoursesHomeHandlerService.PAGE_NAME, page: CoreCoursesMyCoursesMainMenuHandlerService.PAGE_NAME,
class: 'core-courses-my-courses-handler', class: 'core-courses-my-courses-handler',
icon: 'fas-graduation-cap', icon: 'fas-graduation-cap',
selectPriority: 900,
}; };
} }
} }
export const CoreCoursesMyCoursesHomeHandler = makeSingleton(CoreCoursesMyCoursesHomeHandlerService); export const CoreCoursesMyCoursesHomeHandler = makeSingleton(CoreCoursesMyCoursesMainMenuHandlerService);