diff --git a/src/stores/spaces/SpaceStore.ts b/src/stores/spaces/SpaceStore.ts index 8e8b4cc273..b47cc4d104 100644 --- a/src/stores/spaces/SpaceStore.ts +++ b/src/stores/spaces/SpaceStore.ts @@ -21,6 +21,7 @@ import { } from "matrix-js-sdk/src/matrix"; import { KnownMembership } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; +import { defer } from "matrix-js-sdk/src/utils"; import { AsyncStoreWithClient } from "../AsyncStoreWithClient"; import defaultDispatcher from "../../dispatcher/dispatcher"; @@ -152,6 +153,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { private _enabledMetaSpaces: MetaSpace[] = []; /** Whether the feature flag is set for MSC3946 */ private _msc3946ProcessDynamicPredecessor: boolean = SettingsStore.getValue("feature_dynamic_room_predecessors"); + private _isReady = defer(); public constructor() { super(defaultDispatcher, {}); @@ -162,6 +164,14 @@ export class SpaceStoreClass extends AsyncStoreWithClient { SettingsStore.monitorSetting("feature_dynamic_room_predecessors", null); } + /** + * Returns a promise that resolves when the space store is ready. + * This happens after an initial hierarchy of spaces and rooms has been computed. + */ + public get isReady(): Promise { + return this._isReady.promise; + } + /** * Get the order of meta spaces to display in the space panel. * @@ -1201,6 +1211,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { } else { this.switchSpaceIfNeeded(); } + this._isReady.resolve(); } private sendUserProperties(): void {