UNPKG

@universis/common

Version:

Universis - common directives and services

67 lines (66 loc) 8.06 kB
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'; /** * * Displays Loading Spinner * @export * @class LoadingService */ export class ReferrerRouteService { constructor(router) { this.router = router; this.referrer$ = new BehaviorSubject(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 }; } })); } } ReferrerRouteService.decorators = [ { type: Injectable } ]; /** @nocollapse */ ReferrerRouteService.ctorParameters = () => [ { type: Router } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJyZXItcm91dGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1bml2ZXJzaXMvY29tbW9uLyIsInNvdXJjZXMiOlsic2hhcmVkL3NlcnZpY2VzL3JlZmVycmVyLXJvdXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFtQixNQUFNLGlCQUFpQixDQUFDO0FBQ2hJLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFRcEQ7Ozs7O0dBS0c7QUFFSCxNQUFNO0lBS0osWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFIM0IsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFTLElBQUksQ0FBQyxDQUFDO1FBSW5ELE1BQU0sQ0FBQyxNQUFNO2FBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssWUFBWSxhQUFhLElBQUksS0FBSyxZQUFZLGVBQWUsQ0FBQyxDQUFDO2FBQ3pGLFNBQVMsQ0FBQyxDQUFDLEtBQXNDLEVBQUUsRUFBRTtZQUNsRCxJQUFJLEtBQUssWUFBWSxlQUFlLEVBQUU7Z0JBQ3BDLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRTtvQkFDekUsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7aUJBQ2xEO3FCQUFNO29CQUNMLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2lCQUN2QjthQUNGO2lCQUFNLElBQUksS0FBSyxZQUFZLGFBQWEsRUFBRTtnQkFDekMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtvQkFDeEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUNwQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztpQkFDdkI7YUFDRjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBVyxFQUFFLEVBQUU7WUFDM0QsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsTUFBTSxhQUFhLEdBQUcsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO2dCQUNqRCxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN0QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUN0QixNQUFNLENBQUMsR0FBb0IsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQzlELE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNELFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDM0IsT0FBTztvQkFDTCxRQUFRO29CQUNSLFdBQVc7b0JBQ1gsUUFBUTtpQkFDYyxDQUFDO2FBQzFCO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7OztZQWpERixVQUFVOzs7O1lBaEJvRSxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERlZmF1bHRVcmxTZXJpYWxpemVyLCBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uU3RhcnQsIFBSSU1BUllfT1VUTEVULCBSb3V0ZXIsIFVybFNlZ21lbnRHcm91cCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgZmlyc3QsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGludGVyZmFjZSBSZWZlcnJlclJvdXRlUGFyYW1zIHtcbiAgY29tbWFuZHM6IHN0cmluZ1tdO1xuICBxdWVyeVBhcmFtcz86IGFueTtcbiAgZnJhZ21lbnQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICpcbiAqIERpc3BsYXlzIExvYWRpbmcgU3Bpbm5lclxuICogQGV4cG9ydFxuICogQGNsYXNzIExvYWRpbmdTZXJ2aWNlXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZWZlcnJlclJvdXRlU2VydmljZSB7XG5cbiAgcHVibGljIHJlZmVycmVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihudWxsKTtcbiAgcHJpdmF0ZSBfcmVmZXJyZXI6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyKSB7XG4gICAgcm91dGVyLmV2ZW50c1xuICAgIC5waXBlKGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgfHwgZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpKVxuICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQgfCBOYXZpZ2F0aW9uRW5kKSA9PiB7XG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkge1xuICAgICAgICAgIGlmIChyb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QgJiYgcm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnVybC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlZmVycmVyID0gcm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnVybDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcmVmZXJyZXIgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgICBpZiAodGhpcy5fcmVmZXJyZXIgIT0gbnVsbCAmJiB0aGlzLl9yZWZlcnJlciAhPT0gZXZlbnQudXJsQWZ0ZXJSZWRpcmVjdHMpIHtcbiAgICAgICAgICAgIHRoaXMucmVmZXJyZXIkLm5leHQodGhpcy5fcmVmZXJyZXIpO1xuICAgICAgICAgICAgdGhpcy5fcmVmZXJyZXIgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBmaXJzdCQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5yZWZlcnJlciQucGlwZShmaXJzdCgpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcm91dGVQYXJhbXMkKCk6IE9ic2VydmFibGU8UmVmZXJyZXJSb3V0ZVBhcmFtcz4ge1xuICAgIHJldHVybiB0aGlzLnJlZmVycmVyJC5waXBlKGZpcnN0KCkpLnBpcGUobWFwKCh1cmw6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHVybCkge1xuICAgICAgICBjb25zdCB1cmxTZXJpYWxpemVyID0gbmV3IERlZmF1bHRVcmxTZXJpYWxpemVyKCk7XG4gICAgICAgIGNvbnN0IHRyZWUgPSB1cmxTZXJpYWxpemVyLnBhcnNlKHVybCk7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdHJlZS5xdWVyeVBhcmFtcztcbiAgICAgICAgdHJlZS5xdWVyeVBhcmFtcyA9IHt9O1xuICAgICAgICBjb25zdCBmcmFnbWVudCA9IHRyZWUuZnJhZ21lbnQ7XG4gICAgICAgIHRyZWUuZnJhZ21lbnQgPSBudWxsO1xuICAgICAgICB0cmVlLnF1ZXJ5UGFyYW1zID0ge307XG4gICAgICAgIGNvbnN0IGc6IFVybFNlZ21lbnRHcm91cCA9IHRyZWUucm9vdC5jaGlsZHJlbltQUklNQVJZX09VVExFVF07XG4gICAgICAgIGNvbnN0IGNvbW1hbmRzID0gZy5zZWdtZW50cy5tYXAoKHNlZ21lbnQpID0+IHNlZ21lbnQucGF0aCk7XG4gICAgICAgIGNvbW1hbmRzLnNwbGljZSgwLCAwLCAnLycpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbW1hbmRzLFxuICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIGZyYWdtZW50XG4gICAgICAgIH0gYXMgUmVmZXJyZXJSb3V0ZVBhcmFtcztcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxufVxuIl19