diff --git a/src/app/components/CallEmbedProvider.tsx b/src/app/components/CallEmbedProvider.tsx index ade303432..1dc9ff2dc 100644 --- a/src/app/components/CallEmbedProvider.tsx +++ b/src/app/components/CallEmbedProvider.tsx @@ -59,7 +59,7 @@ import { useTheme, ThemeKind } from '../hooks/useTheme'; import { useReducedMotion } from '../hooks/useReducedMotion'; import { useSetting } from '../state/hooks/settings'; import { settingsAtom } from '../state/settings'; -import { getStateEvent, getStateEvents, getMemberDisplayName } from '../utils/room'; +import { getStateEvent, getStateEvents, getMemberName } from '../utils/room'; import { StateEvent } from '../../types/matrix/room'; import { getPowersLevelFromMatrixEvent } from '../hooks/usePowerLevels'; import { getRoomCreatorsForRoomId } from '../hooks/useRoomCreators'; @@ -161,9 +161,7 @@ function IncomingCall({ dm, info, onIgnore, onAnswer, onReject }: IncomingCallPr - {getMemberDisplayName(info.room, info.sender) ?? - getMxIdLocalPart(info.sender) ?? - info.sender} + {getMemberName(info.room, info.sender)} @@ -316,8 +314,7 @@ function IncomingCallBanner({ dm, info, onIgnore, onAnswer, onReject }: Incoming return () => clearTimeout(id); }, [info.senderTs, info.lifetime, onIgnore]); - const callerName = - getMemberDisplayName(info.room, info.sender) ?? getMxIdLocalPart(info.sender) ?? info.sender; + const callerName = getMemberName(info.room, info.sender); return ( - getMemberDisplayName(room, member.userId) ?? getMxIdLocalPart(member.userId) ?? member.userId; + const getName = (member: RoomMember) => getMemberName(room, member.userId); return ( Mentions} requestClose={requestClose}> diff --git a/src/app/components/member-tile/MemberTile.tsx b/src/app/components/member-tile/MemberTile.tsx index 4915edd32..21efba4b6 100644 --- a/src/app/components/member-tile/MemberTile.tsx +++ b/src/app/components/member-tile/MemberTile.tsx @@ -1,13 +1,12 @@ import React, { ReactNode } from 'react'; import { as, Avatar, Box, Icon, Icons, Text } from 'folds'; import { MatrixClient, Room, RoomMember } from 'matrix-js-sdk'; -import { getMemberDisplayName } from '../../utils/room'; +import { getMemberName } from '../../utils/room'; import { getMxIdLocalPart } from '../../utils/matrix'; import { UserAvatar } from '../user-avatar'; import * as css from './style.css'; -const getName = (room: Room, member: RoomMember) => - getMemberDisplayName(room, member.userId) ?? getMxIdLocalPart(member.userId) ?? member.userId; +const getName = (room: Room, member: RoomMember) => getMemberName(room, member.userId); type MemberTileProps = { mx: MatrixClient; diff --git a/src/app/features/call-status/LiveChip.tsx b/src/app/features/call-status/LiveChip.tsx index a0a4a76e8..6a52b6a7f 100644 --- a/src/app/features/call-status/LiveChip.tsx +++ b/src/app/features/call-status/LiveChip.tsx @@ -20,8 +20,8 @@ import FocusTrap from 'focus-trap-react'; import { Room } from 'matrix-js-sdk'; import * as css from './styles.css'; import { stopPropagation } from '../../utils/keyboard'; -import { getMemberAvatarMxc, getMemberDisplayName } from '../../utils/room'; -import { getMxIdLocalPart, mxcUrlToHttp } from '../../utils/matrix'; +import { getMemberAvatarMxc, getMemberName } from '../../utils/room'; +import { mxcUrlToHttp } from '../../utils/matrix'; import { useMatrixClient } from '../../hooks/useMatrixClient'; import { useMediaAuthentication } from '../../hooks/useMediaAuthentication'; import { UserAvatar } from '../../components/user-avatar'; @@ -77,8 +77,7 @@ export function LiveChip({ count, room, members }: LiveChipProps) { {members.map((callMember) => { const userId = callMember.sender; if (!userId) return null; - const name = - getMemberDisplayName(room, userId) ?? getMxIdLocalPart(userId) ?? userId; + const name = getMemberName(room, userId); const avatarMxc = getMemberAvatarMxc(room, userId); const avatarUrl = avatarMxc ? (mxcUrlToHttp(mx, avatarMxc, useAuthentication, 96, 96) ?? undefined) diff --git a/src/app/features/call-status/MemberGlance.tsx b/src/app/features/call-status/MemberGlance.tsx index e92ac8cef..01df75cdb 100644 --- a/src/app/features/call-status/MemberGlance.tsx +++ b/src/app/features/call-status/MemberGlance.tsx @@ -4,8 +4,8 @@ import React, { useState } from 'react'; import FocusTrap from 'focus-trap-react'; import { Room } from 'matrix-js-sdk'; import { UserAvatar } from '../../components/user-avatar'; -import { getMemberAvatarMxc, getMemberDisplayName } from '../../utils/room'; -import { getMxIdLocalPart, mxcUrlToHttp } from '../../utils/matrix'; +import { getMemberAvatarMxc, getMemberName } from '../../utils/room'; +import { mxcUrlToHttp } from '../../utils/matrix'; import { useMatrixClient } from '../../hooks/useMatrixClient'; import { useMediaAuthentication } from '../../hooks/useMediaAuthentication'; import { StackedAvatar } from '../../components/stacked-avatar'; @@ -128,7 +128,7 @@ export function MemberGlance({ room, members, speakers, callEmbed, max = 6 }: Me {visibleMembers.map((callMember) => { const { userId } = callMember; if (!userId) return null; - const name = getMemberDisplayName(room, userId) ?? getMxIdLocalPart(userId) ?? userId; + const name = getMemberName(room, userId); const avatarMxc = getMemberAvatarMxc(room, userId); const avatarUrl = avatarMxc ? (mxcUrlToHttp(mx, avatarMxc, useAuthentication, 96, 96) ?? undefined) diff --git a/src/app/features/call-status/MemberSpeaking.tsx b/src/app/features/call-status/MemberSpeaking.tsx index c968f9114..ce7d9cbc4 100644 --- a/src/app/features/call-status/MemberSpeaking.tsx +++ b/src/app/features/call-status/MemberSpeaking.tsx @@ -1,17 +1,14 @@ import { Room } from 'matrix-js-sdk'; import React from 'react'; import { Box, Icon, Icons, Text } from 'folds'; -import { getMemberDisplayName } from '../../utils/room'; -import { getMxIdLocalPart } from '../../utils/matrix'; +import { getMemberName } from '../../utils/room'; type MemberSpeakingProps = { room: Room; speakers: Set; }; export function MemberSpeaking({ room, speakers }: MemberSpeakingProps) { - const speakingNames = Array.from(speakers).map( - (userId) => getMemberDisplayName(room, userId) ?? getMxIdLocalPart(userId) ?? userId, - ); + const speakingNames = Array.from(speakers).map((userId) => getMemberName(room, userId)); return ( diff --git a/src/app/features/call/CallMemberCard.tsx b/src/app/features/call/CallMemberCard.tsx index 793853d4a..d67cb8e19 100644 --- a/src/app/features/call/CallMemberCard.tsx +++ b/src/app/features/call/CallMemberCard.tsx @@ -5,9 +5,9 @@ import { useMatrixClient } from '../../hooks/useMatrixClient'; import { useMediaAuthentication } from '../../hooks/useMediaAuthentication'; import { useOpenUserRoomProfile } from '../../state/hooks/userRoomProfile'; import { SequenceCard } from '../../components/sequence-card'; -import { getMemberAvatarMxc, getMemberDisplayName } from '../../utils/room'; +import { getMemberAvatarMxc, getMemberName } from '../../utils/room'; import { useRoom } from '../../hooks/useRoom'; -import { getMxIdLocalPart, mxcUrlToHttp } from '../../utils/matrix'; +import { mxcUrlToHttp } from '../../utils/matrix'; import { UserAvatar } from '../../components/user-avatar'; import { AvatarDecoration } from '../../components/avatar-decoration/AvatarDecoration'; import { getMouseEventCords } from '../../utils/dom'; @@ -26,7 +26,7 @@ export function CallMemberCard({ member }: CallMemberCardProps) { const { userId } = member; if (!userId) return null; - const name = getMemberDisplayName(room, userId) ?? getMxIdLocalPart(userId) ?? userId; + const name = getMemberName(room, userId); const avatarMxc = getMemberAvatarMxc(room, userId); const avatarUrl = avatarMxc ? (mxcUrlToHttp(mx, avatarMxc, useAuthentication, 96, 96) ?? undefined) diff --git a/src/app/features/message-search/SearchResultGroup.tsx b/src/app/features/message-search/SearchResultGroup.tsx index 5b2378b46..ae9721549 100644 --- a/src/app/features/message-search/SearchResultGroup.tsx +++ b/src/app/features/message-search/SearchResultGroup.tsx @@ -12,7 +12,7 @@ import { makeMentionCustomProps, renderMatrixMention, } from '../../plugins/react-custom-html-parser'; -import { getMxIdLocalPart, mxcUrlToHttp } from '../../utils/matrix'; +import { mxcUrlToHttp } from '../../utils/matrix'; import { useMatrixEventRenderer } from '../../hooks/useMatrixEventRenderer'; import { GetContentCallback, MessageEvent, StateEvent } from '../../../types/matrix/room'; import { @@ -31,7 +31,7 @@ import { Image } from '../../components/media'; import { ImageViewer } from '../../components/image-viewer'; import * as customHtmlCss from '../../styles/CustomHtml.css'; import { RoomAvatar, RoomIcon } from '../../components/room-avatar'; -import { getMemberAvatarMxc, getMemberDisplayName, getRoomAvatarUrl } from '../../utils/room'; +import { getMemberAvatarMxc, getMemberName, getRoomAvatarUrl } from '../../utils/room'; import { ResultItem } from './useMessageSearch'; import { SequenceCard } from '../../components/sequence-card'; import { UserAvatar } from '../../components/user-avatar'; @@ -220,10 +220,7 @@ export function SearchResultGroup({ {items.map((item) => { const { event } = item; - const displayName = - getMemberDisplayName(room, event.sender) ?? - getMxIdLocalPart(event.sender) ?? - event.sender; + const displayName = getMemberName(room, event.sender); const senderAvatarMxc = getMemberAvatarMxc(room, event.sender); const relation = event.content['m.relates_to']; diff --git a/src/app/features/room-settings/RoomInsights.tsx b/src/app/features/room-settings/RoomInsights.tsx index f2303f7bc..c25c7c09f 100644 --- a/src/app/features/room-settings/RoomInsights.tsx +++ b/src/app/features/room-settings/RoomInsights.tsx @@ -6,8 +6,8 @@ import { SequenceCard } from '../../components/sequence-card'; import { useRoom } from '../../hooks/useRoom'; import { useMatrixClient } from '../../hooks/useMatrixClient'; import { useMediaAuthentication } from '../../hooks/useMediaAuthentication'; -import { getMemberAvatarMxc, getMemberDisplayName } from '../../utils/room'; -import { getMxIdLocalPart, mxcUrlToHttp } from '../../utils/matrix'; +import { getMemberAvatarMxc, getMemberName } from '../../utils/room'; +import { mxcUrlToHttp } from '../../utils/matrix'; import { UserAvatar } from '../../components/user-avatar'; // ── Helpers ─────────────────────────────────────────────────────────────────── @@ -297,8 +297,7 @@ export function RoomInsights({ requestClose }: RoomInsightsProps) { {stats.top5.map(([userId, count], index) => { - const displayName = - getMemberDisplayName(room, userId) ?? getMxIdLocalPart(userId) ?? userId; + const displayName = getMemberName(room, userId); const avatarMxc = getMemberAvatarMxc(room, userId); const avatarUrl = avatarMxc ? (mxcUrlToHttp(mx, avatarMxc, useAuthentication, 32, 32, 'crop') ?? diff --git a/src/app/features/room/MembersDrawer.tsx b/src/app/features/room/MembersDrawer.tsx index d7f2790ec..69e6beb33 100644 --- a/src/app/features/room/MembersDrawer.tsx +++ b/src/app/features/room/MembersDrawer.tsx @@ -42,7 +42,7 @@ import { } from '../../hooks/useAsyncSearch'; import { useDebounce } from '../../hooks/useDebounce'; import { TypingIndicator } from '../../components/typing-indicator'; -import { getMemberDisplayName, getMemberSearchStr } from '../../utils/room'; +import { getMemberName, getMemberSearchStr } from '../../utils/room'; import { getMxIdLocalPart } from '../../utils/matrix'; import { useSetSetting, useSetting } from '../../state/hooks/settings'; import { settingsAtom } from '../../state/settings'; @@ -134,8 +134,7 @@ function MemberItem({ typing, showEncryption, }: MemberItemProps) { - const name = - getMemberDisplayName(room, member.userId) ?? getMxIdLocalPart(member.userId) ?? member.userId; + const name = getMemberName(room, member.userId); const avatarMxcUrl = member.getMxcAvatarUrl(); const avatarUrl = avatarMxcUrl ? mx.mxcUrlToHttp(avatarMxcUrl, 100, 100, 'crop', undefined, false, useAuthentication) @@ -418,10 +417,7 @@ export function MembersDrawer({ room, members }: MembersDrawerProps) { Pending Requests {knockMembers.map((knockMember) => { - const knockName = - getMemberDisplayName(room, knockMember.userId) ?? - getMxIdLocalPart(knockMember.userId) ?? - knockMember.userId; + const knockName = getMemberName(room, knockMember.userId); const knockAvatarMxc = knockMember.getMxcAvatarUrl(); const knockAvatarUrl = knockAvatarMxc ? mx.mxcUrlToHttp( diff --git a/src/app/features/room/RoomInput.tsx b/src/app/features/room/RoomInput.tsx index dae5489bb..6460080fc 100644 --- a/src/app/features/room/RoomInput.tsx +++ b/src/app/features/room/RoomInput.tsx @@ -65,7 +65,6 @@ import { TUploadContent, encryptFile, getImageInfo, - getMxIdLocalPart, mxcUrlToHttp, tryDeleteMxcContent, } from '../../utils/matrix'; @@ -111,7 +110,7 @@ import { getImageMsgContent, getVideoMsgContent, } from './msgContent'; -import { getMemberDisplayName, getMentionContent, trimReplyFromBody } from '../../utils/room'; +import { getMemberName, getMentionContent, trimReplyFromBody } from '../../utils/room'; import { CommandAutocomplete } from './CommandAutocomplete'; import { Command, SHRUG, TABLEFLIP, UNFLIP, useCommands } from '../../hooks/useCommands'; import { mobileOrTablet } from '../../utils/user-agent'; @@ -993,11 +992,7 @@ export const RoomInput = forwardRef( userColor={replyUsernameColor} username={ - - {getMemberDisplayName(room, replyDraft.userId) ?? - getMxIdLocalPart(replyDraft.userId) ?? - replyDraft.userId} - + {getMemberName(room, replyDraft.userId)} } > diff --git a/src/app/features/room/RoomTimeline.tsx b/src/app/features/room/RoomTimeline.tsx index f21768cf2..fa78f9382 100644 --- a/src/app/features/room/RoomTimeline.tsx +++ b/src/app/features/room/RoomTimeline.tsx @@ -81,6 +81,7 @@ import { getEventReactions, getLatestEditableEvt, getMemberDisplayName, + getMemberName, getReactionContent, isMembershipChanged, reactionOrEditEvent, @@ -1007,7 +1008,7 @@ export function RoomTimeline({ room, eventId, roomInputRef, editor }: RoomTimeli console.warn('Button should have "data-user-id" attribute!'); return; } - const name = getMemberDisplayName(room, userId) ?? getMxIdLocalPart(userId) ?? userId; + const name = getMemberName(room, userId); editor.insertNode( createMentionElement( userId, @@ -1106,8 +1107,7 @@ export function RoomTimeline({ room, eventId, roomInputRef, editor }: RoomTimeli editedEvent?.getContent()['m.new_content'] ?? mEvent.getContent()) as GetContentCallback; const senderId = mEvent.getSender() ?? ''; - const senderDisplayName = - getMemberDisplayName(room, senderId) ?? getMxIdLocalPart(senderId) ?? senderId; + const senderDisplayName = getMemberName(room, senderId); return ( ( const latestEventReaders = useRoomEventReaders(room, latestEvent?.getId()); const names = latestEventReaders .filter((readerId) => readerId !== mx.getUserId()) - .map( - (readerId) => - getMemberDisplayName(room, readerId) ?? getMxIdLocalPart(readerId) ?? readerId, - ); + .map((readerId) => getMemberName(room, readerId)); const eventId = latestEvent?.getId(); diff --git a/src/app/features/room/message/Message.tsx b/src/app/features/room/message/Message.tsx index f3438d61f..fe729514f 100644 --- a/src/app/features/room/message/Message.tsx +++ b/src/app/features/room/message/Message.tsx @@ -53,9 +53,9 @@ import { canEditEvent, getEventEdits, getMemberAvatarMxc, - getMemberDisplayName, + getMemberName, } from '../../../utils/room'; -import { getMxIdLocalPart, mxcUrlToHttp } from '../../../utils/matrix'; +import { mxcUrlToHttp } from '../../../utils/matrix'; import { messageAriaLabel } from '../../../utils/a11y'; import { MessageLayout, MessageSpacing } from '../../../state/settings'; import { useMatrixClient } from '../../../hooks/useMatrixClient'; @@ -809,8 +809,7 @@ export const Message = React.memo( const [remindOpen, setRemindOpen] = useState(false); const { addBookmark, removeBookmark, isBookmarked } = useBookmarks(); - const senderDisplayName = - getMemberDisplayName(room, senderId) ?? getMxIdLocalPart(senderId) ?? senderId; + const senderDisplayName = getMemberName(room, senderId); const senderAvatarMxc = getMemberAvatarMxc(room, senderId); const tagColor = memberPowerTag?.color diff --git a/src/app/features/room/message/MessageEditor.tsx b/src/app/features/room/message/MessageEditor.tsx index 5c229e2fb..f1fee7ccd 100644 --- a/src/app/features/room/message/MessageEditor.tsx +++ b/src/app/features/room/message/MessageEditor.tsx @@ -53,11 +53,10 @@ import { AsyncStatus, useAsyncCallback } from '../../../hooks/useAsyncCallback'; import { useMatrixClient } from '../../../hooks/useMatrixClient'; import { getEditedEvent, - getMemberDisplayName, + getMemberName, getMentionContent, trimReplyFromFormattedBody, } from '../../../utils/room'; -import { getMxIdLocalPart } from '../../../utils/matrix'; import { mobileOrTablet } from '../../../utils/user-agent'; import { useComposingCheck } from '../../../hooks/useComposingCheck'; @@ -75,9 +74,7 @@ export const MessageEditor = as<'div', MessageEditorProps>( // Accessible name for the edit textbox so screen readers announce which // message is being edited (a11y, P3-4). const editSenderId = mEvent.getSender(); - const editSenderName = editSenderId - ? (getMemberDisplayName(room, editSenderId) ?? getMxIdLocalPart(editSenderId) ?? editSenderId) - : ''; + const editSenderName = editSenderId ? getMemberName(room, editSenderId) : ''; const [enterForNewline] = useSetting(settingsAtom, 'enterForNewline'); const [globalToolbar] = useSetting(settingsAtom, 'editorToolbar'); const [isMarkdown] = useSetting(settingsAtom, 'isMarkdown'); diff --git a/src/app/features/room/reaction-viewer/ReactionViewer.tsx b/src/app/features/room/reaction-viewer/ReactionViewer.tsx index 434599cf7..eee010893 100644 --- a/src/app/features/room/reaction-viewer/ReactionViewer.tsx +++ b/src/app/features/room/reaction-viewer/ReactionViewer.tsx @@ -16,7 +16,7 @@ import { } from 'folds'; import { MatrixEvent, Room, RoomMember } from 'matrix-js-sdk'; import { Relations } from 'matrix-js-sdk/lib/models/relations'; -import { getMemberDisplayName } from '../../../utils/room'; +import { getMemberName } from '../../../utils/room'; import { eventWithShortcode, getMxIdLocalPart } from '../../../utils/matrix'; import * as css from './ReactionViewer.css'; import { useMatrixClient } from '../../../hooks/useMatrixClient'; @@ -67,8 +67,7 @@ export const ReactionViewer = as<'div', ReactionViewerProps>( } }; - const getName = (member: RoomMember) => - getMemberDisplayName(room, member.userId) ?? getMxIdLocalPart(member.userId) ?? member.userId; + const getName = (member: RoomMember) => getMemberName(room, member.userId); const getReactionsForKey = (key: string): MatrixEvent[] => { const reactSet = reactions.find(([k]) => k === key)?.[1]; diff --git a/src/app/features/room/room-pin-menu/RoomPinMenu.tsx b/src/app/features/room/room-pin-menu/RoomPinMenu.tsx index d02db33f1..10e3a9d56 100644 --- a/src/app/features/room/room-pin-menu/RoomPinMenu.tsx +++ b/src/app/features/room/room-pin-menu/RoomPinMenu.tsx @@ -40,12 +40,12 @@ import { UsernameBold, } from '../../../components/message'; import { UserAvatar } from '../../../components/user-avatar'; -import { getMxIdLocalPart, mxcUrlToHttp } from '../../../utils/matrix'; +import { mxcUrlToHttp } from '../../../utils/matrix'; import { useMatrixClient } from '../../../hooks/useMatrixClient'; import { getEditedEvent, getMemberAvatarMxc, - getMemberDisplayName, + getMemberName, getStateEvent, } from '../../../utils/room'; import { GetContentCallback, MessageEvent, StateEvent } from '../../../../types/matrix/room'; @@ -175,7 +175,7 @@ function PinnedMessage({ ); const sender = pinnedEvent.getSender()!; - const displayName = getMemberDisplayName(room, sender) ?? getMxIdLocalPart(sender) ?? sender; + const displayName = getMemberName(room, sender); const senderAvatarMxc = getMemberAvatarMxc(room, sender); const getContent = (() => pinnedEvent.getContent()) as GetContentCallback; diff --git a/src/app/features/room/thread/ThreadTimeline.tsx b/src/app/features/room/thread/ThreadTimeline.tsx index 5abf02ce8..48c2a5423 100644 --- a/src/app/features/room/thread/ThreadTimeline.tsx +++ b/src/app/features/room/thread/ThreadTimeline.tsx @@ -32,7 +32,7 @@ import { useAtomValue, useSetAtom } from 'jotai'; import { Badge, Box, Chip, Icon, Icons, Line, Scroll, Spinner, Text, color, config } from 'folds'; import classNames from 'classnames'; import { Opts as LinkifyOpts } from 'linkifyjs'; -import { eventWithShortcode, factoryEventSentBy, getMxIdLocalPart } from '../../../utils/matrix'; +import { eventWithShortcode, factoryEventSentBy } from '../../../utils/matrix'; import { useMatrixClient } from '../../../hooks/useMatrixClient'; import { useVirtualPaginator, ItemRange } from '../../../hooks/useVirtualPaginator'; import { useAlive } from '../../../hooks/useAlive'; @@ -58,7 +58,7 @@ import { decryptAllTimelineEvent, getEditedEvent, getEventReactions, - getMemberDisplayName, + getMemberName, getReactionContent, reactionOrEditEvent, } from '../../../utils/room'; @@ -503,7 +503,7 @@ export function ThreadTimeline({ room, thread, editor }: ThreadTimelineProps) { evt.preventDefault(); const userId = evt.currentTarget.getAttribute('data-user-id'); if (!userId) return; - const name = getMemberDisplayName(room, userId) ?? getMxIdLocalPart(userId) ?? userId; + const name = getMemberName(room, userId); editor.insertNode( createMentionElement( userId, @@ -651,8 +651,7 @@ export function ThreadTimeline({ room, thread, editor }: ThreadTimelineProps) { const getContent = (() => editedEvent?.getContent()['m.new_content'] ?? mEvent.getContent()) as GetContentCallback; const senderId = mEvent.getSender() ?? ''; - const senderDisplayName = - getMemberDisplayName(room, senderId) ?? getMxIdLocalPart(senderId) ?? senderId; + const senderDisplayName = getMemberName(room, senderId); return ( { const { event } = notification; - const displayName = - getMemberDisplayName(room, event.sender) ?? - getMxIdLocalPart(event.sender) ?? - event.sender; + const displayName = getMemberName(room, event.sender); const senderAvatarMxc = getMemberAvatarMxc(room, event.sender); const getContent = (() => event.content) as GetContentCallback; diff --git a/src/app/utils/room.ts b/src/app/utils/room.ts index fc03b78b5..ba86922de 100644 --- a/src/app/utils/room.ts +++ b/src/app/utils/room.ts @@ -30,6 +30,7 @@ import { UnreadInfo, } from '../../types/matrix/room'; import { getMutedThreads, ThreadNotificationsContent } from './threadNotifications'; +import { getMxIdLocalPart } from './matrix'; export const getStateEvent = ( room: Room, @@ -405,6 +406,9 @@ export const getMemberDisplayName = (room: Room, userId: string): string | undef return name; }; +export const getMemberName = (room: Room, userId: string): string => + getMemberDisplayName(room, userId) ?? getMxIdLocalPart(userId) ?? userId; + export const getMemberSearchStr = ( member: RoomMember, query: string,