diff --git a/src/components/ion-tabs/ion-tabs.ts b/src/components/ion-tabs/ion-tabs.ts index 19f78a4fa..a3a6bb2cc 100644 --- a/src/components/ion-tabs/ion-tabs.ts +++ b/src/components/ion-tabs/ion-tabs.ts @@ -44,6 +44,8 @@ export class CoreIonTabsComponent extends Tabs { } } + @Input() selectedDisabled: boolean; // Whether the initial tab selected can be a disabled tab. + @ViewChild('originalTabs') originalTabsRef: ElementRef; _loaded: boolean; // Whether tabs have been loaded. @@ -135,7 +137,16 @@ export class CoreIonTabsComponent extends Tabs { if (!this.initialized && (this._loaded || typeof this._loaded == 'undefined')) { this.initialized = true; - return super.initTabs(); + return super.initTabs().then(() => { + // Tabs initialized. Force select the tab if it's not enabled. + if (this.selectedDisabled && typeof this.selectedIndex != 'undefined') { + const tab = this.getByIndex(this.selectedIndex); + + if (tab && (!tab.enabled || !tab.show)) { + this.select(tab); + } + } + }); } else { // Tabs not loaded yet. Set the tab bar position so the tab bar is shown, it'll have a spinner. this.setTabbarPosition(-1, 0); diff --git a/src/core/course/pages/section/section.ts b/src/core/course/pages/section/section.ts index 3c5f55f39..fd17c61ca 100644 --- a/src/core/course/pages/section/section.ts +++ b/src/core/course/pages/section/section.ts @@ -333,13 +333,13 @@ export class CoreCourseSectionPage implements OnDestroy { * User entered the page. */ ionViewDidEnter(): void { - this.formatComponent.ionViewDidEnter(); + this.formatComponent && this.formatComponent.ionViewDidEnter(); } /** * User left the page. */ ionViewDidLeave(): void { - this.formatComponent.ionViewDidLeave(); + this.formatComponent && this.formatComponent.ionViewDidLeave(); } } diff --git a/src/core/login/providers/helper.ts b/src/core/login/providers/helper.ts index 8f20a9b08..c295ff14f 100644 --- a/src/core/login/providers/helper.ts +++ b/src/core/login/providers/helper.ts @@ -13,6 +13,7 @@ // limitations under the License. import { Injectable } from '@angular/core'; +import { Location } from '@angular/common'; import { Platform } from 'ionic-angular'; import { TranslateService } from '@ngx-translate/core'; import { CoreAppProvider } from '@providers/app'; @@ -81,7 +82,8 @@ export class CoreLoginHelperProvider { private wsProvider: CoreWSProvider, private translate: TranslateService, private textUtils: CoreTextUtilsProvider, private eventsProvider: CoreEventsProvider, private appProvider: CoreAppProvider, private utils: CoreUtilsProvider, private urlUtils: CoreUrlUtilsProvider, private configProvider: CoreConfigProvider, private platform: Platform, - private initDelegate: CoreInitDelegate, private sitePluginsProvider: CoreSitePluginsProvider) { + private initDelegate: CoreInitDelegate, private sitePluginsProvider: CoreSitePluginsProvider, + private location: Location) { this.logger = logger.getInstance('CoreLoginHelper'); } @@ -408,6 +410,10 @@ export class CoreLoginHelperProvider { * @return {Promise} Promise resolved when done. */ goToSiteInitialPage(): Promise { + // Due to DeepLinker, we need to remove the path from the URL before going to main menu. + // IonTabs checks the URL to determine which path to load for deep linking, so we clear the URL. + this.location.replaceState(''); + return this.appProvider.getRootNavController().setRoot('CoreMainMenuPage'); } @@ -597,6 +603,10 @@ export class CoreLoginHelperProvider { * @param {any} params Params to pass to the page. */ protected loadPageInMainMenu(page: string, params: any): void { + // Due to DeepLinker, we need to remove the path from the URL before going to main menu. + // IonTabs checks the URL to determine which path to load for deep linking, so we clear the URL. + this.location.replaceState(''); + this.appProvider.getRootNavController().setRoot('CoreMainMenuPage', { redirectPage: page, redirectParams: params }); } diff --git a/src/core/mainmenu/pages/menu/menu.html b/src/core/mainmenu/pages/menu/menu.html index 6dcee56ce..b12930640 100644 --- a/src/core/mainmenu/pages/menu/menu.html +++ b/src/core/mainmenu/pages/menu/menu.html @@ -1,4 +1,4 @@ - +