diff --git a/src/libs/Navigation/AppNavigator/createCustomBottomTabNavigator/BottomTabBar.tsx b/src/libs/Navigation/AppNavigator/createCustomBottomTabNavigator/BottomTabBar.tsx index 394a617278d4..f432d863704e 100644 --- a/src/libs/Navigation/AppNavigator/createCustomBottomTabNavigator/BottomTabBar.tsx +++ b/src/libs/Navigation/AppNavigator/createCustomBottomTabNavigator/BottomTabBar.tsx @@ -52,7 +52,7 @@ function handleQueryWithPolicyID(query: SearchQueryString, activePolicyID?: stri return query; } - const policyID = queryJSON.policyID ?? activePolicyID; + const policyID = activePolicyID ?? queryJSON.policyID; const policy = PolicyUtils.getPolicy(policyID); // In case policy is missing or there is no policy currently selected via WorkspaceSwitcher we remove it diff --git a/src/libs/Navigation/getPolicyIDFromState.ts b/src/libs/Navigation/getPolicyIDFromState.ts index 62690f29a98f..702fb654780d 100644 --- a/src/libs/Navigation/getPolicyIDFromState.ts +++ b/src/libs/Navigation/getPolicyIDFromState.ts @@ -1,23 +1,30 @@ +import SCREENS from '@src/SCREENS'; import extractPolicyIDFromQuery from './extractPolicyIDFromQuery'; import getTopmostBottomTabRoute from './getTopmostBottomTabRoute'; +import getTopmostCentralPaneRoute from './getTopmostCentralPaneRoute'; import type {RootStackParamList, State} from './types'; /** * returns policyID value if one exists in navigation state * * PolicyID in this app can be stored in two ways: - * - on most screens but NOT Search as `policyID` param - * - on Search related screens as policyID filter inside `q` (SearchQuery) param + * - on most screens but NOT Search as `policyID` param (on bottom tab screens) + * - on Search related screens as policyID filter inside `q` (SearchQuery) param (only for SEARCH_CENTRAL_PANE) */ const getPolicyIDFromState = (state: State): string | undefined => { const topmostBottomTabRoute = getTopmostBottomTabRoute(state); - const policyID = topmostBottomTabRoute && topmostBottomTabRoute.params && 'policyID' in topmostBottomTabRoute.params && topmostBottomTabRoute.params?.policyID; - if (policyID) { - return topmostBottomTabRoute.params?.policyID as string; + if (!topmostBottomTabRoute) { + return; + } + + if (topmostBottomTabRoute.name === SCREENS.SEARCH.BOTTOM_TAB) { + const topmostCentralPaneRoute = getTopmostCentralPaneRoute(state); + return extractPolicyIDFromQuery(topmostCentralPaneRoute); } - return extractPolicyIDFromQuery(topmostBottomTabRoute); + const policyID = topmostBottomTabRoute && topmostBottomTabRoute.params && 'policyID' in topmostBottomTabRoute.params && topmostBottomTabRoute.params?.policyID; + return policyID ? (topmostBottomTabRoute.params?.policyID as string) : undefined; }; export default getPolicyIDFromState; diff --git a/src/libs/Navigation/switchPolicyID.ts b/src/libs/Navigation/switchPolicyID.ts index f65b32006c0e..5ccc2da54418 100644 --- a/src/libs/Navigation/switchPolicyID.ts +++ b/src/libs/Navigation/switchPolicyID.ts @@ -46,9 +46,7 @@ function getActionForBottomTabNavigator(action: StackNavigationAction, state: Na if (name === SCREENS.SEARCH.CENTRAL_PANE) { name = SCREENS.SEARCH.BOTTOM_TAB; - } - - if (!params) { + } else if (!params) { params = {policyID}; } else { params.policyID = policyID; @@ -109,19 +107,19 @@ export default function switchPolicyID(navigation: NavigationContainerRef; - const lastSearchCentralPaneRoute = rootState.routes.filter((route) => route.name === SCREENS.SEARCH.CENTRAL_PANE).at(-1); - const lastSearchBottomTabRoute = rootState.routes[0].state?.routes.filter((route) => route.name === SCREENS.SEARCH.BOTTOM_TAB).at(-1); + const lastSearchRoute = rootState.routes.filter((route) => route.name === SCREENS.SEARCH.CENTRAL_PANE).at(-1); - if (lastSearchCentralPaneRoute) { - return lastSearchCentralPaneRoute.params as AuthScreensParamList[typeof SCREENS.SEARCH.CENTRAL_PANE]; - } - - if (lastSearchBottomTabRoute) { - return lastSearchBottomTabRoute.params as BottomTabNavigatorParamList[typeof SCREENS.SEARCH.BOTTOM_TAB]; - } + return lastSearchRoute ? (lastSearchRoute.params as AuthScreensParamList[typeof SCREENS.SEARCH.CENTRAL_PANE]) : undefined; } function isSearchResultsEmpty(searchResults: SearchResults) {