about summary refs log tree commit diff
path: root/src/view/com/composer/ComposePost.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/view/com/composer/ComposePost.tsx')
-rw-r--r--src/view/com/composer/ComposePost.tsx29
1 files changed, 12 insertions, 17 deletions
diff --git a/src/view/com/composer/ComposePost.tsx b/src/view/com/composer/ComposePost.tsx
index c104041aa..cc9eca068 100644
--- a/src/view/com/composer/ComposePost.tsx
+++ b/src/view/com/composer/ComposePost.tsx
@@ -20,6 +20,7 @@ import {useStores} from '../../../state'
 import * as apilib from '../../../state/lib/api'
 import {ComposerOpts} from '../../../state/models/shell-ui'
 import {s, colors, gradients} from '../../lib/styles'
+import {detectLinkables} from '../../../lib/strings'
 
 const MAX_TEXT_LENGTH = 256
 const WARNING_TEXT_LENGTH = 200
@@ -108,24 +109,18 @@ export const ComposePost = observer(function ComposePost({
       : undefined
 
   const textDecorated = useMemo(() => {
-    const re = /(@[a-z0-9\.]*)|(https?:\/\/[\S]+)/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
+    return detectLinkables(text).map(v => {
+      if (typeof v === 'string') {
+        return v
+      } else {
+        return (
+          <Text key={i++} style={{color: colors.blue3}}>
+            {v.link}
+          </Text>
+        )
+      }
+    })
   }, [text])
 
   return (