@jamarsto/kiunzi-micro-frontend-tools
Version:
Kiunzi framework Micro-frontend scaffolding
54 lines • 8.51 kB
JavaScript
import { Injectable } from '@angular/core';
import { NavigationEnd } from '@angular/router';
import { filter } from 'rxjs';
import * as i0 from "@angular/core";
import * as i1 from "../active-module-path/active-module-path.service";
export class SyncRouteShell {
constructor(activeModulePath) {
this.activeModulePath = activeModulePath;
}
sync(router, customRoutes) {
const moduleByPath = this.getModuleByPath(customRoutes);
const pathByModule = this.getPathByModule(customRoutes);
router
.events
.pipe(filter((event) => event instanceof NavigationEnd))
.subscribe(() => this.dispatchEvent(moduleByPath));
window.addEventListener('popstate', () => this.navigate(router));
window.addEventListener('mfeNavigationEvent', (event) => this.updateRoute(router, event, pathByModule));
this.navigate(router);
}
details(moduleByPath) {
return { detail: moduleByPath.get(this.activeModulePath.get()) };
}
dispatchEvent(moduleByPath) {
window.dispatchEvent(new CustomEvent('shellNavigationEvent', this.details(moduleByPath)));
}
getModuleByPath(customRoutes) {
const moduleByPath = new Map();
customRoutes.moduleRoutes.forEach((item) => moduleByPath.set(item.prefix, item.name));
return moduleByPath;
}
getPathByModule(customRoutes) {
const pathByModule = new Map();
customRoutes.moduleRoutes.forEach((item) => pathByModule.set(item.name, item.prefix));
return pathByModule;
}
navigate(router) {
router.navigateByUrl(window.location.pathname);
}
updateRoute(router, event, pathByModule) {
if (this.activeModulePath.get() === pathByModule.get(event.detail)) {
this.navigate(router);
}
}
}
SyncRouteShell.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.10", ngImport: i0, type: SyncRouteShell, deps: [{ token: i1.ActiveModulePath }], target: i0.ɵɵFactoryTarget.Injectable });
SyncRouteShell.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.10", ngImport: i0, type: SyncRouteShell, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.10", ngImport: i0, type: SyncRouteShell, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: function () { return [{ type: i1.ActiveModulePath }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1yb3V0ZS1zaGVsbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l1bnppLW1pY3JvLWZyb250ZW5kLXRvb2xzL3NyYy9saWIvc2VydmljZS9zeW5jLXJvdXRlLXNoZWxsL3N5bmMtcm91dGUtc2hlbGwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFPOUIsTUFBTSxPQUFPLGNBQWM7SUFDekIsWUFBb0IsZ0JBQWtDO1FBQWxDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7SUFBRyxDQUFDO0lBRTFELElBQUksQ0FBQyxNQUFjLEVBQUUsWUFBK0I7UUFDbEQsTUFBTSxZQUFZLEdBQXVCLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUUsTUFBTSxZQUFZLEdBQXVCLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUUsTUFBTTthQUNELE1BQU07YUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUEwQixFQUFFLENBQUMsS0FBSyxZQUFZLGFBQWEsQ0FBQyxDQUFDO2FBQy9FLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDdkQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDakUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFvQixFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDdkgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRU8sT0FBTyxDQUFDLFlBQWdDO1FBQzlDLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ25FLENBQUM7SUFFTyxhQUFhLENBQUMsWUFBZ0M7UUFDcEQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRU8sZUFBZSxDQUFDLFlBQStCO1FBQ3JELE1BQU0sWUFBWSxHQUF1QixJQUFJLEdBQUcsRUFBaUIsQ0FBQztRQUNsRSxZQUFZLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxlQUFlLENBQUMsWUFBK0I7UUFDckQsTUFBTSxZQUFZLEdBQXVCLElBQUksR0FBRyxFQUFpQixDQUFDO1FBQ2xFLFlBQVksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdEYsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVPLFFBQVEsQ0FBQyxNQUFjO1FBQzdCLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU8sV0FBVyxDQUFDLE1BQWMsRUFBRSxLQUFrQixFQUFFLFlBQWdDO1FBQ3RGLElBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxLQUFLLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2pFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdkI7SUFDSCxDQUFDOzs0R0EzQ1UsY0FBYztnSEFBZCxjQUFjLGNBRmIsTUFBTTs0RkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEN1c3RvbVNoZWxsUm91dGVzIH0gZnJvbSAnLi4vLi4vdHlwZXMvY3VzdG9tLXNoZWxsLXJvdXRlcy9jdXN0b20tc2hlbGwtcm91dGVzLnR5cGUnO1xuaW1wb3J0IHsgQWN0aXZlTW9kdWxlUGF0aCB9IGZyb20gJy4uL2FjdGl2ZS1tb2R1bGUtcGF0aC9hY3RpdmUtbW9kdWxlLXBhdGguc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFN5bmNSb3V0ZVNoZWxsIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhY3RpdmVNb2R1bGVQYXRoOiBBY3RpdmVNb2R1bGVQYXRoKSB7fVxuXG4gIHN5bmMocm91dGVyOiBSb3V0ZXIsIGN1c3RvbVJvdXRlczogQ3VzdG9tU2hlbGxSb3V0ZXMpOiB2b2lkIHtcbiAgICBjb25zdCBtb2R1bGVCeVBhdGg6IE1hcDxzdHJpbmcsc3RyaW5nPiA9IHRoaXMuZ2V0TW9kdWxlQnlQYXRoKGN1c3RvbVJvdXRlcyk7XG4gICAgY29uc3QgcGF0aEJ5TW9kdWxlOiBNYXA8c3RyaW5nLHN0cmluZz4gPSB0aGlzLmdldFBhdGhCeU1vZHVsZShjdXN0b21Sb3V0ZXMpO1xuICAgIHJvdXRlclxuICAgICAgICAuZXZlbnRzXG4gICAgICAgIC5waXBlKGZpbHRlcigoZXZlbnQpOiBldmVudCBpcyBOYXZpZ2F0aW9uRW5kID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kaXNwYXRjaEV2ZW50KG1vZHVsZUJ5UGF0aCkpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsICgpID0+IHRoaXMubmF2aWdhdGUocm91dGVyKSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21mZU5hdmlnYXRpb25FdmVudCcsIChldmVudCkgPT4gdGhpcy51cGRhdGVSb3V0ZShyb3V0ZXIsIGV2ZW50IGFzIEN1c3RvbUV2ZW50LCBwYXRoQnlNb2R1bGUpKTtcbiAgICB0aGlzLm5hdmlnYXRlKHJvdXRlcik7XG4gIH1cblxuICBwcml2YXRlIGRldGFpbHMobW9kdWxlQnlQYXRoOiBNYXA8c3RyaW5nLHN0cmluZz4pOiBDdXN0b21FdmVudEluaXQge1xuICAgIHJldHVybiB7IGRldGFpbDogbW9kdWxlQnlQYXRoLmdldCh0aGlzLmFjdGl2ZU1vZHVsZVBhdGguZ2V0KCkpIH07XG4gIH1cblxuICBwcml2YXRlIGRpc3BhdGNoRXZlbnQobW9kdWxlQnlQYXRoOiBNYXA8c3RyaW5nLHN0cmluZz4pOiB2b2lkIHtcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ3NoZWxsTmF2aWdhdGlvbkV2ZW50JywgdGhpcy5kZXRhaWxzKG1vZHVsZUJ5UGF0aCkpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TW9kdWxlQnlQYXRoKGN1c3RvbVJvdXRlczogQ3VzdG9tU2hlbGxSb3V0ZXMpOiBNYXA8c3RyaW5nLHN0cmluZz4ge1xuICAgIGNvbnN0IG1vZHVsZUJ5UGF0aDogTWFwPHN0cmluZyxzdHJpbmc+ID0gbmV3IE1hcDxzdHJpbmcsc3RyaW5nPigpO1xuICAgIGN1c3RvbVJvdXRlcy5tb2R1bGVSb3V0ZXMuZm9yRWFjaCgoaXRlbSkgPT4gbW9kdWxlQnlQYXRoLnNldChpdGVtLnByZWZpeCwgaXRlbS5uYW1lKSk7XG4gICAgcmV0dXJuIG1vZHVsZUJ5UGF0aDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGF0aEJ5TW9kdWxlKGN1c3RvbVJvdXRlczogQ3VzdG9tU2hlbGxSb3V0ZXMpOiBNYXA8c3RyaW5nLHN0cmluZz4ge1xuICAgIGNvbnN0IHBhdGhCeU1vZHVsZTogTWFwPHN0cmluZyxzdHJpbmc+ID0gbmV3IE1hcDxzdHJpbmcsc3RyaW5nPigpO1xuICAgIGN1c3RvbVJvdXRlcy5tb2R1bGVSb3V0ZXMuZm9yRWFjaCgoaXRlbSkgPT4gcGF0aEJ5TW9kdWxlLnNldChpdGVtLm5hbWUsIGl0ZW0ucHJlZml4KSk7XG4gICAgcmV0dXJuIHBhdGhCeU1vZHVsZTtcbiAgfVxuXG4gIHByaXZhdGUgbmF2aWdhdGUocm91dGVyOiBSb3V0ZXIpOiB2b2lkIHtcbiAgICByb3V0ZXIubmF2aWdhdGVCeVVybCh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVSb3V0ZShyb3V0ZXI6IFJvdXRlciwgZXZlbnQ6IEN1c3RvbUV2ZW50LCBwYXRoQnlNb2R1bGU6IE1hcDxzdHJpbmcsc3RyaW5nPik6IHZvaWQge1xuICAgIGlmKHRoaXMuYWN0aXZlTW9kdWxlUGF0aC5nZXQoKSA9PT0gcGF0aEJ5TW9kdWxlLmdldChldmVudC5kZXRhaWwpKSB7XG4gICAgICB0aGlzLm5hdmlnYXRlKHJvdXRlcik7XG4gICAgfVxuICB9XG59XG5cbiJdfQ==