From d6322477fea0a55f1dd0c49865a248cb2f578f75 Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Sat, 12 Oct 2024 02:42:58 +0300 Subject: Present in-app browser as sheet (#5718) * use page sheet presentation * move to its own file rather than sitting in prefs * whoops, missed one --- src/lib/hooks/useOpenLink.ts | 54 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/lib/hooks/useOpenLink.ts (limited to 'src/lib/hooks/useOpenLink.ts') diff --git a/src/lib/hooks/useOpenLink.ts b/src/lib/hooks/useOpenLink.ts new file mode 100644 index 000000000..5b75695b8 --- /dev/null +++ b/src/lib/hooks/useOpenLink.ts @@ -0,0 +1,54 @@ +import {useCallback} from 'react' +import {Linking} from 'react-native' +import * as WebBrowser from 'expo-web-browser' + +import { + createBskyAppAbsoluteUrl, + isBskyRSSUrl, + isRelativeUrl, +} from '#/lib/strings/url-helpers' +import {isNative} from '#/platform/detection' +import {useModalControls} from '#/state/modals' +import {useInAppBrowser} from '#/state/preferences/in-app-browser' +import {useTheme} from '#/alf' +import {useSheetWrapper} from '#/components/Dialog/sheet-wrapper' + +export function useOpenLink() { + const {openModal} = useModalControls() + const enabled = useInAppBrowser() + const t = useTheme() + const sheetWrapper = useSheetWrapper() + + const openLink = useCallback( + async (url: string, override?: boolean) => { + if (isBskyRSSUrl(url) && isRelativeUrl(url)) { + url = createBskyAppAbsoluteUrl(url) + } + + if (isNative && !url.startsWith('mailto:')) { + if (override === undefined && enabled === undefined) { + openModal({ + name: 'in-app-browser-consent', + href: url, + }) + return + } else if (override ?? enabled) { + await sheetWrapper( + WebBrowser.openBrowserAsync(url, { + presentationStyle: + WebBrowser.WebBrowserPresentationStyle.PAGE_SHEET, + toolbarColor: t.atoms.bg.backgroundColor, + controlsColor: t.palette.primary_500, + createTask: false, + }), + ) + return + } + } + Linking.openURL(url) + }, + [enabled, openModal, t, sheetWrapper], + ) + + return openLink +} -- cgit 1.4.1