From 7729cf2d1013ca0b82fc2eedc53735a52af07016 Mon Sep 17 00:00:00 2001 From: Mattermost Build Date: Wed, 9 Sep 2020 12:33:27 -0400 Subject: [PATCH] MM-28295 Do not remove the Channel screen from the stack tracking (#4793) (#4794) * Do not remove the Channel screen from the stack tracking * Reset stack for select server & when no teams are present (cherry picked from commit 96bf1db24336df86cfa6ce05ce0becda2acbb60c) Co-authored-by: Elias Nahum --- app/actions/navigation/index.js | 18 ++++++++++-------- app/constants/navigation.js | 2 ++ app/mattermost.js | 4 +++- app/store/ephemeral_store.js | 2 +- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/app/actions/navigation/index.js b/app/actions/navigation/index.js index b09f4b8883..1ad522706b 100644 --- a/app/actions/navigation/index.js +++ b/app/actions/navigation/index.js @@ -13,8 +13,6 @@ import EphemeralStore from '@store/ephemeral_store'; import Store from '@store/store'; import {NavigationTypes} from '@constants'; -const CHANNEL_SCREEN = 'Channel'; - function getThemeFromState() { const state = Store.redux?.getState() || {}; @@ -29,8 +27,8 @@ export function resetToChannel(passProps = {}) { const stack = { children: [{ component: { - id: CHANNEL_SCREEN, - name: CHANNEL_SCREEN, + id: NavigationTypes.CHANNEL_SCREEN, + name: NavigationTypes.CHANNEL_SCREEN, passProps, options: { layout: { @@ -88,6 +86,8 @@ export function resetToChannel(passProps = {}) { export function resetToSelectServer(allowOtherServers) { const theme = Preferences.THEMES.default; + EphemeralStore.clearNavigationComponents(); + Navigation.setRoot({ root: { stack: { @@ -150,6 +150,8 @@ export function resetToTeams(name, title, passProps = {}, options = {}) { }, }; + EphemeralStore.clearNavigationComponents(); + Navigation.setRoot({ root: { stack: { @@ -427,7 +429,7 @@ export function closeMainSideMenu() { } Keyboard.dismiss(); - Navigation.mergeOptions(CHANNEL_SCREEN, { + Navigation.mergeOptions(NavigationTypes.CHANNEL_SCREEN, { sideMenu: { left: {visible: false}, }, @@ -439,7 +441,7 @@ export function enableMainSideMenu(enabled, visible = true) { return; } - Navigation.mergeOptions(CHANNEL_SCREEN, { + Navigation.mergeOptions(NavigationTypes.CHANNEL_SCREEN, { sideMenu: { left: {enabled, visible}, }, @@ -452,7 +454,7 @@ export function openSettingsSideMenu() { } Keyboard.dismiss(); - Navigation.mergeOptions(CHANNEL_SCREEN, { + Navigation.mergeOptions(NavigationTypes.CHANNEL_SCREEN, { sideMenu: { right: {visible: true}, }, @@ -465,7 +467,7 @@ export function closeSettingsSideMenu() { } Keyboard.dismiss(); - Navigation.mergeOptions(CHANNEL_SCREEN, { + Navigation.mergeOptions(NavigationTypes.CHANNEL_SCREEN, { sideMenu: { right: {visible: false}, }, diff --git a/app/constants/navigation.js b/app/constants/navigation.js index 7892bbd372..a11ac605b3 100644 --- a/app/constants/navigation.js +++ b/app/constants/navigation.js @@ -18,4 +18,6 @@ const NavigationTypes = keyMirror({ BLUR_POST_DRAFT: null, }); +NavigationTypes.CHANNEL_SCREEN = 'Channel'; + export default NavigationTypes; diff --git a/app/mattermost.js b/app/mattermost.js index 8d2799fae8..54ed3572b2 100644 --- a/app/mattermost.js +++ b/app/mattermost.js @@ -124,7 +124,9 @@ export function componentDidAppearListener({componentId}) { } export function componentDidDisappearListener({componentId}) { - EphemeralStore.removeNavigationComponentId(componentId); + if (componentId !== NavigationTypes.CHANNEL_SCREEN) { + EphemeralStore.removeNavigationComponentId(componentId); + } if (componentId === 'MainSidebar') { EventEmitter.emit(NavigationTypes.MAIN_SIDEBAR_DID_CLOSE); diff --git a/app/store/ephemeral_store.js b/app/store/ephemeral_store.js index c9b439069d..22d7fecb26 100644 --- a/app/store/ephemeral_store.js +++ b/app/store/ephemeral_store.js @@ -58,7 +58,7 @@ class EphemeralStore { removeNavigationComponentId = (componentId) => { const index = this.navigationComponentIdStack.indexOf(componentId); - if (index > 0) { + if (index >= 0) { this.navigationComponentIdStack.splice(index, 1); } }