@dotglitch/ngx-common
Version:
Angular components and utilities that are commonly used.
52 lines • 7.55 kB
JavaScript
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==