Skip to content

Commit 7ce5e9a

Browse files
Merge pull request #61297 from truph01/fix/58946
fix: duplicate history in mobile chrome
2 parents c69b73d + 63cbaaf commit 7ce5e9a

File tree

2 files changed

+33
-6
lines changed

2 files changed

+33
-6
lines changed

src/components/Search/SearchRouter/SearchRouter.tsx

+11-6
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import useLocalize from '@hooks/useLocalize';
2121
import useResponsiveLayout from '@hooks/useResponsiveLayout';
2222
import useThemeStyles from '@hooks/useThemeStyles';
2323
import {scrollToRight} from '@libs/InputUtils';
24+
import backHistory from '@libs/Navigation/helpers/backHistory';
2425
import type {SearchOption} from '@libs/OptionsListUtils';
2526
import type {OptionData} from '@libs/ReportUtils';
2627
import {getAutocompleteQueryWithComma, getQueryWithoutAutocompletedPart} from '@libs/SearchAutocompleteUtils';
@@ -219,7 +220,9 @@ function SearchRouter({onRouterClose, shouldHideInputCaret, isSearchRouterDispla
219220
}
220221

221222
onRouterClose();
222-
Navigation.navigate(ROUTES.SEARCH_ROOT.getRoute({query: updatedQuery}));
223+
backHistory().then(() => {
224+
Navigation.navigate(ROUTES.SEARCH_ROOT.getRoute({query: updatedQuery}));
225+
});
223226

224227
setTextInputValue('');
225228
setAutocompleteQueryValue('');
@@ -284,11 +287,13 @@ function SearchRouter({onRouterClose, shouldHideInputCaret, isSearchRouterDispla
284287
}
285288
} else {
286289
onRouterClose();
287-
if (item?.reportID) {
288-
Navigation.navigateToReportWithPolicyCheck({reportID: item?.reportID});
289-
} else if ('login' in item) {
290-
navigateToAndOpenReport(item.login ? [item.login] : [], false);
291-
}
290+
backHistory().then(() => {
291+
if (item?.reportID) {
292+
Navigation.navigateToReportWithPolicyCheck({reportID: item?.reportID});
293+
} else if ('login' in item) {
294+
navigateToAndOpenReport(item.login ? [item.login] : [], false);
295+
}
296+
});
292297
}
293298
},
294299
[autocompleteSubstitutions, onRouterClose, onSearchQueryChange, submitSearch, textInputValue],
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import {isMobileChrome} from '@libs/Browser';
2+
3+
/**
4+
* This function is used to trigger a browser back navigation and resolves a promise once the navigation is complete (only on mobile Chrome).
5+
* More details - https://github.com/Expensify/App/issues/58946.
6+
*/
7+
export default function backHistory() {
8+
return new Promise<void>((resolve) => {
9+
if (!isMobileChrome()) {
10+
resolve();
11+
return;
12+
}
13+
14+
const onPopState = () => {
15+
window.removeEventListener('popstate', onPopState);
16+
resolve();
17+
};
18+
19+
window.addEventListener('popstate', onPopState);
20+
window.history.back();
21+
});
22+
}

0 commit comments

Comments
 (0)