Skip to content

Commit 9165fc3

Browse files
floriandurosDileep Bandla
authored andcommitted
New room list: move message preview in user settings (element-hq#30023)
* feat: move message preview settings to user settings * test: update tests * test(e2e): update preference screenshots * test(e2e): update room list tests * fix: display message preview settings only for new room list * test(e2e): display all preference settings in screenshot * test: update snapshot
1 parent ba2ec10 commit 9165fc3

File tree

11 files changed

+20
-114
lines changed

11 files changed

+20
-114
lines changed

playwright/e2e/left-panel/room-list-panel/room-list.spec.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -333,10 +333,11 @@ test.describe("Room list", () => {
333333
});
334334

335335
test("should render a message preview", { tag: "@screenshot" }, async ({ page, app, user, bot }) => {
336-
const roomListView = getRoomList(page);
336+
await app.settings.openUserSettings("Preferences");
337+
await page.getByRole("switch", { name: "Show message previews" }).click();
338+
await app.closeDialog();
337339

338-
await page.getByRole("button", { name: "Room Options" }).click();
339-
await page.getByRole("menuitemcheckbox", { name: "Show message previews" }).click();
340+
const roomListView = getRoomList(page);
340341

341342
const roomId = await app.client.createRoom({ name: "activity" });
342343

playwright/e2e/settings/preferences-user-settings-tab.spec.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,12 @@ test.describe("Preferences user settings tab", () => {
2121
const locator = await app.settings.openUserSettings("Preferences");
2222
await use(locator);
2323
},
24+
// display message preview settings
25+
labsFlags: ["feature_new_room_list"],
2426
});
2527

2628
test("should be rendered properly", { tag: "@screenshot" }, async ({ app, page, user }) => {
27-
await page.setViewportSize({ width: 1024, height: 3300 });
29+
await page.setViewportSize({ width: 1024, height: 4000 });
2830
const tab = await app.settings.openUserSettings("Preferences");
2931
// Assert that the top heading is rendered
3032
await expect(tab.getByRole("heading", { name: "Preferences" })).toBeVisible();
Loading

src/components/viewmodels/roomlist/RoomListHeaderViewModel.tsx

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ import { useMatrixClientContext } from "../../../contexts/MatrixClientContext";
3232
import type { ViewRoomPayload } from "../../../dispatcher/payloads/ViewRoomPayload";
3333
import { createRoom, hasCreateRoomRights } from "./utils";
3434
import { type SortOption, useSorter } from "./useSorter";
35-
import { useMessagePreviewToggle } from "./useMessagePreviewToggle";
3635

3736
/**
3837
* Hook to get the active space and its title.
@@ -127,14 +126,6 @@ export interface RoomListHeaderViewState {
127126
* The currently active sort option.
128127
*/
129128
activeSortOption: SortOption;
130-
/**
131-
* Whether message previews must be shown or not.
132-
*/
133-
shouldShowMessagePreview: boolean;
134-
/**
135-
* A function to turn on/off message previews.
136-
*/
137-
toggleMessagePreview: () => void;
138129
}
139130

140131
/**
@@ -157,7 +148,6 @@ export function useRoomListHeaderViewModel(): RoomListHeaderViewState {
157148
/* Actions */
158149

159150
const { activeSortOption, sort } = useSorter();
160-
const { shouldShowMessagePreview, toggleMessagePreview } = useMessagePreviewToggle();
161151

162152
const createChatRoom = useCallback((e: Event) => {
163153
defaultDispatcher.fire(Action.CreateChat);
@@ -230,7 +220,5 @@ export function useRoomListHeaderViewModel(): RoomListHeaderViewState {
230220
openSpaceSettings,
231221
activeSortOption,
232222
sort,
233-
shouldShowMessagePreview,
234-
toggleMessagePreview,
235223
};
236224
}

src/components/views/rooms/RoomListPanel/RoomListOptionsMenu.tsx

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* Please see LICENSE files in the repository root for full details.
66
*/
77

8-
import { IconButton, Menu, MenuTitle, CheckboxMenuItem, Tooltip, RadioMenuItem } from "@vector-im/compound-web";
8+
import { IconButton, Menu, MenuTitle, Tooltip, RadioMenuItem } from "@vector-im/compound-web";
99
import React, { type Ref, type JSX, useState, useCallback } from "react";
1010
import OverflowHorizontalIcon from "@vector-im/compound-design-tokens/assets/web/icons/overflow-horizontal";
1111

@@ -63,12 +63,6 @@ export function RoomListOptionsMenu({ vm }: Props): JSX.Element {
6363
checked={vm.activeSortOption === SortOption.AToZ}
6464
onSelect={onAtoZSelected}
6565
/>
66-
<MenuTitle title={_t("room_list|appearance")} />
67-
<CheckboxMenuItem
68-
label={_t("room_list|show_message_previews")}
69-
onSelect={vm.toggleMessagePreview}
70-
checked={vm.shouldShowMessagePreview}
71-
/>
7266
</Menu>
7367
);
7468
}

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

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -242,12 +242,12 @@ export default class PreferencesUserSettingsTab extends React.Component<IProps,
242242
};
243243

244244
public render(): React.ReactNode {
245-
const roomListSettings = PreferencesUserSettingsTab.ROOM_LIST_SETTINGS;
246-
247245
const browserTimezoneLabel: string = _t("settings|preferences|default_timezone", {
248246
timezone: TimezoneHandler.shortBrowserTimezone(),
249247
});
250248

249+
const newRoomListEnabled = SettingsStore.getValue("feature_new_room_list");
250+
251251
// Always Preprend the default option
252252
const timezones = this.state.timezones.map((tz) => {
253253
return <div key={tz}>{tz}</div>;
@@ -263,11 +263,13 @@ export default class PreferencesUserSettingsTab extends React.Component<IProps,
263263
<SpellCheckSection />
264264
</SettingsSubsection>
265265

266-
{roomListSettings.length > 0 && (
267-
<SettingsSubsection heading={_t("settings|preferences|room_list_heading")}>
268-
{this.renderGroup(roomListSettings)}
269-
</SettingsSubsection>
270-
)}
266+
<SettingsSubsection heading={_t("settings|preferences|room_list_heading")}>
267+
{this.renderGroup(PreferencesUserSettingsTab.ROOM_LIST_SETTINGS)}
268+
{/* The settings is on device level where the other room list settings are on account level */}
269+
{newRoomListEnabled && (
270+
<SettingsFlag name="RoomList.showMessagePreview" level={SettingLevel.DEVICE} />
271+
)}
272+
</SettingsSubsection>
271273

272274
<SettingsSubsection heading={_t("common|spaces")}>
273275
{this.renderGroup(PreferencesUserSettingsTab.SPACES_SETTINGS, SettingLevel.ACCOUNT)}

src/i18n/strings/en_EN.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2095,7 +2095,6 @@
20952095
"room_list": {
20962096
"add_room_label": "Add room",
20972097
"add_space_label": "Add space",
2098-
"appearance": "Appearance",
20992098
"breadcrumbs_empty": "No recently visited rooms",
21002099
"breadcrumbs_label": "Recently visited rooms",
21012100
"empty": {
@@ -2154,7 +2153,6 @@
21542153
},
21552154
"room_options": "Room Options",
21562155
"show_less": "Show less",
2157-
"show_message_previews": "Show message previews",
21582156
"show_n_more": {
21592157
"one": "Show %(count)s more",
21602158
"other": "Show %(count)s more"
@@ -2984,6 +2982,7 @@
29842982
"show_chat_effects": "Show chat effects (animations when receiving e.g. confetti)",
29852983
"show_displayname_changes": "Show display name changes",
29862984
"show_join_leave": "Show join/leave messages (invites/removes/bans unaffected)",
2985+
"show_message_previews": "Show message previews",
29872986
"show_nsfw_content": "Show NSFW content",
29882987
"show_read_receipts": "Show read receipts sent by other users",
29892988
"show_redaction_placeholder": "Show a placeholder for removed messages",

src/settings/Settings.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1136,6 +1136,7 @@ export const SETTINGS: Settings = {
11361136
"RoomList.showMessagePreview": {
11371137
supportedLevels: [SettingLevel.DEVICE],
11381138
default: false,
1139+
displayName: _td("settings|show_message_previews"),
11391140
},
11401141
"RightPanel.phasesGlobal": {
11411142
supportedLevels: [SettingLevel.DEVICE],

test/unit-tests/components/viewmodels/roomlist/RoomListHeaderViewModel-test.tsx

Lines changed: 1 addition & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { range } from "lodash";
1313
import { useRoomListHeaderViewModel } from "../../../../../src/components/viewmodels/roomlist/RoomListHeaderViewModel";
1414
import SpaceStore from "../../../../../src/stores/spaces/SpaceStore";
1515
import { mkStubRoom, stubClient, withClientContextRenderOptions } from "../../../../test-utils";
16-
import SettingsStore, { type CallbackFn } from "../../../../../src/settings/SettingsStore";
16+
import SettingsStore from "../../../../../src/settings/SettingsStore";
1717
import defaultDispatcher from "../../../../../src/dispatcher/dispatcher";
1818
import { Action } from "../../../../../src/dispatcher/actions";
1919
import {
@@ -24,7 +24,6 @@ import {
2424
showSpaceSettings,
2525
} from "../../../../../src/utils/space";
2626
import { createRoom, hasCreateRoomRights } from "../../../../../src/components/viewmodels/roomlist/utils";
27-
import { SettingLevel } from "../../../../../src/settings/SettingLevel";
2827
import RoomListStoreV3 from "../../../../../src/stores/room-list-v3/RoomListStoreV3";
2928
import { SortOption } from "../../../../../src/components/viewmodels/roomlist/useSorter";
3029
import { SortingAlgorithm } from "../../../../../src/stores/room-list-v3/skip-list/sorters";
@@ -238,38 +237,4 @@ describe("useRoomListHeaderViewModel", () => {
238237
expect(vm.current.activeSortOption).toEqual(SortOption.AToZ);
239238
});
240239
});
241-
242-
describe("message preview toggle", () => {
243-
it("should return shouldShowMessagePreview based on setting", () => {
244-
jest.spyOn(SettingsStore, "getValue").mockImplementation(() => true);
245-
const { result: vm } = render();
246-
expect(vm.current.shouldShowMessagePreview).toEqual(true);
247-
});
248-
249-
it("should update when setting changes", async () => {
250-
jest.spyOn(SettingsStore, "getValue").mockImplementation(() => true);
251-
252-
let watchFn: CallbackFn;
253-
jest.spyOn(SettingsStore, "watchSetting").mockImplementation((settingName, _roomId, fn) => {
254-
if (settingName === "RoomList.showMessagePreview") watchFn = fn;
255-
return "";
256-
});
257-
const { result: vm } = render();
258-
expect(vm.current.shouldShowMessagePreview).toEqual(true);
259-
260-
jest.spyOn(SettingsStore, "getValue").mockImplementation(() => false);
261-
act(() => watchFn("RoomList.showMessagePreview", "", SettingLevel.DEVICE, false, false));
262-
expect(vm.current.shouldShowMessagePreview).toEqual(false);
263-
});
264-
265-
it("should change setting on toggle", () => {
266-
jest.spyOn(SettingsStore, "getValue").mockImplementation(() => true);
267-
const fn = jest.spyOn(SettingsStore, "setValue").mockImplementation(async () => {});
268-
269-
const { result: vm } = render();
270-
expect(vm.current.shouldShowMessagePreview).toEqual(true);
271-
act(() => vm.current.toggleMessagePreview());
272-
expect(fn).toHaveBeenCalledWith("RoomList.showMessagePreview", null, "device", false);
273-
});
274-
});
275240
});

test/unit-tests/components/views/rooms/RoomListPanel/RoomListHeaderView-test.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,6 @@ describe("<RoomListHeaderView />", () => {
3232
canAccessSpaceSettings: true,
3333
sort: jest.fn(),
3434
activeSortOption: SortOption.Activity,
35-
shouldShowMessagePreview: false,
36-
toggleMessagePreview: jest.fn(),
3735
createRoom: jest.fn(),
3836
createVideoRoom: jest.fn(),
3937
createChatRoom: jest.fn(),

0 commit comments

Comments
 (0)