diff --git a/src/libs/actions/Link.ts b/src/libs/actions/Link.ts index 4cda676d89e83..0250ea7b84a1a 100644 --- a/src/libs/actions/Link.ts +++ b/src/libs/actions/Link.ts @@ -65,13 +65,13 @@ function buildOldDotURL(url: string, shortLivedAuthToken?: string): Promise openExternalLink(oldDotURL)); + buildOldDotURL(url).then((oldDotURL) => openExternalLink(oldDotURL, undefined, shouldOpenInSameTab)); return; } @@ -82,6 +82,8 @@ function openOldDotLink(url: string) { .then((response) => (response ? buildOldDotURL(url, response.shortLivedAuthToken) : buildOldDotURL(url))) .catch(() => buildOldDotURL(url)), (oldDotURL) => oldDotURL, + undefined, + shouldOpenInSameTab, ); } diff --git a/src/libs/asyncOpenURL/index.website.ts b/src/libs/asyncOpenURL/index.website.ts index 4f6d95b76b8b3..ba7da73616c26 100644 --- a/src/libs/asyncOpenURL/index.website.ts +++ b/src/libs/asyncOpenURL/index.website.ts @@ -1,22 +1,26 @@ import {Linking} from 'react-native'; +import type {Linking as LinkingWeb} from 'react-native-web'; +import getPlatform from '@libs/getPlatform'; import Log from '@libs/Log'; +import CONST from '@src/CONST'; import type AsyncOpenURL from './types'; /** * Prevents Safari from blocking pop-up window when opened within async call. * @param shouldSkipCustomSafariLogic When true, we will use `Linking.openURL` even if the browser is Safari. */ -const asyncOpenURL: AsyncOpenURL = (promise, url, shouldSkipCustomSafariLogic) => { +const asyncOpenURL: AsyncOpenURL = (promise, url, shouldSkipCustomSafariLogic, shouldOpenInSameTab) => { if (!url) { return; } const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); + const canOpenURLInSameTab = getPlatform() === CONST.PLATFORM.WEB; - if (!isSafari || shouldSkipCustomSafariLogic) { + if (!isSafari || !!shouldSkipCustomSafariLogic || !!shouldOpenInSameTab) { promise .then((params) => { - Linking.openURL(typeof url === 'string' ? url : url(params)); + (Linking.openURL as LinkingWeb['openURL'])(typeof url === 'string' ? url : url(params), shouldOpenInSameTab && canOpenURLInSameTab ? '_self' : undefined); }) .catch(() => { Log.warn('[asyncOpenURL] error occured while opening URL', {url}); diff --git a/src/libs/asyncOpenURL/types.ts b/src/libs/asyncOpenURL/types.ts index bf24756b0cc2a..320e2606222e1 100644 --- a/src/libs/asyncOpenURL/types.ts +++ b/src/libs/asyncOpenURL/types.ts @@ -1,3 +1,3 @@ -type AsyncOpenURL = (promise: Promise, url: string | ((params: T) => string), shouldSkipCustomSafariLogic?: boolean) => void; +type AsyncOpenURL = (promise: Promise, url: string | ((params: T) => string), shouldSkipCustomSafariLogic?: boolean, shouldOpenInSameTab?: boolean) => void; export default AsyncOpenURL; diff --git a/src/pages/settings/ExitSurvey/ExitSurveyConfirmPage.tsx b/src/pages/settings/ExitSurvey/ExitSurveyConfirmPage.tsx index 00bfec6b05b0b..d5977827ef6a4 100644 --- a/src/pages/settings/ExitSurvey/ExitSurveyConfirmPage.tsx +++ b/src/pages/settings/ExitSurvey/ExitSurveyConfirmPage.tsx @@ -83,7 +83,7 @@ function ExitSurveyConfirmPage({route, navigation}: ExitSurveyConfirmPageProps) onPress={() => { ExitSurvey.switchToOldDot(); Navigation.dismissModal(); - Link.openOldDotLink(CONST.OLDDOT_URLS.INBOX); + Link.openOldDotLink(CONST.OLDDOT_URLS.INBOX, true); }} isDisabled={isOffline} />