Skip to content

Commit a0ac909

Browse files
authored
Merge pull request Expensify#83657 from nkdengineer/fix/82362
fix: Travel opens travel.expensify.com in external browser instead of in-app webview
2 parents 029c713 + 161c9c1 commit a0ac909

3 files changed

Lines changed: 22 additions & 13 deletions

File tree

src/libs/openTravelDotLink/index.native.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@ import {getTravelDotLink} from '@libs/actions/Link';
22
import Navigation from '@libs/Navigation/Navigation';
33
import ROUTES from '@src/ROUTES';
44

5-
const openTravelDotLink = (activePolicyID?: string, postLoginPath?: string) => {
5+
const openTravelDotLink = (activePolicyID?: string, postLoginPath?: string, spotnanaToken?: string, isTestAccount?: boolean) => {
6+
if (spotnanaToken) {
7+
Navigation.navigate(ROUTES.TRAVEL_DOT_LINK_WEB_VIEW.getRoute(spotnanaToken, isTestAccount, postLoginPath));
8+
return;
9+
}
610
getTravelDotLink(activePolicyID)
711
?.then((response) => {
812
if (response.spotnanaToken) {

src/libs/openTravelDotLink/index.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
1-
import {openTravelDotLink as openTravelDotLinkWeb} from '@libs/actions/Link';
1+
import {buildTravelDotURL, openTravelDotLink as openTravelDotLinkWeb} from '@libs/actions/Link';
2+
import asyncOpenURL from '@libs/asyncOpenURL';
23
import Navigation from '@libs/Navigation/Navigation';
34
import ROUTES from '@src/ROUTES';
45

5-
const openTravelDotLink = (activePolicyID?: string, postLoginPath?: string) => {
6+
const openTravelDotLink = (activePolicyID?: string, postLoginPath?: string, spotnanaToken?: string, isTestAccount?: boolean) => {
7+
if (spotnanaToken) {
8+
asyncOpenURL(Promise.resolve(), () => buildTravelDotURL(spotnanaToken, isTestAccount ?? false, postLoginPath));
9+
return;
10+
}
611
openTravelDotLinkWeb(activePolicyID, postLoginPath)
712
?.then(() => {})
813
?.catch(() => {

src/pages/Travel/TravelTerms.tsx

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,12 @@ import useOnyx from '@hooks/useOnyx';
2020
import usePermissions from '@hooks/usePermissions';
2121
import useStyleUtils from '@hooks/useStyleUtils';
2222
import useThemeStyles from '@hooks/useThemeStyles';
23-
import {buildTravelDotURL} from '@libs/actions/Link';
2423
import {addComment} from '@libs/actions/Report';
2524
import {acceptSpotnanaTerms, cleanupTravelProvisioningSession} from '@libs/actions/Travel';
26-
import asyncOpenURL from '@libs/asyncOpenURL';
2725
import {getLatestErrorMessage} from '@libs/ErrorUtils';
2826
import Navigation from '@libs/Navigation/Navigation';
2927
import type {TravelNavigatorParamList} from '@libs/Navigation/types';
28+
import {openTravelDotLink} from '@libs/openTravelDotLink';
3029
import colors from '@styles/theme/colors';
3130
import CONFIG from '@src/CONFIG';
3231
import CONST from '@src/CONST';
@@ -78,8 +77,8 @@ function TravelTerms({route}: TravelTermsPageProps) {
7877
};
7978

8079
const acceptTermsAndOpenTravelDot = () => {
81-
asyncOpenURL(
82-
acceptSpotnanaTerms(domain, policyID).then((response) => {
80+
acceptSpotnanaTerms(domain, policyID)
81+
.then((response) => {
8382
// Extract the error code from onyxData - the backend sets errors in TRAVEL_PROVISIONING via onyxData
8483
const travelProvisioningData = response?.onyxData?.find((data) => data.key === ONYXKEYS.TRAVEL_PROVISIONING);
8584
const errorCode = (travelProvisioningData?.value as Partial<TravelProvisioning> | undefined)?.error;
@@ -120,18 +119,19 @@ function TravelTerms({route}: TravelTermsPageProps) {
120119
return Promise.reject(new Error('Request failed'));
121120
}
122121

123-
// Handle success - build URL, cleanup, and return URL for asyncOpenURL to open
122+
// Handle success - open travel in-app webview on native, or in browser on web
124123
if (response?.spotnanaToken) {
125-
const travelDotURL = buildTravelDotURL(response.spotnanaToken, response.isTestAccount ?? false);
126124
Navigation.closeRHPFlow();
127125
cleanupTravelProvisioningSession();
128-
return travelDotURL;
126+
openTravelDotLink(policyID, undefined, response.spotnanaToken, response.isTestAccount ?? false);
127+
return;
129128
}
130129

131130
return Promise.reject(new Error('No token received'));
132-
}),
133-
(travelDotURL) => travelDotURL ?? '',
134-
);
131+
})
132+
.catch(() => {
133+
// Errors are surfaced via TRAVEL_PROVISIONING in Onyx
134+
});
135135
};
136136

137137
return (

0 commit comments

Comments
 (0)