mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
62 lines
1.6 KiB
TypeScript
62 lines
1.6 KiB
TypeScript
import "./components/app.scss"
|
|
import React from "react";
|
|
import * as Mobx from "mobx"
|
|
import * as LensExtensions from "../extensions/extension-renderer-api"
|
|
import { render, unmountComponentAtNode } from "react-dom";
|
|
import { isMac } from "../common/vars";
|
|
import { userStore } from "../common/user-store";
|
|
import { workspaceStore } from "../common/workspace-store";
|
|
import { clusterStore } from "../common/cluster-store";
|
|
import { i18nStore } from "./i18n";
|
|
import { themeStore } from "./theme.store";
|
|
import { App } from "./components/app";
|
|
import { LensApp } from "./lens-app";
|
|
|
|
type AppComponent = React.ComponentType & {
|
|
init?(): void;
|
|
}
|
|
|
|
export {
|
|
React,
|
|
Mobx,
|
|
LensExtensions
|
|
}
|
|
|
|
export async function bootstrap(App: AppComponent) {
|
|
const rootElem = document.getElementById("app")
|
|
rootElem.classList.toggle("is-mac", isMac);
|
|
|
|
// preload common stores
|
|
await Promise.all([
|
|
userStore.load(),
|
|
workspaceStore.load(),
|
|
clusterStore.load(),
|
|
i18nStore.init(),
|
|
themeStore.init(),
|
|
]);
|
|
|
|
// Register additional store listeners
|
|
clusterStore.registerIpcListener();
|
|
|
|
// init app's dependencies if any
|
|
if (App.init) {
|
|
await App.init();
|
|
}
|
|
window.addEventListener("message", (ev: MessageEvent) => {
|
|
if (ev.data === "teardown") {
|
|
userStore.unregisterIpcListener()
|
|
workspaceStore.unregisterIpcListener()
|
|
clusterStore.unregisterIpcListener()
|
|
unmountComponentAtNode(rootElem)
|
|
window.location.href = "about:blank"
|
|
}
|
|
})
|
|
render(<>
|
|
{isMac && <div id="draggable-top" />}
|
|
<App />
|
|
</>, rootElem);
|
|
}
|
|
|
|
// run
|
|
bootstrap(process.isMainFrame ? LensApp : App);
|