From 10622a2af9ffb702b539c890cc874c27b0db971d Mon Sep 17 00:00:00 2001 From: R Midhun Suresh Date: Wed, 29 Oct 2025 23:45:39 +0530 Subject: [PATCH] More changes --- src/components/structures/ScrollPanel.tsx | 3 ++- src/modules/AccountDataApi.ts | 10 ++++++---- src/modules/BuiltinsApi.tsx | 14 +++++++++----- src/modules/ClientApi.ts | 4 ++-- src/modules/common.ts | 4 ++-- 5 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/components/structures/ScrollPanel.tsx b/src/components/structures/ScrollPanel.tsx index a84b8544ea..e206fc3c70 100644 --- a/src/components/structures/ScrollPanel.tsx +++ b/src/components/structures/ScrollPanel.tsx @@ -14,7 +14,7 @@ import Timer from "../../utils/Timer"; import AutoHideScrollbar from "./AutoHideScrollbar"; import { getKeyBindingsManager } from "../../KeyBindingsManager"; import { KeyBindingAction } from "../../accessibility/KeyboardShortcuts"; -import type { SDKContext } from "../../contexts/SDKContext"; +import { SDKContext } from "../../contexts/SDKContext"; // The amount of extra scroll distance to allow prior to unfilling. // See getExcessHeight. @@ -184,6 +184,7 @@ export default class ScrollPanel extends React.Component { private heightUpdateInProgress = false; public divScroll: HTMLDivElement | null = null; + public static contextType = SDKContext; declare public context: React.ContextType; public constructor(props: IProps, context: React.ContextType) { diff --git a/src/modules/AccountDataApi.ts b/src/modules/AccountDataApi.ts index 1a83fab6e7..f539e03b4f 100644 --- a/src/modules/AccountDataApi.ts +++ b/src/modules/AccountDataApi.ts @@ -8,22 +8,24 @@ Please see LICENSE files in the repository root for full details. import { Watchable, type AccountDataApi as IAccountDataApi } from "@element-hq/element-web-module-api"; import { ClientEvent, type MatrixEvent, type MatrixClient } from "matrix-js-sdk/src/matrix"; -import { getSafeCli } from "./common"; +import { MatrixClientPeg } from "../MatrixClientPeg"; export class AccountDataApi implements IAccountDataApi { public get(eventType: string): Watchable { - const cli = getSafeCli(); + const cli = MatrixClientPeg.safeGet(); return new AccountDataWatchable(cli, eventType); } public async set(eventType: string, content: any): Promise { + const cli = MatrixClientPeg.safeGet(); //@ts-expect-error: JS-SDK accepts known event-types, intentionally allow arbitrary types. - await getSafeCli().setAccountData(eventType, content); + await cli.setAccountData(eventType, content); } public async delete(eventType: string): Promise { + const cli = MatrixClientPeg.safeGet(); //@ts-expect-error: JS-SDK accepts known event-types, intentionally allow arbitrary types. - getSafeCli().deleteAccountData(eventType); + cli.deleteAccountData(eventType); } } diff --git a/src/modules/BuiltinsApi.tsx b/src/modules/BuiltinsApi.tsx index 9bb8184873..7d1d27c6f1 100644 --- a/src/modules/BuiltinsApi.tsx +++ b/src/modules/BuiltinsApi.tsx @@ -9,10 +9,14 @@ import React from "react"; import { type RoomViewProps, type BuiltinsApi } from "@element-hq/element-web-module-api"; import RoomAvatar from "../components/views/avatars/RoomAvatar"; -import { getSafeCli } from "./common"; +import { MatrixClientPeg } from "../MatrixClientPeg"; + +interface RoomViewPropsWithRoomId extends RoomViewProps { + roomId: string; +} export class ElementWebBuiltinsApi implements BuiltinsApi { - private _roomView?: React.ComponentType; + private _roomView?: React.ComponentType; /** * Sets the components used to render a RoomView @@ -23,11 +27,11 @@ export class ElementWebBuiltinsApi implements BuiltinsApi { * * @param component The RoomView component */ - public setRoomViewComponent(component: React.ComponentType): void { + public setRoomViewComponent(component: React.ComponentType): void { this._roomView = component; } - public getRoomViewComponent(): React.ComponentType { + public getRoomViewComponent(): React.ComponentType { if (!this._roomView) { throw new Error("No RoomView component has been set"); } @@ -41,7 +45,7 @@ export class ElementWebBuiltinsApi implements BuiltinsApi { } public renderRoomAvatar(roomId: string, size?: string): React.ReactNode { - const room = getSafeCli().getRoom(roomId); + const room = MatrixClientPeg.safeGet().getRoom(roomId); if (!room) { throw new Error(`No room such room: ${roomId}`); } diff --git a/src/modules/ClientApi.ts b/src/modules/ClientApi.ts index e07d93608e..a1116353ec 100644 --- a/src/modules/ClientApi.ts +++ b/src/modules/ClientApi.ts @@ -7,13 +7,13 @@ Please see LICENSE files in the repository root for full details. import type { ClientApi as IClientApi, Room } from "@element-hq/element-web-module-api"; import { Room as ModuleRoom } from "./models/Room"; import { AccountDataApi } from "./AccountDataApi"; -import { getSafeCli } from "./common"; +import { MatrixClientPeg } from "../MatrixClientPeg"; export class ClientApi implements IClientApi { private accountDataApi?: AccountDataApi; public getRoom(roomId: string): Room | null { - const sdkRoom = getSafeCli().getRoom(roomId); + const sdkRoom = MatrixClientPeg.safeGet().getRoom(roomId); if (sdkRoom) return new ModuleRoom(sdkRoom); return null; } diff --git a/src/modules/common.ts b/src/modules/common.ts index 50a8e53a33..1793f71331 100644 --- a/src/modules/common.ts +++ b/src/modules/common.ts @@ -6,7 +6,7 @@ Please see LICENSE files in the repository root for full details. */ import type { MatrixClient } from "matrix-js-sdk/src/matrix"; -import { SdkContextClass } from "../contexts/SDKContext"; +import { MatrixClientPeg } from "../MatrixClientPeg"; /** * Get MatrixClient instance from SdkContextClass. @@ -14,7 +14,7 @@ import { SdkContextClass } from "../contexts/SDKContext"; * @returns MatrixClient object */ export function getSafeCli(): MatrixClient { - const cli = SdkContextClass.instance.client; + const cli = MatrixClientPeg.get(); if (!cli) { throw new Error("Could not get MatrixClient from SdkContextClass"); }