diff --git a/src/TextForEvent.tsx b/src/TextForEvent.tsx index d319114c8e1..b63e5b2a00e 100644 --- a/src/TextForEvent.tsx +++ b/src/TextForEvent.tsx @@ -191,7 +191,10 @@ function textForMemberEvent( case KnownMembership.Leave: if (ev.getSender() === ev.getStateKey()) { if (prevContent.membership === KnownMembership.Invite) { - return () => _t("timeline|m.room.member|reject_invite", { targetName }); + return () => + reason + ? _t("timeline|m.room.member|reject_invite_reason", { targetName, reason }) + : _t("timeline|m.room.member|reject_invite", { targetName }); } else { return () => reason diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index b2903fce859..d88d29008e4 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -3458,6 +3458,7 @@ "left_reason": "%(targetName)s left the room: %(reason)s", "no_change": "%(senderName)s made no change", "reject_invite": "%(targetName)s rejected the invitation", + "reject_invite_reason": "%(targetName)s rejected the invitation: %(reason)s", "remove_avatar": "%(senderName)s removed their profile picture", "remove_name": "%(senderName)s removed their display name (%(oldDisplayName)s)", "set_avatar": "%(senderName)s set a profile picture", diff --git a/test/unit-tests/TextForEvent-test.ts b/test/unit-tests/TextForEvent-test.ts index 7fc1a61b0a6..a505d6510f2 100644 --- a/test/unit-tests/TextForEvent-test.ts +++ b/test/unit-tests/TextForEvent-test.ts @@ -519,6 +519,49 @@ describe("TextForEvent", () => { ), ).toMatchInlineSnapshot(`"Andy changed their display name and profile picture"`); }); + + it("should handle rejected invites", () => { + expect( + textForEvent( + new MatrixEvent({ + type: "m.room.member", + sender: "@a:foo", + content: { + membership: KnownMembership.Leave, + }, + unsigned: { + prev_content: { + membership: KnownMembership.Invite, + }, + }, + state_key: "@a:foo", + }), + mockClient, + ), + ).toMatchInlineSnapshot(`"Member rejected the invitation"`); + }); + + it("should handle rejected invites with a reason", () => { + expect( + textForEvent( + new MatrixEvent({ + type: "m.room.member", + sender: "@a:foo", + content: { + membership: KnownMembership.Leave, + reason: "I don't want to be in this room.", + }, + unsigned: { + prev_content: { + membership: KnownMembership.Invite, + }, + }, + state_key: "@a:foo", + }), + mockClient, + ), + ).toMatchInlineSnapshot(`"Member rejected the invitation: I don't want to be in this room."`); + }); }); describe("textForJoinRulesEvent()", () => {