apstorydnn-navigation-angular
Version:
[](https://apstory.visualstudio.com/ApStory/_build/latest?definitionId=25)
95 lines • 11.7 kB
JavaScript
import { Location } from '@angular/common';
import { Injectable, ComponentFactoryResolver } from '@angular/core';
import { Subject } from 'rxjs';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
export class ApstorydnnNavigationService {
constructor(componentFactory, location) {
this.componentFactory = componentFactory;
this.location = location;
this.navSubject = new Subject();
this.paramSubject = new Subject();
this.navStack = [];
this.params = {};
}
setUrl(url) {
location.href = url;
}
getUrlParam(paramName) {
const path = this.location.path(false);
const queryString = path.substr(path.indexOf('?') + 1);
const urlParameters = new URLSearchParams(queryString);
return urlParameters.get(paramName);
}
clearUrlParams() {
this.location.replaceState('/', '');
}
getNavigationEvent() {
return this.navSubject.asObservable();
}
getParameterEvent() {
return this.paramSubject.asObservable();
}
setComponent(type) {
if (this.componentRef) {
this.componentRef.destroy();
}
const factory = this.componentFactory.resolveComponentFactory(type);
this.componentRef = this.componentHolder.createComponent(factory);
}
setup(navHolder) {
this.componentHolder = navHolder;
}
setParam(key, value) {
this.params[key] = value;
this.paramSubject.next(key);
}
getParam(key) {
return this.params[key];
}
push(page) {
if (this.prevPage) {
this.navStack.push(this.prevPage);
}
this.setComponent(page);
this.prevPage = page;
this.navSubject.next(this.componentRef);
}
canPop() {
return this.navStack.length > 0;
}
popTo(screen) {
while (typeof (screen) != typeof (this.prevPage)) {
if (this.canPop()) {
this.prevPage = this.navStack.pop();
}
}
this.setComponent(this.prevPage);
this.navSubject.next(this.componentRef);
}
popBack(nr) {
for (let i = 0; i < nr; i++) {
if (this.canPop()) {
this.prevPage = this.navStack.pop();
}
}
this.setComponent(this.prevPage);
this.navSubject.next(this.componentRef);
}
pop() {
if (this.canPop()) {
this.prevPage = this.navStack.pop();
this.setComponent(this.prevPage);
this.navSubject.next(this.componentRef);
}
}
}
/** @nocollapse */ ApstorydnnNavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ApstorydnnNavigationService, deps: [{ token: i0.ComponentFactoryResolver }, { token: i1.Location }], target: i0.ɵɵFactoryTarget.Injectable });
/** @nocollapse */ ApstorydnnNavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ApstorydnnNavigationService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ApstorydnnNavigationService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i1.Location }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBzdG9yeWRubi1uYXZpZ2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hcHN0b3J5ZG5uLW5hdmlnYXRpb24vc3JjL2xpYi9hcHN0b3J5ZG5uLW5hdmlnYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBa0Msd0JBQXdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBSzNDLE1BQU0sT0FBTywyQkFBMkI7SUFVdEMsWUFBb0IsZ0JBQTBDLEVBQVUsUUFBa0I7UUFBdEUscUJBQWdCLEdBQWhCLGdCQUFnQixDQUEwQjtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVU7UUFUbEYsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFDaEMsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO1FBU3hDLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBVztRQUNoQixRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUN0QixDQUFDO0lBRUQsV0FBVyxDQUFDLFNBQWlCO1FBQzNCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN2RCxNQUFNLGFBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN2RCxP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QUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQzs7MklBdEdVLDJCQUEyQjsrSUFBM0IsMkJBQTJCLGNBRjFCLE1BQU07MkZBRVAsMkJBQTJCO2tCQUh2QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgVmlld0NvbnRhaW5lclJlZiwgQ29tcG9uZW50UmVmLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXBzdG9yeWRubk5hdmlnYXRpb25TZXJ2aWNlIHtcclxuICBwcml2YXRlIG5hdlN1YmplY3QgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgcHJpdmF0ZSBwYXJhbVN1YmplY3QgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcblxyXG4gIHByaXZhdGUgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xyXG4gIHByaXZhdGUgcHJldlBhZ2U6IGFueTtcclxuICBwcml2YXRlIG5hdlN0YWNrOiBhbnlbXTtcclxuICBwcml2YXRlIGNvbXBvbmVudEhvbGRlcjogVmlld0NvbnRhaW5lclJlZjtcclxuICBwcml2YXRlIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPGFueT47XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29tcG9uZW50RmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbikge1xyXG4gICAgdGhpcy5uYXZTdGFjayA9IFtdO1xyXG4gICAgdGhpcy5wYXJhbXMgPSB7fTtcclxuICB9XHJcblxyXG4gIHNldFVybCh1cmw6IHN0cmluZykge1xyXG4gICAgbG9jYXRpb24uaHJlZiA9IHVybDtcclxuICB9XHJcblxyXG4gIGdldFVybFBhcmFtKHBhcmFtTmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBwYXRoID0gdGhpcy5sb2NhdGlvbi5wYXRoKGZhbHNlKTtcclxuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcGF0aC5zdWJzdHIocGF0aC5pbmRleE9mKCc/JykgKyAxKTtcclxuICAgIGNvbnN0IHVybFBhcmFtZXRlcnMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuICAgIHJldHVybiB1cmxQYXJhbWV0ZXJzLmdldChwYXJhbU5hbWUpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJVcmxQYXJhbXMoKSB7XHJcbiAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSgnLycsICcnKTtcclxuICB9XHJcblxyXG4gIGdldE5hdmlnYXRpb25FdmVudCgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMubmF2U3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIGdldFBhcmFtZXRlckV2ZW50KCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5wYXJhbVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENvbXBvbmVudCh0eXBlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZikge1xyXG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0eXBlKTtcclxuICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy5jb21wb25lbnRIb2xkZXIuY3JlYXRlQ29tcG9uZW50KGZhY3RvcnkpO1xyXG4gIH1cclxuXHJcbiAgc2V0dXAobmF2SG9sZGVyOiBWaWV3Q29udGFpbmVyUmVmKSB7XHJcbiAgICB0aGlzLmNvbXBvbmVudEhvbGRlciA9IG5hdkhvbGRlcjtcclxuICB9XHJcblxyXG4gIHNldFBhcmFtKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLnBhcmFtc1trZXldID0gdmFsdWU7XHJcbiAgICB0aGlzLnBhcmFtU3ViamVjdC5uZXh0KGtleSk7XHJcbiAgfVxyXG5cclxuICBnZXRQYXJhbShrZXk6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMucGFyYW1zW2tleV07XHJcbiAgfVxyXG5cclxuICBwdXNoKHBhZ2U6IGFueSkge1xyXG4gICAgaWYgKHRoaXMucHJldlBhZ2UpIHtcclxuICAgICAgdGhpcy5uYXZTdGFjay5wdXNoKHRoaXMucHJldlBhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0Q29tcG9uZW50KHBhZ2UpO1xyXG4gICAgdGhpcy5wcmV2UGFnZSA9IHBhZ2U7XHJcbiAgICB0aGlzLm5hdlN1YmplY3QubmV4dCh0aGlzLmNvbXBvbmVudFJlZik7XHJcbiAgfVxyXG5cclxuICBjYW5Qb3AoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5uYXZTdGFjay5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgcG9wVG8oc2NyZWVuOiBhbnkpIHtcclxuICAgIHdoaWxlICh0eXBlb2YgKHNjcmVlbikgIT0gdHlwZW9mICh0aGlzLnByZXZQYWdlKSkge1xyXG4gICAgICBpZiAodGhpcy5jYW5Qb3AoKSkge1xyXG4gICAgICAgIHRoaXMucHJldlBhZ2UgPSB0aGlzLm5hdlN0YWNrLnBvcCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRDb21wb25lbnQodGhpcy5wcmV2UGFnZSk7XHJcbiAgICB0aGlzLm5hdlN1YmplY3QubmV4dCh0aGlzLmNvbXBvbmVudFJlZik7XHJcbiAgfVxyXG5cclxuICBwb3BCYWNrKG5yOiBudW1iZXIpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnI7IGkrKykge1xyXG4gICAgICBpZiAodGhpcy5jYW5Qb3AoKSkge1xyXG4gICAgICAgIHRoaXMucHJldlBhZ2UgPSB0aGlzLm5hdlN0YWNrLnBvcCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRDb21wb25lbnQodGhpcy5wcmV2UGFnZSk7XHJcbiAgICB0aGlzLm5hdlN1YmplY3QubmV4dCh0aGlzLmNvbXBvbmVudFJlZik7XHJcbiAgfVxyXG5cclxuICBwb3AoKSB7XHJcbiAgICBpZiAodGhpcy5jYW5Qb3AoKSkge1xyXG4gICAgICB0aGlzLnByZXZQYWdlID0gdGhpcy5uYXZTdGFjay5wb3AoKTtcclxuICAgICAgdGhpcy5zZXRDb21wb25lbnQodGhpcy5wcmV2UGFnZSk7XHJcbiAgICAgIHRoaXMubmF2U3ViamVjdC5uZXh0KHRoaXMuY29tcG9uZW50UmVmKTtcclxuICAgIH1cclxuICB9XHJcbn0iXX0=