mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
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}