mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
at ruby-v 64 lines 1.8 kB view raw
1import {useCallback} from 'react' 2import {Linking} from 'react-native' 3import * as WebBrowser from 'expo-web-browser' 4 5import {logEvent} from '#/lib/statsig/statsig' 6import { 7 createBskyAppAbsoluteUrl, 8 isBskyAppUrl, 9 isBskyRSSUrl, 10 isRelativeUrl, 11 toNiceDomain, 12} from '#/lib/strings/url-helpers' 13import {isNative} from '#/platform/detection' 14import {useModalControls} from '#/state/modals' 15import {useInAppBrowser} from '#/state/preferences/in-app-browser' 16import {useTheme} from '#/alf' 17import {useSheetWrapper} from '#/components/Dialog/sheet-wrapper' 18 19export function useOpenLink() { 20 const {openModal} = useModalControls() 21 const enabled = useInAppBrowser() 22 const t = useTheme() 23 const sheetWrapper = useSheetWrapper() 24 25 const openLink = useCallback( 26 async (url: string, override?: boolean) => { 27 if (isBskyRSSUrl(url) && isRelativeUrl(url)) { 28 url = createBskyAppAbsoluteUrl(url) 29 } 30 31 if (!isBskyAppUrl(url)) { 32 logEvent('link:clicked', { 33 domain: toNiceDomain(url), 34 url, 35 }) 36 } 37 38 if (isNative && !url.startsWith('mailto:')) { 39 if (override === undefined && enabled === undefined) { 40 openModal({ 41 name: 'in-app-browser-consent', 42 href: url, 43 }) 44 return 45 } else if (override ?? enabled) { 46 await sheetWrapper( 47 WebBrowser.openBrowserAsync(url, { 48 presentationStyle: 49 WebBrowser.WebBrowserPresentationStyle.PAGE_SHEET, 50 toolbarColor: t.atoms.bg.backgroundColor, 51 controlsColor: t.palette.primary_500, 52 createTask: false, 53 }), 54 ) 55 return 56 } 57 } 58 Linking.openURL(url) 59 }, 60 [enabled, openModal, t, sheetWrapper], 61 ) 62 63 return openLink 64}