diff --git a/src/vector/platform/ElectronPlatform.tsx b/src/vector/platform/ElectronPlatform.tsx index 579096d5c0..4139f73d53 100644 --- a/src/vector/platform/ElectronPlatform.tsx +++ b/src/vector/platform/ElectronPlatform.tsx @@ -97,6 +97,7 @@ export default class ElectronPlatform extends BasePlatform { private badgeOverlayRenderer?: BadgeOverlayRenderer; private config!: IConfigOptions; private supportedSettings?: Record; + private clientStartedPromiseWithResolvers = Promise.withResolvers(); public constructor() { super(); @@ -184,7 +185,9 @@ export default class ElectronPlatform extends BasePlatform { await this.ipc.call("callDisplayMediaCallback", source ?? { id: "", name: "", thumbnailURL: "" }); }); - this.electron.on("showToast", (ev, { title, description, priority = 40 }) => { + this.electron.on("showToast", async (ev, { title, description, priority = 40 }) => { + await this.clientStartedPromiseWithResolvers.promise; + const key = uniqueId("electron_showToast_"); const onPrimaryClick = (): void => { ToastStore.sharedInstance().dismissToast(key); @@ -214,6 +217,10 @@ export default class ElectronPlatform extends BasePlatform { if (["call_state"].includes(payload.action)) { this.electron.send("app_onAction", payload); } + + if (payload.action === "client_started") { + this.clientStartedPromiseWithResolvers.resolve(); + } } private async initialise(): Promise { diff --git a/test/unit-tests/vector/platform/ElectronPlatform-test.ts b/test/unit-tests/vector/platform/ElectronPlatform-test.ts index ec1c18bb46..90b69f7fcf 100644 --- a/test/unit-tests/vector/platform/ElectronPlatform-test.ts +++ b/test/unit-tests/vector/platform/ElectronPlatform-test.ts @@ -130,14 +130,25 @@ describe("ElectronPlatform", () => { it("should show a toast when showToast is fired", async () => { new ElectronPlatform(); + dispatcher.dispatch( + { + action: "client_started", + }, + true, + ); const spy = jest.spyOn(ToastStore.sharedInstance(), "addOrReplaceToast"); const [event, handler] = getElectronEventHandlerCall("showToast")!; handler({} as any, { title: "title", description: "description" }); expect(event).toBeTruthy(); - expect(spy).toHaveBeenCalledWith( - expect.objectContaining({ title: "title", props: expect.objectContaining({ description: "description" }) }), + await waitFor(() => + expect(spy).toHaveBeenCalledWith( + expect.objectContaining({ + title: "title", + props: expect.objectContaining({ description: "description" }), + }), + ), ); });