diff --git a/src/app/hooks/useMemberEventParser.tsx b/src/app/hooks/useMemberEventParser.tsx index 6ceca1b1..8a59aaad 100644 --- a/src/app/hooks/useMemberEventParser.tsx +++ b/src/app/hooks/useMemberEventParser.tsx @@ -18,6 +18,7 @@ export const useMemberEventParser = (): MemberEventParser => { const prevContent = mEvent.getPrevContent() as IMemberContent; const senderId = mEvent.getSender(); const userId = mEvent.getStateKey(); + const reason = typeof content.reason === 'string' ? content.reason : undefined; if (!senderId || !userId) return { @@ -26,7 +27,10 @@ export const useMemberEventParser = (): MemberEventParser => { }; const senderName = getMxIdLocalPart(senderId); - const userName = content.displayname || getMxIdLocalPart(userId); + const userName = + typeof content.displayname === 'string' + ? content.displayname || getMxIdLocalPart(userId) + : getMxIdLocalPart(userId); if (isMembershipChanged(mEvent)) { if (content.membership === Membership.Invite) { @@ -39,7 +43,7 @@ export const useMemberEventParser = (): MemberEventParser => { {' accepted '} {userName} {`'s join request `} - {content.reason} + {reason} ), }; @@ -51,7 +55,7 @@ export const useMemberEventParser = (): MemberEventParser => { <> {senderName} {' invited '} - {userName} {content.reason} + {userName} {reason} ), }; @@ -64,7 +68,7 @@ export const useMemberEventParser = (): MemberEventParser => { <> {userName} {' request to join room '} - {content.reason} + {reason} ), }; @@ -91,7 +95,7 @@ export const useMemberEventParser = (): MemberEventParser => { <> {userName} {' rejected the invitation '} - {content.reason} + {reason} ) : ( <> @@ -99,7 +103,7 @@ export const useMemberEventParser = (): MemberEventParser => { {' rejected '} {userName} {`'s join request `} - {content.reason} + {reason} ), }; @@ -113,7 +117,7 @@ export const useMemberEventParser = (): MemberEventParser => { <> {userName} {' revoked joined request '} - {content.reason} + {reason} ) : ( <> @@ -121,7 +125,7 @@ export const useMemberEventParser = (): MemberEventParser => { {' revoked '} {userName} {`'s invite `} - {content.reason} + {reason} ), }; @@ -134,7 +138,7 @@ export const useMemberEventParser = (): MemberEventParser => { <> {senderName} {' unbanned '} - {userName} {content.reason} + {userName} {reason} ), }; @@ -147,13 +151,13 @@ export const useMemberEventParser = (): MemberEventParser => { <> {userName} {' left the room '} - {content.reason} + {reason} ) : ( <> {senderName} {' kicked '} - {userName} {content.reason} + {userName} {reason} ), }; @@ -166,7 +170,7 @@ export const useMemberEventParser = (): MemberEventParser => { <> {senderName} {' banned '} - {userName} {content.reason} + {userName} {reason} ), }; @@ -174,44 +178,49 @@ export const useMemberEventParser = (): MemberEventParser => { } if (content.displayname !== prevContent.displayname) { - const prevUserName = prevContent.displayname || userId; + const prevUserName = + typeof prevContent.displayname === 'string' + ? prevContent.displayname || getMxIdLocalPart(userId) + : getMxIdLocalPart(userId); return { icon: Icons.Mention, - body: content.displayname ? ( - <> - {prevUserName} - {' changed display name to '} - {userName} - - ) : ( - <> - {prevUserName} - {' removed their display name '} - - ), + body: + typeof content.displayname === 'string' ? ( + <> + {prevUserName} + {' changed display name to '} + {userName} + + ) : ( + <> + {prevUserName} + {' removed their display name '} + + ), }; } if (content.avatar_url !== prevContent.avatar_url) { return { icon: Icons.User, - body: content.displayname ? ( - <> - {userName} - {' changed their avatar'} - - ) : ( - <> - {userName} - {' removed their avatar '} - - ), + body: + content.avatar_url && typeof content.avatar_url === 'string' ? ( + <> + {userName} + {' changed their avatar'} + + ) : ( + <> + {userName} + {' removed their avatar '} + + ), }; } return { icon: Icons.User, - body: 'Broken membership event', + body: 'Membership event with no changes', }; };