Share profile and post (#499)

zio/stable
Ollie Hsieh 2023-04-20 11:08:30 -07:00 committed by GitHub
parent 74a1910e12
commit 3e78c71018
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 4 deletions

View File

@ -31,8 +31,9 @@ import {ProfileHeaderLabels} from '../util/moderation/ProfileHeaderLabels'
import {usePalette} from 'lib/hooks/usePalette' import {usePalette} from 'lib/hooks/usePalette'
import {useAnalytics} from 'lib/analytics' import {useAnalytics} from 'lib/analytics'
import {NavigationProp} from 'lib/routes/types' import {NavigationProp} from 'lib/routes/types'
import {isDesktopWeb} from 'platform/detection' import {isAndroid, isDesktopWeb, isIOS} from 'platform/detection'
import {FollowState} from 'state/models/cache/my-follows' import {FollowState} from 'state/models/cache/my-follows'
import Clipboard from '@react-native-clipboard/clipboard'
const BACK_HITSLOP = {left: 30, top: 30, right: 30, bottom: 30} const BACK_HITSLOP = {left: 30, top: 30, right: 30, bottom: 30}
@ -148,9 +149,18 @@ const ProfileHeaderLoaded = observer(function ProfileHeaderLoaded({
navigation.push('ProfileFollows', {name: view.handle}) navigation.push('ProfileFollows', {name: view.handle})
}, [track, navigation, view]) }, [track, navigation, view])
const onPressShare = React.useCallback(() => { const onPressShare = React.useCallback(async () => {
track('ProfileHeader:ShareButtonClicked') track('ProfileHeader:ShareButtonClicked')
Share.share({url: toShareUrl(`/profile/${view.handle}`)}) const url = toShareUrl(`/profile/${view.handle}`)
if (isIOS || isAndroid) {
Share.share({url})
} else {
// React Native Share is not supported by web. Web Share API
// has increasing but not full support, so default to clipboard
Clipboard.setString(url)
Toast.show('Copied to clipboard')
}
}, [track, view]) }, [track, view])
const onPressMuteAccount = React.useCallback(async () => { const onPressMuteAccount = React.useCallback(async () => {

View File

@ -19,6 +19,9 @@ import {toShareUrl} from 'lib/strings/url-helpers'
import {useStores} from 'state/index' import {useStores} from 'state/index'
import {usePalette} from 'lib/hooks/usePalette' import {usePalette} from 'lib/hooks/usePalette'
import {useTheme} from 'lib/ThemeContext' import {useTheme} from 'lib/ThemeContext'
import {isAndroid, isIOS} from 'platform/detection'
import Clipboard from '@react-native-clipboard/clipboard'
import * as Toast from '../../util/Toast'
const HITSLOP = {left: 10, top: 10, right: 10, bottom: 10} const HITSLOP = {left: 10, top: 10, right: 10, bottom: 10}
const ESTIMATED_MENU_ITEM_HEIGHT = 52 const ESTIMATED_MENU_ITEM_HEIGHT = 52
@ -159,7 +162,16 @@ export function PostDropdownBtn({
icon: 'share', icon: 'share',
label: 'Share...', label: 'Share...',
onPress() { onPress() {
Share.share({url: toShareUrl(itemHref)}) const url = toShareUrl(itemHref)
if (isIOS || isAndroid) {
Share.share({url})
} else {
// React Native Share is not supported by web. Web Share API
// has increasing but not full support, so default to clipboard
Clipboard.setString(url)
Toast.show('Copied to clipboard')
}
}, },
}, },
{ {