UNPKG

@dotglitch/ngx-common

Version:

Angular components and utilities that are commonly used.

52 lines 7.55 kB
import { Injectable } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; import { ConsoleLogger } from '../utils'; import * as i0 from "@angular/core"; import * as i1 from "../public-api"; const { log, warn, err } = ConsoleLogger("NavigationService", "#ff9800"); export class NavigationService { constructor(lazyLoader) { this.lazyLoader = lazyLoader; this.virtualPath$ = new BehaviorSubject(null); // @ts-ignore window.onhashchange = () => this.loadRootPageFromUrl(); this.loadRootPageFromUrl(); } loadRootPageFromUrl() { const hash = location.hash.split("?")[0]; const root = hash.replace(/^\/?#\//, ''); // If the URL is imprecisely set, we restore it to the landing page if (!root || !root.trim()) return this.loadRootPage("#/Landing"); this.loadRootPage(location.hash); } loadRootPage(url, data = {}) { const [path, query] = url.split('?'); const hash = path.replace(/^\/?#\/?/, ''); const chunks = hash.split('/'); // Get query params and pass them as @Input arguments. const params = query?.split('&') .reduce((pars, par) => { const [key, value] = par.split("="); const decoded = decodeURIComponent(value); pars[key] = decoded; return pars; }, {}) || {}; log(`Root page navigate to '${hash}'`, { params, chunks }); const root = hash.replace(/^\/?#\//, ''); this.virtualPath$.next({ root: hash, chunks: chunks, args: params }); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: NavigationService, deps: [{ token: i1.LazyLoaderService }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: NavigationService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: NavigationService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i1.LazyLoaderService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9zZXJ2aWNlcy9uYXZpZ2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFXLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7OztBQUd6QyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxhQUFhLENBQUMsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFhekUsTUFBTSxPQUFPLGlCQUFpQjtJQUcxQixZQUNxQixVQUE2QjtRQUE3QixlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQUgzQyxpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFzQixJQUFJLENBQUMsQ0FBQztRQUtqRSxhQUFhO1FBQ2IsTUFBTSxDQUFDLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUN2RCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRU8sbUJBQW1CO1FBQ3ZCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXpDLG1FQUFtRTtRQUNuRSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNyQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVPLFlBQVksQ0FBQyxHQUFXLEVBQUUsT0FBZSxFQUFFO1FBRS9DLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRS9CLHNEQUFzRDtRQUN0RCxNQUFNLE1BQU0sR0FBRyxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUMzQixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDbEIsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUM7WUFDcEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUdqQixHQUFHLENBQUMsMEJBQTBCLElBQUksR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDM0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDbkIsSUFBSSxFQUFFLElBQUk7WUFDVixNQUFNLEVBQUUsTUFBYTtZQUNyQixJQUFJLEVBQUUsTUFBTTtTQUNmLENBQUMsQ0FBQztJQUNQLENBQUM7OEdBN0NRLGlCQUFpQjtrSEFBakIsaUJBQWlCLGNBRmQsTUFBTTs7MkZBRVQsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29uc29sZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IExhenlMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vcHVibGljLWFwaSc7XG5cbmNvbnN0IHsgbG9nLCB3YXJuLCBlcnIgfSA9IENvbnNvbGVMb2dnZXIoXCJOYXZpZ2F0aW9uU2VydmljZVwiLCBcIiNmZjk4MDBcIik7XG5cbnR5cGUgTmF2aWdhdGlvbkFyZ3VtZW50cyA9IHtcbiAgICByb290OiBzdHJpbmcsXG4gICAgY2h1bmtzOiBbc3RyaW5nLCAuLi5zdHJpbmdbXV0sXG4gICAgYXJnczoge1xuICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE5hdmlnYXRpb25TZXJ2aWNlIHtcbiAgICBwdWJsaWMgdmlydHVhbFBhdGgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOYXZpZ2F0aW9uQXJndW1lbnRzPihudWxsKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGxhenlMb2FkZXI6IExhenlMb2FkZXJTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgd2luZG93Lm9uaGFzaGNoYW5nZSA9ICgpID0+IHRoaXMubG9hZFJvb3RQYWdlRnJvbVVybCgpO1xuICAgICAgICB0aGlzLmxvYWRSb290UGFnZUZyb21VcmwoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRSb290UGFnZUZyb21VcmwoKSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBsb2NhdGlvbi5oYXNoLnNwbGl0KFwiP1wiKVswXTtcbiAgICAgICAgY29uc3Qgcm9vdCA9IGhhc2gucmVwbGFjZSgvXlxcLz8jXFwvLywgJycpO1xuXG4gICAgICAgIC8vIElmIHRoZSBVUkwgaXMgaW1wcmVjaXNlbHkgc2V0LCB3ZSByZXN0b3JlIGl0IHRvIHRoZSBsYW5kaW5nIHBhZ2VcbiAgICAgICAgaWYgKCFyb290IHx8ICFyb290LnRyaW0oKSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRSb290UGFnZShcIiMvTGFuZGluZ1wiKTtcblxuICAgICAgICB0aGlzLmxvYWRSb290UGFnZShsb2NhdGlvbi5oYXNoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRSb290UGFnZSh1cmw6IHN0cmluZywgZGF0YTogT2JqZWN0ID0ge30pIHtcblxuICAgICAgICBjb25zdCBbcGF0aCwgcXVlcnldID0gdXJsLnNwbGl0KCc/Jyk7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBwYXRoLnJlcGxhY2UoL15cXC8/I1xcLz8vLCAnJyk7XG4gICAgICAgIGNvbnN0IGNodW5rcyA9IGhhc2guc3BsaXQoJy8nKTtcblxuICAgICAgICAvLyBHZXQgcXVlcnkgcGFyYW1zIGFuZCBwYXNzIHRoZW0gYXMgQElucHV0IGFyZ3VtZW50cy5cbiAgICAgICAgY29uc3QgcGFyYW1zID0gcXVlcnk/LnNwbGl0KCcmJylcbiAgICAgICAgICAgIC5yZWR1Y2UoKHBhcnMsIHBhcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHBhci5zcGxpdChcIj1cIik7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcGFyc1trZXldID0gZGVjb2RlZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFycztcbiAgICAgICAgICAgIH0sIHt9KSB8fCB7fTtcblxuXG4gICAgICAgIGxvZyhgUm9vdCBwYWdlIG5hdmlnYXRlIHRvICcke2hhc2h9J2AsIHsgcGFyYW1zLCBjaHVua3MgfSk7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBoYXNoLnJlcGxhY2UoL15cXC8/I1xcLy8sICcnKTtcbiAgICAgICAgdGhpcy52aXJ0dWFsUGF0aCQubmV4dCh7XG4gICAgICAgICAgICByb290OiBoYXNoLFxuICAgICAgICAgICAgY2h1bmtzOiBjaHVua3MgYXMgYW55LFxuICAgICAgICAgICAgYXJnczogcGFyYW1zXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==