// https://vitejs.dev/config/build-options.html#build-modulepreload
import "vite/modulepreload-polyfill";
import "reflect-metadata";
// @ts-ignore: no typings available
import { setAnimationMode } from "@ui5/webcomponents-base/dist/config/AnimationMode";
// @ts-ignore: no typings available
import { setTheme } from "@ui5/webcomponents-base/dist/config/Theme";
// @ts-ignore: no typings available
import { createRoot } from "react-dom/client";
import { register } from "virtual:@cpro-js/vite-ui5-integration-plugin/runtime";
import { APPS } from "./app.config";
import { App } from "./domain/App";
import { getIntent } from "./domain/AppUtil";
register((rootNode, { component } = {}) => {
if (component) {
// initialized via UI5
if (component.isLaunchpad()) {
const { semanticObject } = component.getNavigationContext();
if (semanticObject && APPS.length > 1) {
// Related apps
// Clicking on app title in shell bar shows related apps
component.setRelatedApps(
APPS.map((app) => {
const { title, icon, action, path } = app;
return { title, icon, intent: getIntent(semanticObject, action, path) };
})
);
}
}
setAnimationMode(component.getAnimationMode());
setTheme(component.getTheme());
component.subscribeToThemeChanges((theme) => {
setTheme(theme);
});
}
const resolveUri = (path: string) => component?.resolveUri(path) ?? path;
const locale = component?.getLocale();
const root = createRoot(rootNode);
root.render();
// => clean up
return () => {
root.unmount();
};
});