about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorPaul Frazee <pfrazee@gmail.com>2022-11-18 11:55:05 -0600
committerPaul Frazee <pfrazee@gmail.com>2022-11-18 11:55:05 -0600
commit9d13e05dbf0bb6430060ddf556006b1721444edc (patch)
treed11db2aab7cfdf346316ce939cf4f7c56a879396 /src
parent0ac6c0ff6148e8a86b35097f1a649d241a701e69 (diff)
downloadvoidsky-9d13e05dbf0bb6430060ddf556006b1721444edc.tar.zst
Fix rendering of mentions in composer
Diffstat (limited to 'src')
-rw-r--r--src/view/com/composer/ComposePost.tsx33
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) {