quarc/router/angular/provide-router.ts

45 lines
1.5 KiB
TypeScript

import { EnvironmentProviders, Injector, PluginRoutingMode } from "../../core";
import { Routes } from "./types";
import { Router } from "./router";
import "../../core/global";
import { RouterLink } from "../directives/router-link.directive";
export interface PluginRouterOptions {
pluginId: string;
routingMode?: PluginRoutingMode;
}
export function provideRouter(routes: Routes, options?: PluginRouterOptions): EnvironmentProviders {
const injector = Injector.get();
if (!window.__quarc.router) {
window.__quarc.router ??= new Router(routes);;
} else {
if (options?.pluginId) {
window.__quarc.plugins ??= {};
window.__quarc.plugins[options.pluginId] ??= {};
window.__quarc.plugins[options.pluginId].routes = routes;
window.__quarc.plugins[options.pluginId].routingMode = options.routingMode ?? 'internal';
if (options.routingMode === 'root') {
window.__quarc.router.resetConfig([
...window.__quarc.router.config,
...routes,
]);
}
} else {
window.__quarc.router.resetConfig([
...window.__quarc.router.config,
...routes,
]);
}
// Ensure the existing router is also shared for plugins
}
injector.registerShared(Router, window.__quarc.router);
injector.registerShared(RouterLink, RouterLink);
return window.__quarc.router;
}