about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/lib/strings.ts2
-rw-r--r--src/state/models/profile-view.ts6
-rw-r--r--src/view/com/profile/ProfileHeader.tsx10
-rw-r--r--src/view/com/util/RichText.tsx8
4 files changed, 22 insertions, 4 deletions
diff --git a/src/lib/strings.ts b/src/lib/strings.ts
index f884cc86c..480dfdcc3 100644
--- a/src/lib/strings.ts
+++ b/src/lib/strings.ts
@@ -69,6 +69,8 @@ export function extractEntities(
     while ((match = re.exec(text))) {
       if (knownHandles && !knownHandles.has(match[3])) {
         continue // not a known handle
+      } else if (!match[3].includes('.')) {
+        continue // probably not a handle
       }
       ents.push({
         type: 'mention',
diff --git a/src/state/models/profile-view.ts b/src/state/models/profile-view.ts
index 8386fbbc4..927374cc6 100644
--- a/src/state/models/profile-view.ts
+++ b/src/state/models/profile-view.ts
@@ -1,6 +1,8 @@
 import {makeAutoObservable, runInAction} from 'mobx'
 import * as GetProfile from '../../third-party/api/src/client/types/app/bsky/actor/getProfile'
 import * as Profile from '../../third-party/api/src/client/types/app/bsky/actor/profile'
+import {Entity} from '../../third-party/api/src/client/types/app/bsky/feed/post'
+import {extractEntities} from '../../lib/strings'
 import {Declaration} from './_common'
 import {RootStoreModel} from './root-store'
 import * as apilib from '../lib/api'
@@ -41,6 +43,9 @@ export class ProfileViewModel {
   postsCount: number = 0
   myState = new ProfileViewMyStateModel()
 
+  // added data
+  descriptionEntities?: Entity[]
+
   constructor(
     public rootStore: RootStoreModel,
     params: GetProfile.QueryParams,
@@ -163,5 +168,6 @@ export class ProfileViewModel {
     if (res.data.myState) {
       Object.assign(this.myState, res.data.myState)
     }
+    this.descriptionEntities = extractEntities(this.description || '')
   }
 }
diff --git a/src/view/com/profile/ProfileHeader.tsx b/src/view/com/profile/ProfileHeader.tsx
index 5a31d5c54..9325a88a3 100644
--- a/src/view/com/profile/ProfileHeader.tsx
+++ b/src/view/com/profile/ProfileHeader.tsx
@@ -24,6 +24,7 @@ import {MagnifyingGlassIcon} from '../../lib/icons'
 import {DropdownBtn, DropdownItem} from '../util/DropdownBtn'
 import Toast from '../util/Toast'
 import {LoadingPlaceholder} from '../util/LoadingPlaceholder'
+import {RichText} from '../util/RichText'
 import {UserAvatar} from '../util/UserAvatar'
 import {UserBanner} from '../util/UserBanner'
 import {UserInfoText} from '../util/UserInfoText'
@@ -293,9 +294,12 @@ export const ProfileHeader = observer(function ProfileHeader({
           </View>
         </View>
         {view.description ? (
-          <Text style={styles.description} numberOfLines={3}>
-            {view.description}
-          </Text>
+          <RichText
+            style={styles.description}
+            numberOfLines={3}
+            text={view.description}
+            entities={view.descriptionEntities}
+          />
         ) : undefined}
         {view.isScene && view.creator ? (
           <View style={styles.relationshipsLine}>
diff --git a/src/view/com/util/RichText.tsx b/src/view/com/util/RichText.tsx
index a67f90a63..8b4e6a50a 100644
--- a/src/view/com/util/RichText.tsx
+++ b/src/view/com/util/RichText.tsx
@@ -15,10 +15,12 @@ export function RichText({
   text,
   entities,
   style,
+  numberOfLines,
 }: {
   text: string
   entities?: Entity[]
   style?: StyleProp<TextStyle>
+  numberOfLines?: number
 }) {
   if (!entities?.length) {
     return <Text style={style}>{text}</Text>
@@ -55,7 +57,11 @@ export function RichText({
     }
     key++
   }
-  return <Text style={style}>{els}</Text>
+  return (
+    <Text style={style} numberOfLines={numberOfLines}>
+      {els}
+    </Text>
+  )
 }
 
 function sortByIndex(a: Entity, b: Entity) {