Fix richtext link rendering
parent
2f9dd131f9
commit
368286ad67
|
@ -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>
|
||||
)
|
||||
})
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue