From 200d52a1621ecdc5790cd80d4a5d94762a2ed32c Mon Sep 17 00:00:00 2001 From: R Midhun Suresh Date: Thu, 23 Oct 2025 12:32:01 +0530 Subject: [PATCH 1/5] Add Stores API --- .../element-web-module-api/src/api/index.ts | 6 ++++ .../element-web-module-api/src/api/stores.ts | 35 +++++++++++++++++++ packages/element-web-module-api/src/index.ts | 1 + 3 files changed, 42 insertions(+) create mode 100644 packages/element-web-module-api/src/api/stores.ts diff --git a/packages/element-web-module-api/src/api/index.ts b/packages/element-web-module-api/src/api/index.ts index f95479012c..f99a8bbbe8 100644 --- a/packages/element-web-module-api/src/api/index.ts +++ b/packages/element-web-module-api/src/api/index.ts @@ -17,6 +17,7 @@ import { AccountAuthApiExtension } from "./auth.ts"; import { ProfileApiExtension } from "./profile.ts"; import { ExtrasApi } from "./extras.ts"; import { BuiltinsApi } from "./builtins.ts"; +import { StoresApi } from "./stores.ts"; import { ClientApi } from "./client.ts"; /** @@ -124,6 +125,11 @@ export interface Api */ readonly extras: ExtrasApi; + /** + * Allows modules to access a limited functionality of certain stores from Element Web. + */ + readonly stores: StoresApi; + /** * Access some very specific functionality from the client. */ diff --git a/packages/element-web-module-api/src/api/stores.ts b/packages/element-web-module-api/src/api/stores.ts new file mode 100644 index 0000000000..469a52bdd2 --- /dev/null +++ b/packages/element-web-module-api/src/api/stores.ts @@ -0,0 +1,35 @@ +/* +Copyright 2025 New Vector Ltd. + +SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE files in the repository root for full details. +*/ + +import type { Room } from "../models/Room"; + +/** + * Provides some basic functionality of the Room List Store from element-web. + * @public + */ +export interface RoomListStoreApi { + /** + * Get a flat list of sorted room from the RLS. + */ + getRooms(): Room[]; + + /** + * Returns a promise that resolves when RLS is ready. + */ + waitForReady(): Promise; +} + +/** + * Provides access to certain stores from element-web. + * @public + */ +export interface StoresApi { + /** + * Use this to access limited functionality of the RLS from element-web. + */ + getRoomListStore(): RoomListStoreApi; +} diff --git a/packages/element-web-module-api/src/index.ts b/packages/element-web-module-api/src/index.ts index 64f2002a27..52a0593bc5 100644 --- a/packages/element-web-module-api/src/index.ts +++ b/packages/element-web-module-api/src/index.ts @@ -20,5 +20,6 @@ export type * from "./api/dialog"; export type * from "./api/profile"; export type * from "./api/navigation"; export type * from "./api/builtins"; +export type * from "./api/stores"; export type * from "./api/client"; export * from "./api/watchable"; From 97e146247492b969139d75d894428c182bc49948 Mon Sep 17 00:00:00 2001 From: R Midhun Suresh Date: Thu, 23 Oct 2025 12:32:48 +0530 Subject: [PATCH 2/5] Updat api doc --- .../element-web-module-api.api.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/element-web-module-api/element-web-module-api.api.md b/packages/element-web-module-api/element-web-module-api.api.md index 4fcbd748a9..48b781fa2d 100644 --- a/packages/element-web-module-api/element-web-module-api.api.md +++ b/packages/element-web-module-api/element-web-module-api.api.md @@ -54,6 +54,7 @@ export interface Api extends LegacyModuleApiExtension, LegacyCustomisationsApiEx readonly i18n: I18nApi; readonly navigation: NavigationApi; readonly rootNode: HTMLElement; + readonly stores: StoresApi; } // @alpha @@ -337,6 +338,12 @@ export interface RoomListCustomisations { isRoomVisible?(room: Room): boolean; } +// @public +export interface RoomListStoreApi { + getRooms(): Room[]; + waitForReady(): Promise; +} + // @alpha export interface RoomViewProps { roomId?: string; @@ -355,6 +362,11 @@ export interface SpacePanelItemProps { tooltip?: string; } +// @public +export interface StoresApi { + getRoomListStore(): RoomListStoreApi; +} + // @public export type Translations = Record Date: Fri, 24 Oct 2025 00:28:54 +0530 Subject: [PATCH 3/5] Convert to property --- packages/element-web-module-api/src/api/stores.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/element-web-module-api/src/api/stores.ts b/packages/element-web-module-api/src/api/stores.ts index 469a52bdd2..e27a72266d 100644 --- a/packages/element-web-module-api/src/api/stores.ts +++ b/packages/element-web-module-api/src/api/stores.ts @@ -31,5 +31,5 @@ export interface StoresApi { /** * Use this to access limited functionality of the RLS from element-web. */ - getRoomListStore(): RoomListStoreApi; + roomListStore: RoomListStoreApi; } From 4ee9b05608aa632ddeaf165d31d1bf0c0fb45f1a Mon Sep 17 00:00:00 2001 From: R Midhun Suresh Date: Fri, 24 Oct 2025 00:29:18 +0530 Subject: [PATCH 4/5] Return a watchable --- packages/element-web-module-api/src/api/stores.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/element-web-module-api/src/api/stores.ts b/packages/element-web-module-api/src/api/stores.ts index e27a72266d..057caec87c 100644 --- a/packages/element-web-module-api/src/api/stores.ts +++ b/packages/element-web-module-api/src/api/stores.ts @@ -6,6 +6,7 @@ Please see LICENSE files in the repository root for full details. */ import type { Room } from "../models/Room"; +import { Watchable } from "./watchable"; /** * Provides some basic functionality of the Room List Store from element-web. @@ -13,9 +14,9 @@ import type { Room } from "../models/Room"; */ export interface RoomListStoreApi { /** - * Get a flat list of sorted room from the RLS. + * Returns a watchable holding a flat list of sorted room. */ - getRooms(): Room[]; + getRooms(): Watchable; /** * Returns a promise that resolves when RLS is ready. From 4381032d63a5fdc5c81aa308a2f4d121acd2d8c5 Mon Sep 17 00:00:00 2001 From: R Midhun Suresh Date: Fri, 24 Oct 2025 00:30:01 +0530 Subject: [PATCH 5/5] Update API doc --- packages/element-web-module-api/element-web-module-api.api.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/element-web-module-api/element-web-module-api.api.md b/packages/element-web-module-api/element-web-module-api.api.md index 48b781fa2d..0b836bd551 100644 --- a/packages/element-web-module-api/element-web-module-api.api.md +++ b/packages/element-web-module-api/element-web-module-api.api.md @@ -340,7 +340,7 @@ export interface RoomListCustomisations { // @public export interface RoomListStoreApi { - getRooms(): Room[]; + getRooms(): Watchable; waitForReady(): Promise; } @@ -364,7 +364,7 @@ export interface SpacePanelItemProps { // @public export interface StoresApi { - getRoomListStore(): RoomListStoreApi; + roomListStore: RoomListStoreApi; } // @public