diff --git a/src/components/Search/SearchRouter/SearchRouter.tsx b/src/components/Search/SearchRouter/SearchRouter.tsx index e355ba2fbeff..252544d5a4f9 100644 --- a/src/components/Search/SearchRouter/SearchRouter.tsx +++ b/src/components/Search/SearchRouter/SearchRouter.tsx @@ -21,6 +21,7 @@ import useLocalize from '@hooks/useLocalize'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useThemeStyles from '@hooks/useThemeStyles'; import {scrollToRight} from '@libs/InputUtils'; +import backHistory from '@libs/Navigation/helpers/backHistory'; import type {SearchOption} from '@libs/OptionsListUtils'; import type {OptionData} from '@libs/ReportUtils'; import {getAutocompleteQueryWithComma, getQueryWithoutAutocompletedPart} from '@libs/SearchAutocompleteUtils'; @@ -219,7 +220,9 @@ function SearchRouter({onRouterClose, shouldHideInputCaret, isSearchRouterDispla } onRouterClose(); - Navigation.navigate(ROUTES.SEARCH_ROOT.getRoute({query: updatedQuery})); + backHistory().then(() => { + Navigation.navigate(ROUTES.SEARCH_ROOT.getRoute({query: updatedQuery})); + }); setTextInputValue(''); setAutocompleteQueryValue(''); @@ -284,11 +287,13 @@ function SearchRouter({onRouterClose, shouldHideInputCaret, isSearchRouterDispla } } else { onRouterClose(); - if (item?.reportID) { - Navigation.navigateToReportWithPolicyCheck({reportID: item?.reportID}); - } else if ('login' in item) { - navigateToAndOpenReport(item.login ? [item.login] : [], false); - } + backHistory().then(() => { + if (item?.reportID) { + Navigation.navigateToReportWithPolicyCheck({reportID: item?.reportID}); + } else if ('login' in item) { + navigateToAndOpenReport(item.login ? [item.login] : [], false); + } + }); } }, [autocompleteSubstitutions, onRouterClose, onSearchQueryChange, submitSearch, textInputValue], diff --git a/src/libs/Navigation/helpers/backHistory/index.ts b/src/libs/Navigation/helpers/backHistory/index.ts new file mode 100644 index 000000000000..5dfbf5ebdc00 --- /dev/null +++ b/src/libs/Navigation/helpers/backHistory/index.ts @@ -0,0 +1,22 @@ +import {isMobileChrome} from '@libs/Browser'; + +/** + * This function is used to trigger a browser back navigation and resolves a promise once the navigation is complete (only on mobile Chrome). + * More details - https://github.com/Expensify/App/issues/58946. + */ +export default function backHistory() { + return new Promise((resolve) => { + if (!isMobileChrome()) { + resolve(); + return; + } + + const onPopState = () => { + window.removeEventListener('popstate', onPopState); + resolve(); + }; + + window.addEventListener('popstate', onPopState); + window.history.back(); + }); +}