From 4cdcb23d97e0b6989d70ce40d46e8208e9cb050e Mon Sep 17 00:00:00 2001 From: Noel De Martin Date: Wed, 12 Jan 2022 14:02:37 +0100 Subject: [PATCH] MOBILE-3833 core: Fix empty split views updates --- .../items-management/list-items-manager.ts | 20 ++++++------- .../items-management/routed-items-manager.ts | 28 +++++++++++++++++++ 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/src/core/classes/items-management/list-items-manager.ts b/src/core/classes/items-management/list-items-manager.ts index 174a93efe..4fae782f3 100644 --- a/src/core/classes/items-management/list-items-manager.ts +++ b/src/core/classes/items-management/list-items-manager.ts @@ -123,7 +123,13 @@ export class CoreListItemsManager< * * @param item Item. */ - async select(item: Item): Promise { + async select(item: Item | null): Promise { + if (!item) { + await this.navigateToIndex({ reset: this.resetNavigation() }); + + return; + } + await this.navigateToItem(item, { reset: this.resetNavigation() }); } @@ -174,17 +180,9 @@ export class CoreListItemsManager< protected updateSelectedItem(route: ActivatedRouteSnapshot | null = null): void { super.updateSelectedItem(route); - if (CoreScreen.isMobile || this.selectedItem !== null || !this.splitView || this.splitView.isNested) { - return; - } + const selectDefault = CoreScreen.isTablet && this.selectedItem === null && this.splitView && !this.splitView.isNested; - const defaultItem = this.getDefaultItem(); - - if (!defaultItem) { - return; - } - - this.select(defaultItem); + this.select(selectDefault ? this.getDefaultItem() : this.selectedItem); } /** diff --git a/src/core/classes/items-management/routed-items-manager.ts b/src/core/classes/items-management/routed-items-manager.ts index 6feb244cc..ac1b608ac 100644 --- a/src/core/classes/items-management/routed-items-manager.ts +++ b/src/core/classes/items-management/routed-items-manager.ts @@ -119,6 +119,34 @@ export abstract class CoreRoutedItemsManager< await CoreNavigator.navigate(pathPrefix + itemPath, { params, ...options }); } + /** + * Navigate to the index page. + * + * @param options Navigation options. + */ + protected async navigateToIndex( + options: Pick = {}, + ): Promise { + // Get current route in the page. + const route = this.getCurrentPageRoute(); + + if (route === null) { + return; + } + + // If the current page is already the index, do nothing. + const selectedItemPath = this.getSelectedItemPath(route.snapshot); + + if (selectedItemPath === null) { + return; + } + + // Navigate to index. + const indexPath = selectedItemPath ? selectedItemPath.split('/').fill('../').join('') : ''; + + await CoreNavigator.navigate(indexPath, options); + } + /** * @inheritdoc */