From 80aa32ff923d59d36ce05ac8af04dcdd203b4458 Mon Sep 17 00:00:00 2001 From: Reza Mohseni Date: Thu, 4 Jul 2024 13:08:04 +0200 Subject: [PATCH] chore: Add option to show/hide "Leave space" in context menu. created tests --- .../views/context_menus/SpaceContextMenu.tsx | 4 +-- src/settings/Settings.tsx | 4 +++ src/settings/UIFeature.ts | 1 + .../context_menus/SpaceContextMenu-test.tsx | 25 ++++++++++++++++++- 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/components/views/context_menus/SpaceContextMenu.tsx b/src/components/views/context_menus/SpaceContextMenu.tsx index 5cb83519164..13a5463ab73 100644 --- a/src/components/views/context_menus/SpaceContextMenu.tsx +++ b/src/components/views/context_menus/SpaceContextMenu.tsx @@ -37,7 +37,7 @@ import SettingsStore from "../../../settings/SettingsStore"; import { useFeatureEnabled } from "../../../hooks/useSettings"; import { Action } from "../../../dispatcher/actions"; import { shouldShowComponent } from "../../../customisations/helpers/UIComponents"; -import { UIComponent } from "../../../settings/UIFeature"; +import { UIComponent, UIFeature } from "../../../settings/UIFeature"; import PosthogTrackers from "../../../PosthogTrackers"; import { ViewRoomPayload } from "../../../dispatcher/payloads/ViewRoomPayload"; @@ -259,7 +259,7 @@ const SpaceContextMenu: React.FC = ({ space, hideHeader, onFinished, ... /> {devtoolsOption} {settingsOption} - {leaveOption} + {SettingsStore.getValue(UIFeature.ShowLeaveSpaceInContextMenu) && leaveOption} {newRoomSection} diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx index 1d2685964a1..9979a4eff9a 100644 --- a/src/settings/Settings.tsx +++ b/src/settings/Settings.tsx @@ -1243,6 +1243,10 @@ export const SETTINGS: { [setting: string]: ISetting } = { supportedLevels: LEVELS_UI_FEATURE, default: true, }, + [UIFeature.ShowLeaveSpaceInContextMenu]: { + supportedLevels: LEVELS_UI_FEATURE, + default: true, + }, // Electron-specific settings, they are stored by Electron and set/read over an IPC. // We store them over there are they are necessary to know before the renderer process launches. diff --git a/src/settings/UIFeature.ts b/src/settings/UIFeature.ts index 24605c51dec..65276d1768f 100644 --- a/src/settings/UIFeature.ts +++ b/src/settings/UIFeature.ts @@ -34,6 +34,7 @@ export const enum UIFeature { TimelineEnableRelativeDates = "UIFeature.timelineEnableRelativeDates", BulkUnverifiedSessionsReminder = "UIFeature.BulkUnverifiedSessionsReminder", ShowCreateSpaceButton = "UIFeature.showCreateSpaceButton", + ShowLeaveSpaceInContextMenu = "UIFeature.showLeaveSpaceInContextMenu", } export enum UIComponent { diff --git a/test/components/views/context_menus/SpaceContextMenu-test.tsx b/test/components/views/context_menus/SpaceContextMenu-test.tsx index 9e787b8bd0f..03324378ee7 100644 --- a/test/components/views/context_menus/SpaceContextMenu-test.tsx +++ b/test/components/views/context_menus/SpaceContextMenu-test.tsx @@ -31,7 +31,8 @@ import { } from "../../../../src/utils/space"; import { leaveSpace } from "../../../../src/utils/leave-behaviour"; import { shouldShowComponent } from "../../../../src/customisations/helpers/UIComponents"; -import { UIComponent } from "../../../../src/settings/UIFeature"; +import { UIComponent, UIFeature } from "../../../../src/settings/UIFeature"; +import SettingsStore from "../../../../src/settings/SettingsStore"; jest.mock("../../../../src/customisations/helpers/UIComponents", () => ({ shouldShowComponent: jest.fn(), @@ -223,4 +224,26 @@ describe("", () => { expect(onFinished).toHaveBeenCalled(); }); }); + + describe("UIFeature.ShowLeaveSpaceInContextMenu", () => { + it("ShowLeaveSpaceInContextMenu = true, renders 'leave space' option", () => { + mocked(shouldShowSpaceSettings).mockReturnValue(false); + jest.spyOn(SettingsStore, "getValue").mockImplementation((val) => { + return val === UIFeature.ShowLeaveSpaceInContextMenu ? true : "default"; + }); + renderComponent(); + + expect(screen.getByTestId("leave-option")).toBeInTheDocument(); + }); + + it("ShowLeaveSpaceInContextMenu = false, does not render 'leave space' option", () => { + mocked(shouldShowSpaceSettings).mockReturnValue(false); + jest.spyOn(SettingsStore, "getValue").mockImplementation((val) => { + return val === UIFeature.ShowLeaveSpaceInContextMenu ? false : "default"; + }); + renderComponent(); + + expect(screen.queryByTestId("leave-option")).not.toBeInTheDocument(); + }); + }); });