diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/strings.ts | 2 | ||||
-rw-r--r-- | src/state/models/profile-view.ts | 6 | ||||
-rw-r--r-- | src/view/com/profile/ProfileHeader.tsx | 10 | ||||
-rw-r--r-- | src/view/com/util/RichText.tsx | 8 |
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) { |