mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Present in-app browser as sheet (#5718)

* use page sheet presentation

* move to its own file rather than sitting in prefs

* whoops, missed one

authored by samuel.fm and committed by

GitHub d6322477 8e164274

+71 -65
+1 -1
src/components/Link.tsx
··· 10 10 11 11 import {BSKY_DOWNLOAD_URL} from '#/lib/constants' 12 12 import {useNavigationDeduped} from '#/lib/hooks/useNavigationDeduped' 13 + import {useOpenLink} from '#/lib/hooks/useOpenLink' 13 14 import {AllNavigatorParams} from '#/lib/routes/types' 14 15 import {shareUrl} from '#/lib/sharing' 15 16 import { ··· 21 22 import {isNative, isWeb} from '#/platform/detection' 22 23 import {shouldClickOpenNewTab} from '#/platform/urls' 23 24 import {useModalControls} from '#/state/modals' 24 - import {useOpenLink} from '#/state/preferences/in-app-browser' 25 25 import {atoms as a, flatten, TextStyleProp, useTheme, web} from '#/alf' 26 26 import {Button, ButtonProps} from '#/components/Button' 27 27 import {useInteractionState} from '#/components/hooks/useInteractionState'
+1 -1
src/components/dms/MessageMenu.tsx
··· 5 5 import {msg} from '@lingui/macro' 6 6 import {useLingui} from '@lingui/react' 7 7 8 + import {useOpenLink} from '#/lib/hooks/useOpenLink' 8 9 import {richTextToString} from '#/lib/strings/rich-text-helpers' 9 10 import {getTranslatorLink} from '#/locale/helpers' 10 11 import {isWeb} from '#/platform/detection' 11 12 import {useConvoActive} from '#/state/messages/convo' 12 13 import {useLanguagePrefs} from '#/state/preferences' 13 - import {useOpenLink} from '#/state/preferences/in-app-browser' 14 14 import {useSession} from '#/state/session' 15 15 import * as Toast from '#/view/com/util/Toast' 16 16 import {atoms as a, useTheme} from '#/alf'
+54
src/lib/hooks/useOpenLink.ts
··· 1 + import {useCallback} from 'react' 2 + import {Linking} from 'react-native' 3 + import * as WebBrowser from 'expo-web-browser' 4 + 5 + import { 6 + createBskyAppAbsoluteUrl, 7 + isBskyRSSUrl, 8 + isRelativeUrl, 9 + } from '#/lib/strings/url-helpers' 10 + import {isNative} from '#/platform/detection' 11 + import {useModalControls} from '#/state/modals' 12 + import {useInAppBrowser} from '#/state/preferences/in-app-browser' 13 + import {useTheme} from '#/alf' 14 + import {useSheetWrapper} from '#/components/Dialog/sheet-wrapper' 15 + 16 + export function useOpenLink() { 17 + const {openModal} = useModalControls() 18 + const enabled = useInAppBrowser() 19 + const t = useTheme() 20 + const sheetWrapper = useSheetWrapper() 21 + 22 + const openLink = useCallback( 23 + async (url: string, override?: boolean) => { 24 + if (isBskyRSSUrl(url) && isRelativeUrl(url)) { 25 + url = createBskyAppAbsoluteUrl(url) 26 + } 27 + 28 + if (isNative && !url.startsWith('mailto:')) { 29 + if (override === undefined && enabled === undefined) { 30 + openModal({ 31 + name: 'in-app-browser-consent', 32 + href: url, 33 + }) 34 + return 35 + } else if (override ?? enabled) { 36 + await sheetWrapper( 37 + WebBrowser.openBrowserAsync(url, { 38 + presentationStyle: 39 + WebBrowser.WebBrowserPresentationStyle.PAGE_SHEET, 40 + toolbarColor: t.atoms.bg.backgroundColor, 41 + controlsColor: t.palette.primary_500, 42 + createTask: false, 43 + }), 44 + ) 45 + return 46 + } 47 + } 48 + Linking.openURL(url) 49 + }, 50 + [enabled, openModal, t, sheetWrapper], 51 + ) 52 + 53 + return openLink 54 + }
-46
src/state/preferences/in-app-browser.tsx
··· 1 1 import React from 'react' 2 - import {Linking} from 'react-native' 3 - import * as WebBrowser from 'expo-web-browser' 4 2 5 - import {usePalette} from '#/lib/hooks/usePalette' 6 - import { 7 - createBskyAppAbsoluteUrl, 8 - isBskyRSSUrl, 9 - isRelativeUrl, 10 - } from '#/lib/strings/url-helpers' 11 - import {isNative} from '#/platform/detection' 12 3 import * as persisted from '#/state/persisted' 13 - import {useModalControls} from '../modals' 14 4 15 5 type StateContext = persisted.Schema['useInAppBrowser'] 16 6 type SetContext = (v: persisted.Schema['useInAppBrowser']) => void ··· 55 45 export function useSetInAppBrowser() { 56 46 return React.useContext(setContext) 57 47 } 58 - 59 - export function useOpenLink() { 60 - const {openModal} = useModalControls() 61 - const enabled = useInAppBrowser() 62 - const pal = usePalette('default') 63 - 64 - const openLink = React.useCallback( 65 - async (url: string, override?: boolean) => { 66 - if (isBskyRSSUrl(url) && isRelativeUrl(url)) { 67 - url = createBskyAppAbsoluteUrl(url) 68 - } 69 - 70 - if (isNative && !url.startsWith('mailto:')) { 71 - if (override === undefined && enabled === undefined) { 72 - openModal({ 73 - name: 'in-app-browser-consent', 74 - href: url, 75 - }) 76 - return 77 - } else if (override ?? enabled) { 78 - await WebBrowser.openBrowserAsync(url, { 79 - presentationStyle: 80 - WebBrowser.WebBrowserPresentationStyle.FULL_SCREEN, 81 - toolbarColor: pal.colors.backgroundLight, 82 - createTask: false, 83 - }) 84 - return 85 - } 86 - } 87 - Linking.openURL(url) 88 - }, 89 - [enabled, openModal, pal.colors.backgroundLight], 90 - ) 91 - 92 - return openLink 93 - }
+5 -7
src/view/com/modals/InAppBrowserConsent.tsx
··· 3 3 import {msg, Trans} from '@lingui/macro' 4 4 import {useLingui} from '@lingui/react' 5 5 6 + import {useOpenLink} from '#/lib/hooks/useOpenLink' 6 7 import {usePalette} from '#/lib/hooks/usePalette' 7 8 import {s} from '#/lib/styles' 8 9 import {useModalControls} from '#/state/modals' 9 - import { 10 - useOpenLink, 11 - useSetInAppBrowser, 12 - } from '#/state/preferences/in-app-browser' 13 - import {Button} from '../util/forms/Button' 14 - import {Text} from '../util/text/Text' 15 - import {ScrollView} from './util' 10 + import {useSetInAppBrowser} from '#/state/preferences/in-app-browser' 11 + import {ScrollView} from '#/view/com/modals/util' 12 + import {Button} from '#/view/com/util/forms/Button' 13 + import {Text} from '#/view/com/util/text/Text' 16 14 17 15 export const snapPoints = [350] 18 16
+1 -1
src/view/com/modals/LinkWarning.tsx
··· 4 4 import {msg, Trans} from '@lingui/macro' 5 5 import {useLingui} from '@lingui/react' 6 6 7 + import {useOpenLink} from '#/lib/hooks/useOpenLink' 7 8 import {usePalette} from '#/lib/hooks/usePalette' 8 9 import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries' 9 10 import {shareUrl} from '#/lib/sharing' ··· 11 12 import {colors, s} from '#/lib/styles' 12 13 import {isWeb} from '#/platform/detection' 13 14 import {useModalControls} from '#/state/modals' 14 - import {useOpenLink} from '#/state/preferences/in-app-browser' 15 15 import {Button} from '#/view/com/util/forms/Button' 16 16 import {Text} from '#/view/com/util/text/Text' 17 17 import {ScrollView} from './util'
+1 -1
src/view/com/post-thread/PostThreadItem.tsx
··· 13 13 import {useLingui} from '@lingui/react' 14 14 15 15 import {MAX_POST_LINES} from '#/lib/constants' 16 + import {useOpenLink} from '#/lib/hooks/useOpenLink' 16 17 import {usePalette} from '#/lib/hooks/usePalette' 17 18 import {makeProfileLink} from '#/lib/routes/links' 18 19 import {sanitizeDisplayName} from '#/lib/strings/display-names' ··· 22 23 import {s} from '#/lib/styles' 23 24 import {POST_TOMBSTONE, Shadow, usePostShadow} from '#/state/cache/post-shadow' 24 25 import {useLanguagePrefs} from '#/state/preferences' 25 - import {useOpenLink} from '#/state/preferences/in-app-browser' 26 26 import {ThreadPost} from '#/state/queries/post-thread' 27 27 import {useSession} from '#/state/session' 28 28 import {useComposerControls} from '#/state/shell/composer'
+7 -7
src/view/com/util/Link.tsx
··· 13 13 import {sanitizeUrl} from '@braintree/sanitize-url' 14 14 import {StackActions, useLinkProps} from '@react-navigation/native' 15 15 16 - import {useModalControls} from '#/state/modals' 17 - import {useOpenLink} from '#/state/preferences/in-app-browser' 18 16 import { 19 17 DebouncedNavigationProp, 20 18 useNavigationDeduped, 21 - } from 'lib/hooks/useNavigationDeduped' 19 + } from '#/lib/hooks/useNavigationDeduped' 20 + import {useOpenLink} from '#/lib/hooks/useOpenLink' 22 21 import { 23 22 convertBskyAppUrlIfNeeded, 24 23 isExternalUrl, 25 24 linkRequiresWarning, 26 - } from 'lib/strings/url-helpers' 27 - import {TypographyVariant} from 'lib/ThemeContext' 28 - import {isAndroid, isWeb} from 'platform/detection' 29 - import {WebAuxClickWrapper} from 'view/com/util/WebAuxClickWrapper' 25 + } from '#/lib/strings/url-helpers' 26 + import {TypographyVariant} from '#/lib/ThemeContext' 27 + import {isAndroid, isWeb} from '#/platform/detection' 28 + import {useModalControls} from '#/state/modals' 29 + import {WebAuxClickWrapper} from '#/view/com/util/WebAuxClickWrapper' 30 30 import {useTheme} from '#/alf' 31 31 import {router} from '../../../routes' 32 32 import {PressableWithHover} from './PressableWithHover'
+1 -1
src/view/com/util/forms/PostDropdownBtn.tsx
··· 18 18 import {useLingui} from '@lingui/react' 19 19 import {useNavigation} from '@react-navigation/native' 20 20 21 + import {useOpenLink} from '#/lib/hooks/useOpenLink' 21 22 import {getCurrentRoute} from '#/lib/routes/helpers' 22 23 import {makeProfileLink} from '#/lib/routes/links' 23 24 import {CommonNavigatorParams, NavigationProp} from '#/lib/routes/types' ··· 33 34 import {useFeedFeedbackContext} from '#/state/feed-feedback' 34 35 import {useLanguagePrefs} from '#/state/preferences' 35 36 import {useHiddenPosts, useHiddenPostsApi} from '#/state/preferences' 36 - import {useOpenLink} from '#/state/preferences/in-app-browser' 37 37 import {usePinnedPostMutation} from '#/state/queries/pinned-post' 38 38 import { 39 39 usePostDeleteMutation,