From 73d4b63adafd3547aaf957f9d762c6ad2edab6a1 Mon Sep 17 00:00:00 2001 From: adis veletanlic <96535657+defaultdino@users.noreply.github.com> Date: Fri, 17 Apr 2026 13:36:40 +0200 Subject: [PATCH] Fix crashes in when opening Bridges in room settings (#33137) * use SDKContext for room settings dialog to avoid crash #33107 * format with prettier * add SDKContext to RoomSettingsDialog test --- .../views/dialogs/RoomSettingsDialog.tsx | 34 +++++++++++-------- apps/web/src/utils/DialogOpener.ts | 1 + .../views/dialogs/RoomSettingsDialog-test.tsx | 10 ++++-- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/apps/web/src/components/views/dialogs/RoomSettingsDialog.tsx b/apps/web/src/components/views/dialogs/RoomSettingsDialog.tsx index 10e4a3e428..4488c6bf93 100644 --- a/apps/web/src/components/views/dialogs/RoomSettingsDialog.tsx +++ b/apps/web/src/components/views/dialogs/RoomSettingsDialog.tsx @@ -42,6 +42,7 @@ import { type NonEmptyArray } from "../../../@types/common"; import { PollHistoryTab } from "../settings/tabs/room/PollHistoryTab"; import ErrorBoundary from "../elements/ErrorBoundary"; import { PeopleRoomSettingsTab } from "../settings/tabs/room/PeopleRoomSettingsTab"; +import { SDKContext, type SdkContextClass } from "../../../contexts/SDKContext"; export const enum RoomSettingsTab { General = "ROOM_GENERAL_TAB", @@ -59,6 +60,7 @@ interface IProps { roomId: string; onFinished: (success?: boolean) => void; initialTabId?: RoomSettingsTab; + sdkContext: SdkContextClass; } interface IState { @@ -238,21 +240,23 @@ class RoomSettingsDialog extends React.Component { public render(): React.ReactNode { const roomName = this.state.room.name; return ( - -
- -
-
+ + +
+ +
+
+
); } } diff --git a/apps/web/src/utils/DialogOpener.ts b/apps/web/src/utils/DialogOpener.ts index 9eadf63adf..fff7297a68 100644 --- a/apps/web/src/utils/DialogOpener.ts +++ b/apps/web/src/utils/DialogOpener.ts @@ -57,6 +57,7 @@ export class DialogOpener { { roomId: payload.room_id || SdkContextClass.instance.roomViewStore.getRoomId(), initialTabId: payload.initial_tab_id, + sdkContext: SdkContextClass.instance, }, /*className=*/ undefined, /*isPriority=*/ false, diff --git a/apps/web/test/unit-tests/components/views/dialogs/RoomSettingsDialog-test.tsx b/apps/web/test/unit-tests/components/views/dialogs/RoomSettingsDialog-test.tsx index 73654cfc5f..5bc6933d50 100644 --- a/apps/web/test/unit-tests/components/views/dialogs/RoomSettingsDialog-test.tsx +++ b/apps/web/test/unit-tests/components/views/dialogs/RoomSettingsDialog-test.tsx @@ -24,6 +24,7 @@ import MatrixClientContext from "../../../../../src/contexts/MatrixClientContext import SettingsStore from "../../../../../src/settings/SettingsStore"; import { UIFeature } from "../../../../../src/settings/UIFeature"; import DMRoomMap from "../../../../../src/utils/DMRoomMap"; +import { SdkContextClass } from "../../../../../src/contexts/SDKContext"; describe("", () => { const userId = "@alice:server.org"; @@ -43,6 +44,8 @@ describe("", () => { const room2 = new Room("!room2:server.org", mockClient, userId); room2.name = "Another Room"; + let sdkContext: SdkContextClass; + jest.spyOn(SettingsStore, "getValue"); beforeEach(() => { @@ -54,6 +57,9 @@ describe("", () => { return null; }); + sdkContext = new SdkContextClass(); + sdkContext.client = mockClient; + jest.spyOn(SettingsStore, "getValue").mockReset().mockReturnValue(false); const dmRoomMap = { @@ -63,7 +69,7 @@ describe("", () => { }); const getComponent = (onFinished = jest.fn(), propRoomId = roomId) => - render(, { + render(, { wrapper: ({ children }) => ( {children} ), @@ -79,7 +85,7 @@ describe("", () => { expect(getByText(`Room Settings - ${room.name}`)).toBeInTheDocument(); - rerender(); + rerender(); expect(getByText(`Room Settings - ${room2.name}`)).toBeInTheDocument(); });