[🐴] Rich text in messages (#3926)

* add facets to message

* richtext messages

* undo richtexttag changes

* whoops, don't redetect facets

* dont set color directly

* shorten links and filter invalid facets

* fix link shortening

* pass in underline style
This commit is contained in:
Samuel Newman 2024-05-09 21:08:56 +01:00 committed by GitHub
parent 03b2796976
commit becc708c61
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 75 additions and 20 deletions

View file

@ -1,5 +1,6 @@
import React, {useCallback, useMemo, useRef} from 'react'
import {LayoutAnimation, StyleProp, TextStyle, View} from 'react-native'
import {RichText as RichTextAPI} from '@atproto/api'
import {ChatBskyConvoDefs} from '@atproto-labs/api'
import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
@ -9,8 +10,9 @@ import {TimeElapsed} from 'view/com/util/TimeElapsed'
import {atoms as a, useTheme} from '#/alf'
import {ActionsWrapper} from '#/components/dms/ActionsWrapper'
import {Text} from '#/components/Typography'
import {RichText} from '../RichText'
export let MessageItem = ({
let MessageItem = ({
item,
next,
pending,
@ -65,6 +67,10 @@ export let MessageItem = ({
const pendingColor =
t.name === 'light' ? t.palette.primary_200 : t.palette.primary_800
const rt = useMemo(() => {
return new RichTextAPI({text: item.text, facets: item.facets})
}, [item.text, item.facets])
return (
<View>
<ActionsWrapper isFromSelf={isFromSelf} message={item}>
@ -87,15 +93,17 @@ export let MessageItem = ({
? {borderBottomRightRadius: isLastInGroup ? 2 : 17}
: {borderBottomLeftRadius: isLastInGroup ? 2 : 17},
]}>
<Text
<RichText
value={rt}
style={[
a.text_md,
a.leading_snug,
isFromSelf && {color: t.palette.white},
pending && t.name !== 'light' && {color: t.palette.primary_300},
]}>
{item.text}
</Text>
]}
interactiveStyle={a.underline}
enableTags
/>
</View>
</ActionsWrapper>
<MessageItemMetadata
@ -106,8 +114,8 @@ export let MessageItem = ({
</View>
)
}
MessageItem = React.memo(MessageItem)
export {MessageItem}
let MessageItemMetadata = ({
message,