diff --git a/src/components/Parse/HTML.tsx b/src/components/Parse/HTML.tsx index 8b3ed892..e8cd52b3 100644 --- a/src/components/Parse/HTML.tsx +++ b/src/components/Parse/HTML.tsx @@ -4,7 +4,8 @@ import ParseEmojis from '@components/Parse/Emojis' import StatusContext from '@components/Timeline/Shared/Context' import { useNavigation, useRoute } from '@react-navigation/native' import { StackNavigationProp } from '@react-navigation/stack' -import { TabLocalStackParamList } from '@utils/navigation/navigators' +import { urlMatcher } from '@utils/helpers/urlMatcher' +import { TabLocalStackParamList, TabSharedStackParamList } from '@utils/navigation/navigators' import { useAccountStorage, useGlobalStorage } from '@utils/storage/actions' import { StyleConstants } from '@utils/styles/constants' import layoutAnimation from '@utils/styles/layoutAnimation' @@ -152,22 +153,34 @@ const ParseHTML: React.FC = ({ ) } if (classes.includes('mention') && (status?.mentions?.length || mentions?.length)) { - const matchedMention = (status?.mentions || mentions || []).find( + let matchedMention: + | TabSharedStackParamList['Tab-Shared-Account']['account'] + | undefined = (status?.mentions || mentions || []).find( mention => mention.url === href ) if ( matchedMention && - excludeMentions?.current.find(eM => eM.id === matchedMention.id) + excludeMentions?.current.find(eM => eM.id === matchedMention?.id) ) { prevMentionRemoved.current = true return null } + + if (!matchedMention) { + const match = urlMatcher(href) + if (match?.account?.acct) { + // @ts-ignore + matchedMention = { ...match.account, url: href } + } + } + const paramsAccount = (params as { account: Mastodon.Account } | undefined)?.account - const sameAccount = paramsAccount?.id === matchedMention?.id + const sameAccount = paramsAccount ? paramsAccount.id === matchedMention?.id : false + return ( matchedMention && !disableDetails &&