Fix richtext link rendering

zio/stable
Paul Frazee 2022-11-18 11:37:25 -06:00
parent 2f9dd131f9
commit 368286ad67
2 changed files with 44 additions and 16 deletions

View File

@ -1,6 +1,12 @@
import React from 'react'
import {observer} from 'mobx-react-lite'
import {StyleProp, Text, TouchableOpacity, ViewStyle} from 'react-native'
import {
StyleProp,
Text,
TouchableOpacity,
TextStyle,
ViewStyle,
} from 'react-native'
import {useStores} from '../../../state'
import {LinkActionsModel} from '../../../state/models/shell-ui'
@ -21,6 +27,7 @@ export const Link = observer(function Link({
store.nav.navigate(href)
}
const onLongPress = () => {
store.shell.closeModal() // close any active modals
store.nav.newTab(href, title)
// store.shell.openModal(new LinkActionsModel(href, title || href))
}
@ -34,3 +41,30 @@ export const Link = observer(function Link({
</TouchableOpacity>
)
})
export const TextLink = observer(function Link({
style,
href,
title,
text,
}: {
style?: StyleProp<TextStyle>
href: string
title?: string
text: string
}) {
const store = useStores()
const onPress = () => {
store.shell.closeModal() // close any active modals
store.nav.navigate(href)
}
const onLongPress = () => {
store.shell.closeModal() // close any active modals
store.nav.newTab(href, title)
}
return (
<Text style={style} onPress={onPress} onLongPress={onLongPress}>
{text}
</Text>
)
})

View File

@ -1,6 +1,6 @@
import React from 'react'
import {Text, TextStyle, StyleProp} from 'react-native'
import {Link} from './Link'
import {Text, TextStyle, StyleProp, View} from 'react-native'
import {TextLink} from './Link'
import {s} from '../../lib/styles'
type TextSlice = {start: number; end: number}
@ -30,26 +30,20 @@ export function RichText({
let key = 0
for (const segment of segments) {
if (typeof segment === 'string') {
els.push(
<Text key={key} style={style}>
{segment}
</Text>,
)
els.push(segment)
} else {
els.push(
<Link
<TextLink
key={key}
title={segment.text}
href={`/profile/${segment.entity.value}`}>
<Text key={key} style={[style, s.blue3]}>
{segment.text}
</Text>
</Link>,
text={segment.text}
href={`/profile/${segment.entity.value}`}
style={[style, s.blue3]}
/>,
)
}
key++
}
return <>{els}</>
return <Text style={style}>{els}</Text>
}
function sortByIndex(a: Entity, b: Entity) {