diff --git a/src/components/structures/RoomView.tsx b/src/components/structures/RoomView.tsx index cb3256dc65a..e32f9f6f932 100644 --- a/src/components/structures/RoomView.tsx +++ b/src/components/structures/RoomView.tsx @@ -252,6 +252,7 @@ export interface IRoomState { showJoinLeaves: boolean; showAvatarChanges: boolean; showDisplaynameChanges: boolean; + showServerAclChanges: boolean; matrixClientIsReady: boolean; showUrlPreview?: boolean; e2eStatus?: E2EStatus; @@ -461,6 +462,7 @@ export class RoomView extends React.Component { showJoinLeaves: true, showAvatarChanges: true, showDisplaynameChanges: true, + showServerAclChanges: true, matrixClientIsReady: context.client?.isInitialSyncComplete(), mainSplitContentType: MainSplitContentType.Timeline, timelineRenderingType: TimelineRenderingType.Room, @@ -616,6 +618,7 @@ export class RoomView extends React.Component { showJoinLeaves: SettingsStore.getValue("showJoinLeaves", roomId), showAvatarChanges: SettingsStore.getValue("showAvatarChanges", roomId), showDisplaynameChanges: SettingsStore.getValue("showDisplaynameChanges", roomId), + showServerAclChanges: SettingsStore.getValue("showServerAclChanges", roomId), wasContextSwitch: wasContextSwitch, mainSplitContentType: room ? this.getMainSplitContentType(room) : undefined, initialEventId: undefined, // default to clearing this, will get set later in the method if needed @@ -690,6 +693,9 @@ export class RoomView extends React.Component { SettingsStore.watchSetting("showDisplaynameChanges", roomId, (...[, , , value]) => this.setState({ showDisplaynameChanges: value as boolean }), ), + SettingsStore.watchSetting("showServerAclChanges", roomId, (...[, , , value]) => + this.setState({ showServerAclChanges: value as boolean }), + ), ]); if (!initial && this.state.shouldPeek && !newState.shouldPeek) { diff --git a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.tsx b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.tsx index d373aee60e5..24907e4d6e6 100644 --- a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.tsx @@ -157,6 +157,7 @@ export default class PreferencesUserSettingsTab extends React.Component({ showJoinLeaves: true, showAvatarChanges: true, showDisplaynameChanges: true, + showServerAclChanges: true, matrixClientIsReady: false, showUrlPreview: false, timelineRenderingType: TimelineRenderingType.Room, diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index f1f4f4dc7ca..ed930ca626b 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -3068,6 +3068,7 @@ "show_chat_effects": "Show chat effects (animations when receiving e.g. confetti)", "show_displayname_changes": "Show display name changes", "show_join_leave": "Show join/leave messages (invites/removes/bans unaffected)", + "show_server_acl_changes": "Show server ACL changes", "show_message_previews": "Show message previews", "show_nsfw_content": "Show NSFW content", "show_read_receipts": "Show read receipts sent by other users", diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx index 2b2a57c2c58..834b59eaf84 100644 --- a/src/settings/Settings.tsx +++ b/src/settings/Settings.tsx @@ -252,6 +252,7 @@ export interface Settings { "showJoinLeaves": IBaseSetting; "showAvatarChanges": IBaseSetting; "showDisplaynameChanges": IBaseSetting; + "showServerAclChanges": IBaseSetting; "showReadReceipts": IBaseSetting; "showTwelveHourTimestamps": IBaseSetting; "alwaysShowTimestamps": IBaseSetting; @@ -810,6 +811,11 @@ export const SETTINGS: Settings = { default: true, invertedSettingName: "hideDisplaynameChanges", }, + "showServerAclChanges": { + supportedLevels: LEVELS_ROOM_SETTINGS_WITH_ROOM, + displayName: _td("settings|show_server_acl_changes"), + default: true, + }, "showReadReceipts": { supportedLevels: LEVELS_ROOM_SETTINGS, displayName: _td("settings|show_read_receipts"), diff --git a/src/shouldHideEvent.ts b/src/shouldHideEvent.ts index f8bc2fc5179..7cd0dfbbe55 100644 --- a/src/shouldHideEvent.ts +++ b/src/shouldHideEvent.ts @@ -56,6 +56,7 @@ export default function shouldHideEvent(ev: MatrixEvent, ctx?: IRoomState): bool ? (name: keyof IRoomState) => ctx[name] : (name: SettingKey) => SettingsStore.getValue(name, ev.getRoomId()); + if (ev.getType() === EventType.RoomServerAcl && !isEnabled("showServerAclChanges")) return true; // Hide redacted events // Deleted events with a thread are always shown regardless of user preference // to make sure that a thread can be accessible even if the root message is deleted diff --git a/test/test-utils/room.ts b/test/test-utils/room.ts index ecce6818b04..73c87b2faa4 100644 --- a/test/test-utils/room.ts +++ b/test/test-utils/room.ts @@ -75,6 +75,7 @@ export function getRoomContext(room: Room, override: Partial): showJoinLeaves: true, showAvatarChanges: true, showDisplaynameChanges: true, + showServerAclChanges: true, matrixClientIsReady: false, timelineRenderingType: TimelineRenderingType.Room, mainSplitContentType: MainSplitContentType.Timeline, diff --git a/test/unit-tests/components/structures/MessagePanel-test.tsx b/test/unit-tests/components/structures/MessagePanel-test.tsx index 71234bea3b0..2d358b09533 100644 --- a/test/unit-tests/components/structures/MessagePanel-test.tsx +++ b/test/unit-tests/components/structures/MessagePanel-test.tsx @@ -90,6 +90,7 @@ describe("MessagePanel", function () { showJoinLeaves: false, showAvatarChanges: false, showDisplaynameChanges: true, + showServerAclChanges: true, showHiddenEvents: false, } as unknown as RoomContextType; diff --git a/test/unit-tests/components/views/rooms/SendMessageComposer-test.tsx b/test/unit-tests/components/views/rooms/SendMessageComposer-test.tsx index fcc215a73fb..40fc7139e28 100644 --- a/test/unit-tests/components/views/rooms/SendMessageComposer-test.tsx +++ b/test/unit-tests/components/views/rooms/SendMessageComposer-test.tsx @@ -67,6 +67,7 @@ describe("", () => { showJoinLeaves: true, showAvatarChanges: true, showDisplaynameChanges: true, + showServerAclChanges: true, matrixClientIsReady: false, timelineRenderingType: TimelineRenderingType.Room, mainSplitContentType: MainSplitContentType.Timeline, diff --git a/test/unit-tests/components/views/settings/tabs/user/__snapshots__/PreferencesUserSettingsTab-test.tsx.snap b/test/unit-tests/components/views/settings/tabs/user/__snapshots__/PreferencesUserSettingsTab-test.tsx.snap index 65b8049fc13..664363805fd 100644 --- a/test/unit-tests/components/views/settings/tabs/user/__snapshots__/PreferencesUserSettingsTab-test.tsx.snap +++ b/test/unit-tests/components/views/settings/tabs/user/__snapshots__/PreferencesUserSettingsTab-test.tsx.snap @@ -989,13 +989,13 @@ exports[`PreferencesUserSettingsTab should render 1`] = ` - Show chat effects (animations when receiving e.g. confetti) + Show server ACL changes
- Show profile picture changes + Show chat effects (animations when receiving e.g. confetti)
- Show avatars in user, room and event mentions + Show profile picture changes
- Enable big emoji in chat + Show avatars in user, room and event mentions
- Jump to the bottom of the timeline when you send a message + Enable big emoji in chat
+ + Jump to the bottom of the timeline when you send a message + + +
+
+
+
+
+