ngx-bit
Version:
A flexible NG-ZORRO helper library
156 lines • 17.1 kB
JavaScript
import { Injectable } from '@angular/core';
import { NavigationEnd, PRIMARY_OUTLET, Router } from '@angular/router';
import { Subject } from 'rxjs';
import { filter, map } from 'rxjs/operators';
import { StorageMap } from '@ngx-pwa/local-storage';
import * as i0 from "@angular/core";
import * as i1 from "@angular/router";
import * as i2 from "@ngx-pwa/local-storage/public-api";
export class BitRouterService {
constructor(router, storage) {
this.router = router;
this.storage = storage;
/**
* 被激活的导航
* Activated navigation
*/
this.navActive = [];
/**
* 允许返回
* Allow back
*/
this.back = false;
/**
* Title
*/
this.title = null;
/**
* SubTitle
*/
this.subTitle = null;
/**
* default breadcrumb Root
*/
this.breadcrumbRoot = 0;
/**
* Header actions
*/
this.actions = [];
/**
* Status
*/
this.changed = new Subject();
}
/**
* 初始化平行路由
* Initialize parallel routing
*/
setup() {
if (this.events$) {
return;
}
if (this.router.url !== '/') {
this.match(this.router, this.router.url);
}
this.events$ = this.router.events.pipe(filter(e => e instanceof NavigationEnd)).subscribe((event) => {
if (event.url !== '/') {
this.match(this.router, event.url);
}
else {
this.clearBreadcrumb();
}
});
}
/**
* 设置平行路由数据,同步导航与页头
* Set parallel routing data, synchronize navigation and page header
*/
setData(data) {
this.storage.set('resource', data.resource).subscribe(_ => _);
this.storage.set('router', data.router).subscribe(_ => _);
}
/**
* 取消平行路由逻辑
* Cancel parallel routing logic
*/
uninstall() {
if (this.events$) {
this.events$.unsubscribe();
}
}
match(router, url) {
const primary = router.parseUrl(url).root.children[PRIMARY_OUTLET];
const segments = primary.segments;
this.storage.get('router').pipe(map((data) => {
if (data) {
for (let i = 0; i < segments.length; i++) {
const key = segments.slice(0, i + 1).map(v => v.path).join('/');
if (data.hasOwnProperty(key)) {
return key;
}
}
}
return null;
})).subscribe(maybeKey => {
if (!maybeKey) {
router.navigate(['/empty']);
this.clearBreadcrumb();
}
else {
this.dynamicBreadcrumb(maybeKey);
}
});
}
dynamicBreadcrumb(key) {
this.storage.get('resource').subscribe((data) => {
const queue = [];
const breadcrumb = [];
const navActive = [];
if (data.hasOwnProperty(key)) {
const node = data[key];
const name = JSON.parse(node.name);
this.title = name;
navActive.unshift(node.key);
breadcrumb.unshift({
name,
key: node.key,
router: node.router
});
if (node.parent !== this.breadcrumbRoot) {
queue.push(node.parent);
}
}
while (queue.length !== this.breadcrumbRoot) {
const parentKey = queue.pop();
if (data.hasOwnProperty(parentKey)) {
const next = data[parentKey];
navActive.unshift(next.key);
breadcrumb.unshift({
name: JSON.parse(next.name),
key: next.key,
router: next.router
});
if (next.parent !== this.breadcrumbRoot) {
queue.push(next.parent);
}
}
}
this.navActive = navActive;
this.breadcrumb = breadcrumb;
});
}
clearBreadcrumb() {
this.navActive = [];
this.breadcrumb = [];
this.title = null;
}
}
BitRouterService.ɵprov = i0.ɵɵdefineInjectable({ factory: function BitRouterService_Factory() { return new BitRouterService(i0.ɵɵinject(i1.Router), i0.ɵɵinject(i2.StorageMap)); }, token: BitRouterService, providedIn: "root" });
BitRouterService.decorators = [
{ type: Injectable, args: [{ providedIn: 'root' },] }
];
BitRouterService.ctorParameters = () => [
{ type: Router },
{ type: StorageMap }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0LXJvdXRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWJpdC9yb3V0ZXIvYml0LXJvdXRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7QUFHcEQsTUFBTSxPQUFPLGdCQUFnQjtJQXlEM0IsWUFDVSxNQUFjLEVBQ2QsT0FBbUI7UUFEbkIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFlBQU8sR0FBUCxPQUFPLENBQVk7UUExRDdCOzs7V0FHRztRQUNILGNBQVMsR0FBVSxFQUFFLENBQUM7UUFDdEI7OztXQUdHO1FBQ0gsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUNiOztXQUVHO1FBQ0gsVUFBSyxHQUFRLElBQUksQ0FBQztRQUNsQjs7V0FFRztRQUNILGFBQVEsR0FBUSxJQUFJLENBQUM7UUFDckI7O1dBRUc7UUFDSCxtQkFBYyxHQUFRLENBQUMsQ0FBQztRQWF4Qjs7V0FFRztRQUNILFlBQU8sR0FBdUIsRUFBRSxDQUFDO1FBU2pDOztXQUVHO1FBQ0gsWUFBTyxHQUFpQixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBV3RDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLO1FBQ0gsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLE9BQU87U0FDUjtRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssR0FBRyxF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d0JBQzNCLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRzt3QkFDYixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07cUJBQ3BCLENBQUMsQ0FBQztvQkFDSCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLGNBQWMsRUFBRTt3QkFDdkMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQ3pCO2lCQUNGO2FBQ0Y7WUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ3BCLENBQUM7Ozs7WUE5S0YsVUFBVSxTQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7O1lBTk0sTUFBTTtZQUlyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUFJJTUFSWV9PVVRMRVQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQnJlYWRjcnVtYk9wdGlvbiwgUm91dGVyRGF0YSB9IGZyb20gJy4vdHlwZXMnO1xyXG5pbXBvcnQgeyBTdG9yYWdlTWFwIH0gZnJvbSAnQG5neC1wd2EvbG9jYWwtc3RvcmFnZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgQml0Um91dGVyU2VydmljZSB7XHJcbiAgLyoqXHJcbiAgICog6KKr5r+A5rS755qE5a+86IiqXHJcbiAgICogQWN0aXZhdGVkIG5hdmlnYXRpb25cclxuICAgKi9cclxuICBuYXZBY3RpdmU6IGFueVtdID0gW107XHJcbiAgLyoqXHJcbiAgICog5YWB6K646L+U5ZueXHJcbiAgICogQWxsb3cgYmFja1xyXG4gICAqL1xyXG4gIGJhY2sgPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBUaXRsZVxyXG4gICAqL1xyXG4gIHRpdGxlOiBhbnkgPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIFN1YlRpdGxlXHJcbiAgICovXHJcbiAgc3ViVGl0bGU6IGFueSA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogZGVmYXVsdCBicmVhZGNydW1iIFJvb3RcclxuICAgKi9cclxuICBicmVhZGNydW1iUm9vdDogYW55ID0gMDtcclxuICAvKipcclxuICAgKiBCcmVhZGNydW1iIGFycmF5XHJcbiAgICovXHJcbiAgYnJlYWRjcnVtYjogQnJlYWRjcnVtYk9wdGlvbltdO1xyXG4gIC8qKlxyXG4gICAqIEhlYWRlciBiYW5uZXJcclxuICAgKi9cclxuICBiYW5uZXI6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgLyoqXHJcbiAgICogSGVhZGVyIGJhbm5lclxyXG4gICAqL1xyXG4gIHRhZ3M6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgLyoqXHJcbiAgICogSGVhZGVyIGFjdGlvbnNcclxuICAgKi9cclxuICBhY3Rpb25zOiBUZW1wbGF0ZVJlZjxhbnk+W10gPSBbXTtcclxuICAvKipcclxuICAgKiBIZWFkZXIgYmFubmVyXHJcbiAgICovXHJcbiAgY29udGVudDogVGVtcGxhdGVSZWY8YW55PjtcclxuICAvKipcclxuICAgKiBIZWFkZXIgYmFubmVyXHJcbiAgICovXHJcbiAgZm9vdGVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIC8qKlxyXG4gICAqIFN0YXR1c1xyXG4gICAqL1xyXG4gIGNoYW5nZWQ6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEFuZ3VsYXIgcm91dGVkIGV2ZW50IHN1YnNjcmlwdGlvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgZXZlbnRzJDogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHN0b3JhZ2U6IFN0b3JhZ2VNYXBcclxuICApIHtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOWIneWni+WMluW5s+ihjOi3r+eUsVxyXG4gICAqIEluaXRpYWxpemUgcGFyYWxsZWwgcm91dGluZ1xyXG4gICAqL1xyXG4gIHNldHVwKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZXZlbnRzJCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5yb3V0ZXIudXJsICE9PSAnLycpIHtcclxuICAgICAgdGhpcy5tYXRjaCh0aGlzLnJvdXRlciwgdGhpcy5yb3V0ZXIudXJsKTtcclxuICAgIH1cclxuICAgIHRoaXMuZXZlbnRzJCA9IHRoaXMucm91dGVyLmV2ZW50cy5waXBlKFxyXG4gICAgICBmaWx0ZXIoZSA9PiBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZClcclxuICAgICkuc3Vic2NyaWJlKChldmVudDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChldmVudC51cmwgIT09ICcvJykge1xyXG4gICAgICAgIHRoaXMubWF0Y2godGhpcy5yb3V0ZXIsIGV2ZW50LnVybCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jbGVhckJyZWFkY3J1bWIoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDorr7nva7lubPooYzot6/nlLHmlbDmja7vvIzlkIzmraXlr7zoiKrkuI7pobXlpLRcclxuICAgKiBTZXQgcGFyYWxsZWwgcm91dGluZyBkYXRhLCBzeW5jaHJvbml6ZSBuYXZpZ2F0aW9uIGFuZCBwYWdlIGhlYWRlclxyXG4gICAqL1xyXG4gIHNldERhdGEoZGF0YTogUm91dGVyRGF0YSk6IHZvaWQge1xyXG4gICAgdGhpcy5zdG9yYWdlLnNldCgncmVzb3VyY2UnLCBkYXRhLnJlc291cmNlKS5zdWJzY3JpYmUoXyA9PiBfKTtcclxuICAgIHRoaXMuc3RvcmFnZS5zZXQoJ3JvdXRlcicsIGRhdGEucm91dGVyKS5zdWJzY3JpYmUoXyA9PiBfKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOWPlua2iOW5s+ihjOi3r+eUsemAu+i+kVxyXG4gICAqIENhbmNlbCBwYXJhbGxlbCByb3V0aW5nIGxvZ2ljXHJcbiAgICovXHJcbiAgdW5pbnN0YWxsKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZXZlbnRzJCkge1xyXG4gICAgICB0aGlzLmV2ZW50cyQudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWF0Y2gocm91dGVyOiBSb3V0ZXIsIHVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBwcmltYXJ5ID0gcm91dGVyLnBhcnNlVXJsKHVybCkucm9vdC5jaGlsZHJlbltQUklNQVJZX09VVExFVF07XHJcbiAgICBjb25zdCBzZWdtZW50cyA9IHByaW1hcnkuc2VnbWVudHM7XHJcbiAgICB0aGlzLnN0b3JhZ2UuZ2V0KCdyb3V0ZXInKS5waXBlKFxyXG4gICAgICBtYXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHNlZ21lbnRzLnNsaWNlKDAsIGkgKyAxKS5tYXAodiA9PiB2LnBhdGgpLmpvaW4oJy8nKTtcclxuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBrZXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZShtYXliZUtleSA9PiB7XHJcbiAgICAgIGlmICghbWF5YmVLZXkpIHtcclxuICAgICAgICByb3V0ZXIubmF2aWdhdGUoWycvZW1wdHknXSk7XHJcbiAgICAgICAgdGhpcy5jbGVhckJyZWFkY3J1bWIoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmR5bmFtaWNCcmVhZGNydW1iKG1heWJlS2V5KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGR5bmFtaWNCcmVhZGNydW1iKGtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnN0b3JhZ2UuZ2V0KCdyZXNvdXJjZScpLnN1YnNjcmliZSgoZGF0YTogb2JqZWN0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHF1ZXVlID0gW107XHJcbiAgICAgIGNvbnN0IGJyZWFkY3J1bWI6IEJyZWFkY3J1bWJPcHRpb25bXSA9IFtdO1xyXG4gICAgICBjb25zdCBuYXZBY3RpdmUgPSBbXTtcclxuICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSBkYXRhW2tleV07XHJcbiAgICAgICAgY29uc3QgbmFtZSA9IEpTT04ucGFyc2Uobm9kZS5uYW1lKTtcclxuICAgICAgICB0aGlzLnRpdGxlID0gbmFtZTtcclxuICAgICAgICBuYXZBY3RpdmUudW5zaGlmdChub2RlLmtleSk7XHJcbiAgICAgICAgYnJlYWRjcnVtYi51bnNoaWZ0KHtcclxuICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICBrZXk6IG5vZGUua2V5LFxyXG4gICAgICAgICAgcm91dGVyOiBub2RlLnJvdXRlclxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChub2RlLnBhcmVudCAhPT0gdGhpcy5icmVhZGNydW1iUm9vdCkge1xyXG4gICAgICAgICAgcXVldWUucHVzaChub2RlLnBhcmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggIT09IHRoaXMuYnJlYWRjcnVtYlJvb3QpIHtcclxuICAgICAgICBjb25zdCBwYXJlbnRLZXkgPSBxdWV1ZS5wb3AoKTtcclxuXHJcbiAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocGFyZW50S2V5KSkge1xyXG4gICAgICAgICAgY29uc3QgbmV4dCA9IGRhdGFbcGFyZW50S2V5XTtcclxuICAgICAgICAgIG5hdkFjdGl2ZS51bnNoaWZ0KG5leHQua2V5KTtcclxuICAgICAgICAgIGJyZWFkY3J1bWIudW5zaGlmdCh7XHJcbiAgICAgICAgICAgIG5hbWU6IEpTT04ucGFyc2UobmV4dC5uYW1lKSxcclxuICAgICAgICAgICAga2V5OiBuZXh0LmtleSxcclxuICAgICAgICAgICAgcm91dGVyOiBuZXh0LnJvdXRlclxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZiAobmV4dC5wYXJlbnQgIT09IHRoaXMuYnJlYWRjcnVtYlJvb3QpIHtcclxuICAgICAgICAgICAgcXVldWUucHVzaChuZXh0LnBhcmVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubmF2QWN0aXZlID0gbmF2QWN0aXZlO1xyXG4gICAgICB0aGlzLmJyZWFkY3J1bWIgPSBicmVhZGNydW1iO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyQnJlYWRjcnVtYigpOiB2b2lkIHtcclxuICAgIHRoaXMubmF2QWN0aXZlID0gW107XHJcbiAgICB0aGlzLmJyZWFkY3J1bWIgPSBbXTtcclxuICAgIHRoaXMudGl0bGUgPSBudWxsO1xyXG4gIH1cclxufVxyXG4iXX0=