Files
ThreadNet-Web/modules/banner/element-web/src/index.tsx
T

51 lines
1.5 KiB
TypeScript
Raw Normal View History

2025-05-08 12:06:05 +01:00
/*
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.
*/
2025-05-19 12:44:58 +01:00
import { ThemeProvider } from "styled-components";
2025-05-08 12:06:05 +01:00
import type { Module, Api, ModuleFactory } from "@element-hq/element-web-module-api";
import Translations from "./translations.json";
import { ModuleConfig, CONFIG_KEY } from "./config";
import Banner from "./Banner";
import { name as ModuleName } from "../package.json";
2025-05-15 17:03:02 +01:00
class BannerModule implements Module {
2025-05-14 09:27:27 +01:00
public static readonly moduleApiVersion = "^1.0.0";
2025-05-08 12:06:05 +01:00
private config?: ModuleConfig;
public constructor(private api: Api) {}
public async load(): Promise<void> {
this.api.i18n.register(Translations);
try {
this.config = ModuleConfig.parse(this.api.config.get(CONFIG_KEY));
} catch (e) {
console.error("Failed to init module", e);
throw new Error(`Errors in module configuration for "${ModuleName}"`);
}
const div = document.createElement("div");
this.api.rootNode.before(div);
const root = this.api.createRoot(div);
root.render(
2025-05-19 12:44:58 +01:00
<ThemeProvider theme={this.config.theme}>
<Banner
api={this.api}
logoUrl={this.config.logo_url}
href={this.config.logo_link_url}
menu={this.config.menu}
/>
</ThemeProvider>,
2025-05-08 12:06:05 +01:00
);
}
}
2025-05-15 17:03:02 +01:00
export default BannerModule satisfies ModuleFactory;