From c47ce59478177f9f9464683583e9fb8d759b7e75 Mon Sep 17 00:00:00 2001 From: Will Hunt Date: Fri, 14 Feb 2025 10:58:20 +0000 Subject: [PATCH] Render reason for invite rejection. (#29257) * Render reason for invite rejection. * Add test * extra test --- src/TextForEvent.tsx | 5 +++- src/i18n/strings/en_EN.json | 1 + test/unit-tests/TextForEvent-test.ts | 43 ++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/TextForEvent.tsx b/src/TextForEvent.tsx index d319114c8e..b63e5b2a00 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 b2903fce85..d88d29008e 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 7fc1a61b0a..a505d6510f 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()", () => {