Skip to content

Commit c87e29e

Browse files
committed
Make the existing option the default and remove it
1 parent b477a56 commit c87e29e

3 files changed

Lines changed: 114 additions & 3 deletions

File tree

apps/web/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.tsx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,10 +153,7 @@ export default class PreferencesUserSettingsTab extends React.Component<IProps,
153153
"showTypingNotifications",
154154
"showRedactions",
155155
"showReadReceipts",
156-
"showJoinLeaves",
157-
"showDisplaynameChanges",
158156
"showChatEffects",
159-
"showAvatarChanges",
160157
"Pill.shouldShowPillAvatar",
161158
"TextualBody.enableBigEmoji",
162159
"scrollToBottomOnMessageSent",

apps/web/src/shouldHideEvent.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,12 @@ function isPublicRoom(ev: MatrixEvent, client?: MatrixClient): boolean {
5757
return room?.getJoinRule() === JoinRule.Public;
5858
}
5959

60+
function isInviteRoom(ev: MatrixEvent, client?: MatrixClient): boolean {
61+
const mxClient = client ?? MatrixClientPeg.get();
62+
const room = mxClient?.getRoom(ev.getRoomId());
63+
return room?.getJoinRule() === JoinRule.Invite;
64+
}
65+
6066
/**
6167
* Determines whether the given event should be hidden from timelines.
6268
* @param ev The event
@@ -90,6 +96,16 @@ export default function shouldHideEvent(ev: MatrixEvent, ctx?: IRoomState, clien
9096
if (eventDiff.isMemberEvent) {
9197
if (isPublicRoom(ev, client)) return true;
9298

99+
if (isInviteRoom(ev, client)) {
100+
const content = ev.getContent();
101+
const isMembershipChanged = content.membership !== ev.getPrevContent().membership;
102+
const isJoin = isMembershipChanged && content.membership === KnownMembership.Join;
103+
const isLeave = isMembershipChanged && content.membership === KnownMembership.Leave;
104+
if (isJoin || isLeave) return true;
105+
if (eventDiff.isAvatarChange) return true;
106+
if (eventDiff.isDisplaynameChange) return true;
107+
}
108+
93109
if ((eventDiff.isJoin || eventDiff.isPart) && !isEnabled("showJoinLeaves")) return true;
94110
if (eventDiff.isAvatarChange && !isEnabled("showAvatarChanges")) return true;
95111
if (eventDiff.isDisplaynameChange && !isEnabled("showDisplaynameChanges")) return true;

apps/web/test/unit-tests/shouldHideEvent-test.ts

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,29 @@ describe("shouldHideEvent", () => {
1515
let client: MatrixClient;
1616
let publicRoom: Room;
1717
let privateRoom: Room;
18+
let inviteRoom: Room;
1819

1920
beforeEach(() => {
2021
client = {
2122
getRoom: jest.fn().mockImplementation((roomId: string) => {
2223
if (roomId === "!public:server") return publicRoom;
2324
if (roomId === "!private:server") return privateRoom;
25+
if (roomId === "!invite:server") return inviteRoom;
2426
return null;
2527
}),
2628
} as unknown as MatrixClient;
2729

2830
publicRoom = new SDKRoom("!public:server", client, "@user:server");
2931
privateRoom = new SDKRoom("!private:server", client, "@user:server");
32+
inviteRoom = new SDKRoom("!invite:server", client, "@user:server");
3033

3134
(publicRoom as unknown as { getJoinRule: jest.Mock }).getJoinRule = jest.fn().mockReturnValue(JoinRule.Public);
3235
(privateRoom as unknown as { getJoinRule: jest.Mock }).getJoinRule = jest
3336
.fn()
3437
.mockReturnValue(JoinRule.Private);
38+
(inviteRoom as unknown as { getJoinRule: jest.Mock }).getJoinRule = jest
39+
.fn()
40+
.mockReturnValue(JoinRule.Invite);
3541
});
3642

3743
function makeMemberEvent(
@@ -105,5 +111,97 @@ describe("shouldHideEvent", () => {
105111
const event = makeTopicEvent("!private:server");
106112
expect(shouldHideEvent(event, undefined, client)).toBe(false);
107113
});
114+
115+
it("should show display name changes in private rooms", () => {
116+
const event = mkEvent({
117+
type: EventType.RoomMember,
118+
room: "!private:server",
119+
user: "@user:server",
120+
content: {
121+
membership: KnownMembership.Join,
122+
displayname: "New Name",
123+
avatar_url: "mxc://avatar",
124+
},
125+
prev_content: {
126+
membership: KnownMembership.Join,
127+
displayname: "Old Name",
128+
avatar_url: "mxc://avatar",
129+
},
130+
event: true,
131+
});
132+
expect(shouldHideEvent(event, undefined, client)).toBe(false);
133+
});
134+
135+
it("should show avatar changes in private rooms", () => {
136+
const event = mkEvent({
137+
type: EventType.RoomMember,
138+
room: "!private:server",
139+
user: "@user:server",
140+
content: {
141+
membership: KnownMembership.Join,
142+
displayname: "User",
143+
avatar_url: "mxc://new_avatar",
144+
},
145+
prev_content: {
146+
membership: KnownMembership.Join,
147+
displayname: "User",
148+
avatar_url: "mxc://old_avatar",
149+
},
150+
event: true,
151+
});
152+
expect(shouldHideEvent(event, undefined, client)).toBe(false);
153+
});
154+
});
155+
156+
describe("invite room events", () => {
157+
it("should hide member join events in invite-only rooms", () => {
158+
const event = makeMemberEvent("!invite:server", KnownMembership.Join, KnownMembership.Invite);
159+
expect(shouldHideEvent(event, undefined, client)).toBe(true);
160+
});
161+
162+
it("should hide member leave events in invite-only rooms", () => {
163+
const event = makeMemberEvent("!invite:server", KnownMembership.Leave, KnownMembership.Join);
164+
expect(shouldHideEvent(event, undefined, client)).toBe(true);
165+
});
166+
167+
it("should hide display name changes in invite-only rooms", () => {
168+
const event = mkEvent({
169+
type: EventType.RoomMember,
170+
room: "!invite:server",
171+
user: "@user:server",
172+
content: {
173+
membership: KnownMembership.Join,
174+
displayname: "New Name",
175+
avatar_url: "mxc://avatar",
176+
},
177+
prev_content: {
178+
membership: KnownMembership.Join,
179+
displayname: "Old Name",
180+
avatar_url: "mxc://avatar",
181+
},
182+
event: true,
183+
});
184+
expect(shouldHideEvent(event, undefined, client)).toBe(true);
185+
});
186+
187+
it("should hide avatar changes in invite-only rooms", () => {
188+
const event = mkEvent({
189+
type: EventType.RoomMember,
190+
room: "!invite:server",
191+
user: "@user:server",
192+
content: {
193+
membership: KnownMembership.Join,
194+
displayname: "User",
195+
avatar_url: "mxc://new_avatar",
196+
},
197+
prev_content: {
198+
membership: KnownMembership.Join,
199+
displayname: "User",
200+
avatar_url: "mxc://old_avatar",
201+
},
202+
event: true,
203+
});
204+
expect(shouldHideEvent(event, undefined, client)).toBe(true);
205+
});
108206
});
109207
});

0 commit comments

Comments
 (0)