diff options
author | Paul Frazee <pfrazee@gmail.com> | 2022-11-18 11:55:05 -0600 |
---|---|---|
committer | Paul Frazee <pfrazee@gmail.com> | 2022-11-18 11:55:05 -0600 |
commit | 9d13e05dbf0bb6430060ddf556006b1721444edc (patch) | |
tree | d11db2aab7cfdf346316ce939cf4f7c56a879396 /src | |
parent | 0ac6c0ff6148e8a86b35097f1a649d241a701e69 (diff) | |
download | voidsky-9d13e05dbf0bb6430060ddf556006b1721444edc.tar.zst |
Fix rendering of mentions in composer
Diffstat (limited to 'src')
-rw-r--r-- | src/view/com/composer/ComposePost.tsx | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/src/view/com/composer/ComposePost.tsx b/src/view/com/composer/ComposePost.tsx index b89252418..b7abbed48 100644 --- a/src/view/com/composer/ComposePost.tsx +++ b/src/view/com/composer/ComposePost.tsx @@ -108,19 +108,24 @@ export const ComposePost = observer(function ComposePost({ : undefined const textDecorated = useMemo(() => { - return (text || '').split(/(\s)/g).map((item, i) => { - if ( - /^@[a-zA-Z0-9\.-]+$/g.test(item) && - autocompleteView.knownHandles.has(item.slice(1)) - ) { - return ( - <Text key={i} style={{color: colors.blue3}}> - {item} - </Text> - ) - } - return item - }) + const re = /(@[a-z0-9\.]*)/gi + const segments = [] + let match + let start = 0 + let i = 0 + while ((match = re.exec(text))) { + segments.push(text.slice(start, match.index)) + segments.push( + <Text key={i++} style={{color: colors.blue3}}> + {match[0]} + </Text>, + ) + start = match.index + match[0].length + } + if (start < text.length) { + segments.push(text.slice(start)) + } + return segments }, [text]) return ( @@ -194,7 +199,7 @@ export const ComposePost = observer(function ComposePost({ ) }) -const atPrefixRegex = /@([\S]*)$/i +const atPrefixRegex = /@([a-z0-9\.]*)$/i function extractTextAutocompletePrefix(text: string) { const match = atPrefixRegex.exec(text) if (match) { |