@@ -121,13 +121,17 @@ export const getE2EStatus = (cli: MatrixClient, userId: string, devices: IDevice
121
121
return anyDeviceUnverified ? E2EStatus . Warning : E2EStatus . Verified ;
122
122
} ;
123
123
124
- async function openDMForUser ( matrixClient : MatrixClient , user : RoomMember ) : Promise < void > {
125
- const startDMUser = new DirectoryMember ( {
124
+ /**
125
+ * Converts the member to a DirectoryMember and starts a DM with them.
126
+ */
127
+ async function openDmForUser ( matrixClient : MatrixClient , user : Member ) : Promise < void > {
128
+ const avatarUrl = user instanceof User ? user . avatarUrl : user . getMxcAvatarUrl ( ) ;
129
+ const startDmUser = new DirectoryMember ( {
126
130
user_id : user . userId ,
127
131
display_name : user . rawDisplayName ,
128
- avatar_url : user . getMxcAvatarUrl ( ) ,
132
+ avatar_url : avatarUrl ,
129
133
} ) ;
130
- startDmOnFirstMessage ( matrixClient , [ startDMUser ] ) ;
134
+ startDmOnFirstMessage ( matrixClient , [ startDmUser ] ) ;
131
135
}
132
136
133
137
type SetUpdating = ( updating : boolean ) => void ;
@@ -310,7 +314,7 @@ function DevicesSection({
310
314
) ;
311
315
}
312
316
313
- const MessageButton = ( { member } : { member : RoomMember } ) : JSX . Element => {
317
+ const MessageButton = ( { member } : { member : Member } ) : JSX . Element => {
314
318
const cli = useContext ( MatrixClientContext ) ;
315
319
const [ busy , setBusy ] = useState ( false ) ;
316
320
@@ -320,7 +324,7 @@ const MessageButton = ({ member }: { member: RoomMember }): JSX.Element => {
320
324
onClick = { async ( ) => {
321
325
if ( busy ) return ;
322
326
setBusy ( true ) ;
323
- await openDMForUser ( cli , member ) ;
327
+ await openDmForUser ( cli , member ) ;
324
328
setBusy ( false ) ;
325
329
} }
326
330
className = "mx_UserInfo_field"
@@ -332,7 +336,7 @@ const MessageButton = ({ member }: { member: RoomMember }): JSX.Element => {
332
336
} ;
333
337
334
338
export const UserOptionsSection : React . FC < {
335
- member : RoomMember ;
339
+ member : Member ;
336
340
isIgnored : boolean ;
337
341
canInvite : boolean ;
338
342
isSpace ?: boolean ;
@@ -360,8 +364,9 @@ export const UserOptionsSection: React.FC<{
360
364
} , [ cli , member ] ) ;
361
365
362
366
const ignore = useCallback ( async ( ) => {
367
+ const name = ( member instanceof User ? member . displayName : member . name ) || member . userId ;
363
368
const { finished } = Modal . createDialog ( QuestionDialog , {
364
- title : _t ( "Ignore %(user)s" , { user : member . name } ) ,
369
+ title : _t ( "Ignore %(user)s" , { user : name } ) ,
365
370
description : (
366
371
< div >
367
372
{ _t (
@@ -394,7 +399,7 @@ export const UserOptionsSection: React.FC<{
394
399
</ AccessibleButton >
395
400
) ;
396
401
397
- if ( member . roomId && ! isSpace ) {
402
+ if ( member instanceof RoomMember && member . roomId && ! isSpace ) {
398
403
const onReadReceiptButton = function ( ) : void {
399
404
const room = cli . getRoom ( member . roomId ) ;
400
405
dis . dispatch < ViewRoomPayload > ( {
@@ -415,7 +420,7 @@ export const UserOptionsSection: React.FC<{
415
420
} ) ;
416
421
} ;
417
422
418
- const room = cli . getRoom ( member . roomId ) ;
423
+ const room = member instanceof RoomMember ? cli . getRoom ( member . roomId ) : undefined ;
419
424
if ( room ?. getEventReadUpTo ( member . userId ) ) {
420
425
readReceiptButton = (
421
426
< AccessibleButton kind = "link" onClick = { onReadReceiptButton } className = "mx_UserInfo_field" >
@@ -431,7 +436,12 @@ export const UserOptionsSection: React.FC<{
431
436
) ;
432
437
}
433
438
434
- if ( canInvite && ( member ?. membership ?? "leave" ) === "leave" && shouldShowComponent ( UIComponent . InviteUsers ) ) {
439
+ if (
440
+ member instanceof RoomMember &&
441
+ canInvite &&
442
+ ( member ?. membership ?? "leave" ) === "leave" &&
443
+ shouldShowComponent ( UIComponent . InviteUsers )
444
+ ) {
435
445
const roomId = member && member . roomId ? member . roomId : SdkContextClass . instance . roomViewStore . getRoomId ( ) ;
436
446
const onInviteUserButton = async ( ev : ButtonEvent ) : Promise < void > => {
437
447
try {
0 commit comments