diff --git a/lib/shared/markdown.js b/lib/shared/markdown.js --- a/lib/shared/markdown.js +++ b/lib/shared/markdown.js @@ -232,6 +232,26 @@ return match; } +type ParsedUserMention = { + +content: string, + +userID: string, +}; + +function parseUserMentions( + membersMap: $ReadOnlyMap, + capture: Capture, +): ParsedUserMention { + const memberUsername = capture[2]; + const memberID = membersMap.get(memberUsername.toLowerCase()); + + invariant(memberID, 'memberID should be set'); + + return { + content: capture[0], + userID: memberID, + }; +} + function parseChatMention( chatMentionCandidates: ChatMentionCandidates, capture: Capture, @@ -348,6 +368,7 @@ parseList, createMemberMapForUserMentions, matchUserMentions, + parseUserMentions, stripSpoilersFromNotifications, stripSpoilersFromMarkdownAST, parseChatMention, diff --git a/native/markdown/rules.react.js b/native/markdown/rules.react.js --- a/native/markdown/rules.react.js +++ b/native/markdown/rules.react.js @@ -387,9 +387,8 @@ userMention: { ...SimpleMarkdown.defaultRules.strong, match: SharedMarkdown.matchUserMentions(membersMap), - parse: (capture: SharedMarkdown.Capture) => ({ - content: capture[0], - }), + parse: (capture: SharedMarkdown.Capture) => + SharedMarkdown.parseUserMentions(membersMap, capture), // eslint-disable-next-line react/display-name react: ( node: SharedMarkdown.SingleASTNode,