@universis/common
Version:
Universis - common directives and services
68 lines • 8.77 kB
JavaScript
import { Injectable } from '@angular/core';
import { DefaultUrlSerializer, NavigationEnd, NavigationStart, PRIMARY_OUTLET, Router } from '@angular/router';
import { BehaviorSubject } from 'rxjs';
import { filter, first, map } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "@angular/router";
/**
*
* Displays Loading Spinner
* @export
* @class LoadingService
*/
export class ReferrerRouteService {
constructor(router) {
this.router = router;
this.referrer$ = new BehaviorSubject(null);
this._referrer = null;
router.events
.pipe(filter(event => event instanceof NavigationEnd || event instanceof NavigationStart))
.subscribe((event) => {
if (event instanceof NavigationStart) {
if (router.routerState.snapshot && router.routerState.snapshot.url.length) {
this._referrer = router.routerState.snapshot.url;
}
else {
this._referrer = null;
}
}
else if (event instanceof NavigationEnd) {
if (this._referrer != null && this._referrer !== event.urlAfterRedirects) {
this.referrer$.next(this._referrer);
this._referrer = null;
}
}
});
}
get first$() {
return this.referrer$.pipe(first());
}
get routeParams$() {
return this.referrer$.pipe(first()).pipe(map((url) => {
if (url) {
const urlSerializer = new DefaultUrlSerializer();
const tree = urlSerializer.parse(url);
const queryParams = tree.queryParams;
tree.queryParams = {};
const fragment = tree.fragment;
tree.fragment = null;
tree.queryParams = {};
const g = tree.root.children[PRIMARY_OUTLET];
const commands = g.segments.map((segment) => segment.path);
commands.splice(0, 0, '/');
return {
commands,
queryParams,
fragment
};
}
return;
}));
}
}
ReferrerRouteService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ReferrerRouteService, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
ReferrerRouteService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ReferrerRouteService });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ReferrerRouteService, decorators: [{
type: Injectable
}], ctorParameters: function () { return [{ type: i1.Router }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJyZXItcm91dGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zaGFyZWQvc2VydmljZXMvcmVmZXJyZXItcm91dGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQW1CLE1BQU0saUJBQWlCLENBQUM7QUFDaEksT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBUXBEOzs7OztHQUtHO0FBRUgsTUFBTSxPQUFPLG9CQUFvQjtJQUsvQixZQUFvQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUgzQixjQUFTLEdBQUcsSUFBSSxlQUFlLENBQWdCLElBQUksQ0FBQyxDQUFDO1FBQ3BELGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBR3RDLE1BQU0sQ0FBQyxNQUFNO2FBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssWUFBWSxhQUFhLElBQUksS0FBSyxZQUFZLGVBQWUsQ0FBQyxDQUFDO2FBQ3pGLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2pCLElBQUksS0FBSyxZQUFZLGVBQWUsRUFBRTtnQkFDcEMsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFO29CQUN6RSxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztpQkFDbEQ7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7aUJBQ3ZCO2FBQ0Y7aUJBQU0sSUFBSSxLQUFLLFlBQVksYUFBYSxFQUFFO2dCQUN6QyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLGlCQUFpQixFQUFFO29CQUN4RSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2lCQUN2QjthQUNGO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFrQixFQUFFLEVBQUU7WUFDbEUsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsTUFBTSxhQUFhLEdBQUcsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO2dCQUNqRCxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN0QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUN0QixNQUFNLENBQUMsR0FBb0IsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQzlELE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNELFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDM0IsT0FBTztvQkFDTCxRQUFRO29CQUNSLFdBQVc7b0JBQ1gsUUFBUTtpQkFDYyxDQUFDO2FBQzFCO1lBQ0QsT0FBTztRQUNULENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDOztrSEFqRFUsb0JBQW9CO3NIQUFwQixvQkFBb0I7NEZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEZWZhdWx0VXJsU2VyaWFsaXplciwgTmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvblN0YXJ0LCBQUklNQVJZX09VVExFVCwgUm91dGVyLCBVcmxTZWdtZW50R3JvdXAgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIGZpcnN0LCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVmZXJyZXJSb3V0ZVBhcmFtcyB7XG4gIGNvbW1hbmRzOiBzdHJpbmdbXTtcbiAgcXVlcnlQYXJhbXM/OiBhbnk7XG4gIGZyYWdtZW50Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqXG4gKiBEaXNwbGF5cyBMb2FkaW5nIFNwaW5uZXJcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBMb2FkaW5nU2VydmljZVxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUmVmZXJyZXJSb3V0ZVNlcnZpY2Uge1xuXG4gIHB1YmxpYyByZWZlcnJlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIF9yZWZlcnJlcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge1xuICAgIHJvdXRlci5ldmVudHNcbiAgICAucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kIHx8IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSlcbiAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICAgICAgICBpZiAocm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90ICYmIHJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmwubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWZlcnJlciA9IHJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3JlZmVycmVyID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX3JlZmVycmVyICE9IG51bGwgJiYgdGhpcy5fcmVmZXJyZXIgIT09IGV2ZW50LnVybEFmdGVyUmVkaXJlY3RzKSB7XG4gICAgICAgICAgICB0aGlzLnJlZmVycmVyJC5uZXh0KHRoaXMuX3JlZmVycmVyKTtcbiAgICAgICAgICAgIHRoaXMuX3JlZmVycmVyID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmlyc3QkKCk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLnJlZmVycmVyJC5waXBlKGZpcnN0KCkpO1xuICB9XG5cbiAgcHVibGljIGdldCByb3V0ZVBhcmFtcyQoKTogT2JzZXJ2YWJsZTxSZWZlcnJlclJvdXRlUGFyYW1zIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMucmVmZXJyZXIkLnBpcGUoZmlyc3QoKSkucGlwZShtYXAoKHVybDogc3RyaW5nIHwgbnVsbCkgPT4ge1xuICAgICAgaWYgKHVybCkge1xuICAgICAgICBjb25zdCB1cmxTZXJpYWxpemVyID0gbmV3IERlZmF1bHRVcmxTZXJpYWxpemVyKCk7XG4gICAgICAgIGNvbnN0IHRyZWUgPSB1cmxTZXJpYWxpemVyLnBhcnNlKHVybCk7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdHJlZS5xdWVyeVBhcmFtcztcbiAgICAgICAgdHJlZS5xdWVyeVBhcmFtcyA9IHt9O1xuICAgICAgICBjb25zdCBmcmFnbWVudCA9IHRyZWUuZnJhZ21lbnQ7XG4gICAgICAgIHRyZWUuZnJhZ21lbnQgPSBudWxsO1xuICAgICAgICB0cmVlLnF1ZXJ5UGFyYW1zID0ge307XG4gICAgICAgIGNvbnN0IGc6IFVybFNlZ21lbnRHcm91cCA9IHRyZWUucm9vdC5jaGlsZHJlbltQUklNQVJZX09VVExFVF07XG4gICAgICAgIGNvbnN0IGNvbW1hbmRzID0gZy5zZWdtZW50cy5tYXAoKHNlZ21lbnQpID0+IHNlZ21lbnQucGF0aCk7XG4gICAgICAgIGNvbW1hbmRzLnNwbGljZSgwLCAwLCAnLycpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbW1hbmRzLFxuICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIGZyYWdtZW50XG4gICAgICAgIH0gYXMgUmVmZXJyZXJSb3V0ZVBhcmFtcztcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9KSk7XG4gIH1cblxufVxuIl19