diff options
Diffstat (limited to 'src/screens/Messages/Conversation/MessagesList.tsx')
-rw-r--r-- | src/screens/Messages/Conversation/MessagesList.tsx | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/src/screens/Messages/Conversation/MessagesList.tsx b/src/screens/Messages/Conversation/MessagesList.tsx index 1b07f8877..0b8ab5249 100644 --- a/src/screens/Messages/Conversation/MessagesList.tsx +++ b/src/screens/Messages/Conversation/MessagesList.tsx @@ -7,12 +7,15 @@ import { import {runOnJS, useSharedValue} from 'react-native-reanimated' import {ReanimatedScrollEvent} from 'react-native-reanimated/lib/typescript/reanimated2/hook/commonTypes' import {useSafeAreaInsets} from 'react-native-safe-area-context' +import {AppBskyRichtextFacet, RichText} from '@atproto/api' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' +import {shortenLinks} from '#/lib/strings/rich-text-manip' import {isIOS} from '#/platform/detection' import {useConvo} from '#/state/messages/convo' import {ConvoItem, ConvoStatus} from '#/state/messages/convo/types' +import {useAgent} from '#/state/session' import {ScrollProvider} from 'lib/ScrollContext' import {isWeb} from 'platform/detection' import {List} from 'view/com/util/List' @@ -87,6 +90,7 @@ function onScrollToIndexFailed() { export function MessagesList() { const convo = useConvo() + const {getAgent} = useAgent() const flatListRef = useRef<FlatList>(null) // We need to keep track of when the scroll offset is at the bottom of the list to know when to scroll as new items @@ -159,14 +163,30 @@ export function MessagesList() { }, [convo, hasInitiallyScrolled]) const onSendMessage = useCallback( - (text: string) => { + async (text: string) => { + let rt = new RichText({text}, {cleanNewlines: true}) + await rt.detectFacets(getAgent()) + rt = shortenLinks(rt) + + // filter out any mention facets that didn't map to a user + rt.facets = rt.facets?.filter(facet => { + const mention = facet.features.find(feature => + AppBskyRichtextFacet.isMention(feature), + ) + if (mention && !mention.did) { + return false + } + return true + }) + if (convo.status === ConvoStatus.Ready) { convo.sendMessage({ - text, + text: rt.text, + facets: rt.facets, }) } }, - [convo], + [convo, getAgent], ) const onScroll = React.useCallback( |