1
0
mirror of https://github.com/tooot-app/app synced 2025-06-05 22:19:13 +02:00

Option to change how to handle links

This commit is contained in:
Zhiyuan Zheng
2020-12-20 18:41:28 +01:00
parent 09b960d368
commit 8281d2b0b4
12 changed files with 220 additions and 276 deletions

View File

@ -2,12 +2,12 @@ import React, { useCallback, useState } from 'react'
import { Pressable, Text, View } from 'react-native'
import HTMLView from 'react-native-htmlview'
import { useNavigation } from '@react-navigation/native'
import Emojis from '@components/Timelines/Timeline/Shared/Emojis'
import { useTheme } from '@utils/styles/ThemeManager'
import { Feather } from '@expo/vector-icons'
import { StyleConstants } from '@utils/styles/constants'
import { LinearGradient } from 'expo-linear-gradient'
import openLink from '@root/utils/openLink'
// Prevent going to the same hashtag multiple times
const renderNode = ({
@ -82,11 +82,7 @@ const renderNode = ({
color: theme.link,
fontSize: StyleConstants.Font.Size[size]
}}
onPress={() => {
navigation.navigate('Screen-Shared-Webview', {
uri: href
})
}}
onPress={async () => await openLink(href)}
>
<Feather
name='external-link'

View File

@ -1,8 +1,8 @@
import React, { useCallback } from 'react'
import React from 'react'
import { Image, Pressable, StyleSheet, Text, View } from 'react-native'
import { useNavigation } from '@react-navigation/native'
import { StyleConstants } from '@utils/styles/constants'
import { useTheme } from '@utils/styles/ThemeManager'
import openLink from '@root/utils/openLink'
export interface Props {
card: Mastodon.Card
@ -10,17 +10,11 @@ export interface Props {
const TimelineCard: React.FC<Props> = ({ card }) => {
const { theme } = useTheme()
const navigation = useNavigation()
const onPress = useCallback(() => {
navigation.navigate('Screen-Shared-Webview', {
uri: card.url
})
}, [])
return (
<Pressable
style={[styles.card, { borderColor: theme.border }]}
onPress={onPress}
onPress={async () => await openLink(card.url)}
>
{card.image && (
<View style={styles.left}>

View File

@ -1,8 +1,6 @@
import React, { useCallback, useEffect, useMemo, useState } from 'react'
import { Pressable, StyleSheet, Text, View } from 'react-native'
import { useNavigation } from '@react-navigation/native'
import { Feather } from '@expo/vector-icons'
import Emojis from '@components/Timelines/Timeline/Shared/Emojis'
import relativeTime from '@utils/relativeTime'
import { getLocalUrl } from '@utils/slices/instancesSlice'
@ -13,6 +11,7 @@ import { StyleConstants } from '@utils/styles/constants'
import HeaderDefaultActionsAccount from '@components/Timelines/Timeline/Shared/HeaderDefault/ActionsAccount'
import HeaderDefaultActionsStatus from '@components/Timelines/Timeline/Shared/HeaderDefault/ActionsStatus'
import HeaderDefaultActionsDomain from '@components/Timelines/Timeline/Shared/HeaderDefault/ActionsDomain'
import openLink from '@root/utils/openLink'
export interface Props {
queryKey?: QueryKey.Timeline
@ -33,7 +32,6 @@ const TimelineHeaderDefault: React.FC<Props> = ({
const account = status.account.acct
const { theme } = useTheme()
const navigation = useNavigation()
const localDomain = useSelector(getLocalUrl)
const [since, setSince] = useState(relativeTime(status.created_at))
const [modalVisible, setBottomSheetVisible] = useState(false)
@ -49,12 +47,12 @@ const TimelineHeaderDefault: React.FC<Props> = ({
}, [since])
const onPressAction = useCallback(() => setBottomSheetVisible(true), [])
const onPressApplication = useCallback(() => {
status.application!.website &&
navigation.navigate('Screen-Shared-Webview', {
uri: status.application!.website
})
}, [])
const onPressApplication = useCallback(
async () =>
status.application!.website &&
(await openLink(status.application!.website)),
[]
)
const pressableAction = useMemo(
() => (

View File

@ -8,7 +8,6 @@ import {
} from 'react-native'
import { useNavigation } from '@react-navigation/native'
import { Feather } from '@expo/vector-icons'
import Emojis from '@components/Timelines/Timeline/Shared/Emojis'
import relativeTime from '@utils/relativeTime'
import { useTheme } from '@utils/styles/ThemeManager'
@ -17,6 +16,7 @@ import { useQuery } from 'react-query'
import { relationshipFetch } from '@utils/fetches/relationshipFetch'
import client from '@api/client'
import { toast } from '@components/toast'
import openLink from '@root/utils/openLink'
export interface Props {
notification: Mastodon.Notification
@ -49,11 +49,12 @@ const TimelineHeaderNotification: React.FC<Props> = ({ notification }) => {
}, 1000)
}, [since])
const applicationOnPress = useCallback(() => {
navigation.navigate('Screen-Shared-Webview', {
uri: notification.status?.application!.website
})
}, [])
const applicationOnPress = useCallback(
async () =>
notification.status?.application.website &&
(await openLink(notification.status.application.website)),
[]
)
const relationshipOnPress = useCallback(() => {
client({