Correctly fill window.matrixChat even when a Wrapper module is active (#26395)

Signed-off-by: Dominik Henneke <dominik.henneke@nordeck.net>
This commit is contained in:
Dominik Henneke 2023-10-19 03:13:30 +02:00 committed by GitHub
parent f1a39b3e4d
commit 0040181489
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 16 additions and 6 deletions

View file

@ -65,7 +65,7 @@ function onTokenLoginCompleted(): void {
window.history.replaceState(null, "", url.href); window.history.replaceState(null, "", url.href);
} }
export async function loadApp(fragParams: {}): Promise<ReactElement> { export async function loadApp(fragParams: {}, matrixChatRef: React.Ref<MatrixChat>): Promise<ReactElement> {
initRouting(); initRouting();
const platform = PlatformPeg.get(); const platform = PlatformPeg.get();
@ -117,6 +117,7 @@ export async function loadApp(fragParams: {}): Promise<ReactElement> {
return ( return (
<wrapperOpts.Wrapper> <wrapperOpts.Wrapper>
<MatrixChat <MatrixChat
ref={matrixChatRef}
onNewScreen={onNewScreen} onNewScreen={onNewScreen}
config={config} config={config}
realQueryParams={params} realQueryParams={params}

View file

@ -30,6 +30,7 @@ import SdkConfig from "matrix-react-sdk/src/SdkConfig";
import { setTheme } from "matrix-react-sdk/src/theme"; import { setTheme } from "matrix-react-sdk/src/theme";
import { logger } from "matrix-js-sdk/src/logger"; import { logger } from "matrix-js-sdk/src/logger";
import { ModuleRunner } from "matrix-react-sdk/src/modules/ModuleRunner"; import { ModuleRunner } from "matrix-react-sdk/src/modules/ModuleRunner";
import MatrixChat from "matrix-react-sdk/src/components/structures/MatrixChat";
import ElectronPlatform from "./platform/ElectronPlatform"; import ElectronPlatform from "./platform/ElectronPlatform";
import PWAPlatform from "./platform/PWAPlatform"; import PWAPlatform from "./platform/PWAPlatform";
@ -147,7 +148,10 @@ export async function loadApp(fragParams: {}): Promise<void> {
/* webpackPreload: true */ /* webpackPreload: true */
"./app" "./app"
); );
window.matrixChat = ReactDOM.render(await module.loadApp(fragParams), document.getElementById("matrixchat")); function setWindowMatrixChat(matrixChat: MatrixChat): void {
window.matrixChat = matrixChat;
}
ReactDOM.render(await module.loadApp(fragParams, setWindowMatrixChat), document.getElementById("matrixchat"));
} }
export async function showError(title: string, messages?: string[]): Promise<void> { export async function showError(title: string, messages?: string[]): Promise<void> {

View file

@ -47,7 +47,7 @@ describe("Loading server config", function () {
}, },
}, },
}); });
await loadApp({}); await loadApp({}, null);
expect((SdkConfig.get("validated_server_config") || {}).hsUrl).toBe("https://matrix-client.matrix.org"); expect((SdkConfig.get("validated_server_config") || {}).hsUrl).toBe("https://matrix-client.matrix.org");
}); });
@ -55,7 +55,7 @@ describe("Loading server config", function () {
SdkConfig.put({ SdkConfig.put({
default_server_name: "matrix.org", default_server_name: "matrix.org",
}); });
await loadApp({}); await loadApp({}, null);
expect((SdkConfig.get("validated_server_config") || {}).hsUrl).toBe("https://matrix-client.matrix.org"); expect((SdkConfig.get("validated_server_config") || {}).hsUrl).toBe("https://matrix-client.matrix.org");
}); });
@ -72,7 +72,7 @@ describe("Loading server config", function () {
}, },
}, },
}); });
await loadApp({}); await loadApp({}, null);
expect((SdkConfig.get("validated_server_config") || {}).hsUrl).toBe("https://matrix-client.matrix.org"); expect((SdkConfig.get("validated_server_config") || {}).hsUrl).toBe("https://matrix-client.matrix.org");
}, },
); );

View file

@ -22,6 +22,7 @@ import fetchMock from "fetch-mock-jest";
import { render, RenderResult, screen } from "@testing-library/react"; import { render, RenderResult, screen } from "@testing-library/react";
import { ModuleRunner } from "matrix-react-sdk/src/modules/ModuleRunner"; import { ModuleRunner } from "matrix-react-sdk/src/modules/ModuleRunner";
import { WrapperLifecycle, WrapperOpts } from "@matrix-org/react-sdk-module-api/lib/lifecycles/WrapperLifecycle"; import { WrapperLifecycle, WrapperOpts } from "@matrix-org/react-sdk-module-api/lib/lifecycles/WrapperLifecycle";
import MatrixChat from "matrix-react-sdk/src/components/structures/MatrixChat";
import WebPlatform from "../../src/vector/platform/WebPlatform"; import WebPlatform from "../../src/vector/platform/WebPlatform";
import { loadApp } from "../../src/vector/app"; import { loadApp } from "../../src/vector/app";
@ -68,7 +69,8 @@ describe("Wrapper", () => {
} }
}); });
const matrixChatResult: RenderResult = render(await loadApp({})); const ref = React.createRef<MatrixChat>();
const matrixChatResult: RenderResult = render(await loadApp({}, ref));
// at this point, we're trying to do a guest registration; // at this point, we're trying to do a guest registration;
// we expect a spinner // we expect a spinner
@ -83,5 +85,8 @@ describe("Wrapper", () => {
expect(header.nextSibling).toBe(matrixChat); expect(header.nextSibling).toBe(matrixChat);
expect(matrixChat.nextSibling).toBe(footer); expect(matrixChat.nextSibling).toBe(footer);
// Should still hold a reference to the MatrixChat component
expect(ref.current).toBeInstanceOf(MatrixChat);
}); });
}); });