UNPKG

@datorama/akita-ng-router-store

Version:

Bindings to connect the Angular Router with Akita store

125 lines 14.3 kB
import { __decorate, __metadata } from "tslib"; import { Injectable } from '@angular/core'; import { GuardsCheckEnd, NavigationCancel, NavigationEnd, NavigationError, ResolveEnd, Router, RoutesRecognized } from '@angular/router'; import { RouterStore } from './router.store'; import { RouterQuery } from './router.query'; import { action, setSkipAction } from '@datorama/akita'; import * as i0 from "@angular/core"; import * as i1 from "./router.store"; import * as i2 from "./router.query"; import * as i3 from "@angular/router"; export class RouterService { constructor(routerStore, routerQuery, router) { this.routerStore = routerStore; this.routerQuery = routerQuery; this.router = router; this.dispatchTriggeredByRouter = false; this.navigationTriggeredByDispatch = false; } dispatchRouterCancel(event) { this.update({ navigationId: event.id }); this.routerQuery.__navigationCancel.next(event); } dispatchRouterError(event) { this.update({ navigationId: event.id }); this.routerQuery.__navigationError.next(event); } dispatchRouterSuccess() { this.update(this.lastRouterState); } init() { this.setUpStoreListener(); this.setUpStateRollbackEvents(); } update(routerState) { this.dispatchTriggeredByRouter = true; this.routerStore.update((state) => { return { ...state, ...routerState, }; }); this.dispatchTriggeredByRouter = false; this.navigationTriggeredByDispatch = false; } setUpStoreListener() { this.routerQuery .select((state) => state) .subscribe((s) => { this.lastRouterState = s; this.navigateIfNeeded(); }); } navigateIfNeeded() { if (!this.lastRouterState || !this.lastRouterState.state || this.dispatchTriggeredByRouter) { return; } if (this.router.url !== this.lastRouterState.state.url) { this.navigationTriggeredByDispatch = true; setSkipAction(); this.router.navigateByUrl(this.lastRouterState.state.url); } } setUpStateRollbackEvents() { this.router.events.subscribe((e) => { if (e instanceof RoutesRecognized || e instanceof GuardsCheckEnd || e instanceof ResolveEnd) { this.lastRouterState = this.serializeRoute(e); } else if (e instanceof NavigationCancel) { this.dispatchRouterCancel(e); } else if (e instanceof NavigationError) { this.dispatchRouterError(e); } else if (e instanceof NavigationEnd && !this.navigationTriggeredByDispatch) { this.dispatchRouterSuccess(); } }); } serializeRoute(navigationEvent) { let state = navigationEvent.state.root; while (state.firstChild) { state = state.firstChild; } const { params, data, queryParams, fragment } = state; return { navigationId: navigationEvent.id, state: { url: navigationEvent.url, urlAfterRedirects: navigationEvent.urlAfterRedirects, params, queryParams, fragment, data, navigationExtras: this.router.getCurrentNavigation().extras ? this.router.getCurrentNavigation().extras.state : {}, }, }; } } RouterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: RouterService, deps: [{ token: i1.RouterStore }, { token: i2.RouterQuery }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable }); RouterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: RouterService, providedIn: 'root' }); __decorate([ action('Navigation Cancelled'), __metadata("design:type", Function), __metadata("design:paramtypes", [NavigationCancel]), __metadata("design:returntype", void 0) ], RouterService.prototype, "dispatchRouterCancel", null); __decorate([ action('Navigation Error'), __metadata("design:type", Function), __metadata("design:paramtypes", [NavigationError]), __metadata("design:returntype", void 0) ], RouterService.prototype, "dispatchRouterError", null); __decorate([ action('Navigation Succeeded'), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], RouterService.prototype, "dispatchRouterSuccess", null); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: RouterService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: function () { return [{ type: i1.RouterStore }, { type: i2.RouterQuery }, { type: i3.Router }]; }, propDecorators: { dispatchRouterCancel: [], dispatchRouterError: [], dispatchRouterSuccess: [] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1yb3V0ZXItc3RvcmUvc3JjL2xpYi9yb3V0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQTBCLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqSyxPQUFPLEVBQWUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBS3hELE1BQU0sT0FBTyxhQUFhO0lBS3hCLFlBQW9CLFdBQXdCLEVBQVUsV0FBd0IsRUFBVSxNQUFjO1FBQWxGLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBSjlGLDhCQUF5QixHQUFHLEtBQUssQ0FBQztRQUNsQyxrQ0FBNkIsR0FBRyxLQUFLLENBQUM7SUFHMkQsQ0FBQztJQUcxRyxvQkFBb0IsQ0FBQyxLQUF1QjtRQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFHRCxtQkFBbUIsQ0FBQyxLQUFzQjtRQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxF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QUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUV0RCxPQUFPO1lBQ0wsWUFBWSxFQUFFLGVBQWUsQ0FBQyxFQUFFO1lBQ2hDLEtBQUssRUFBRTtnQkFDTCxHQUFHLEVBQUUsZUFBZSxDQUFDLEdBQUc7Z0JBQ3hCLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxpQkFBaUI7Z0JBQ3BELE1BQU07Z0JBQ04sV0FBVztnQkFDWCxRQUFRO2dCQUNSLElBQUk7Z0JBQ0osZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7YUFDbkg7U0FDRixDQUFDO0lBQ0osQ0FBQzs7MEdBL0ZVLGFBQWE7OEdBQWIsYUFBYSxjQUZaLE1BQU07QUFTbEI7SUFBQyxNQUFNLENBQUMsc0JBQXNCLENBQUM7O3FDQUNILGdCQUFnQjs7eURBRzNDO0FBRUQ7SUFBQyxNQUFNLENBQUMsa0JBQWtCLENBQUM7O3FDQUNBLGVBQWU7O3dEQUd6QztBQUVEO0lBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDOzs7OzBEQUc5QjsyRkF0QlUsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7aUpBU0Msb0JBQW9CLE1BTXBCLG1CQUFtQixNQU1uQixxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBHdWFyZHNDaGVja0VuZCwgTmF2aWdhdGlvbkNhbmNlbCwgTmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvbkVycm9yLCBSZXNvbHZlRW5kLCBSb3V0ZXIsIFJvdXRlc1JlY29nbml6ZWQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUm91dGVyU3RhdGUsIFJvdXRlclN0b3JlIH0gZnJvbSAnLi9yb3V0ZXIuc3RvcmUnO1xuaW1wb3J0IHsgUm91dGVyUXVlcnkgfSBmcm9tICcuL3JvdXRlci5xdWVyeSc7XG5pbXBvcnQgeyBhY3Rpb24sIHNldFNraXBBY3Rpb24gfSBmcm9tICdAZGF0b3JhbWEvYWtpdGEnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUm91dGVyU2VydmljZSB7XG4gIHByaXZhdGUgZGlzcGF0Y2hUcmlnZ2VyZWRCeVJvdXRlciA9IGZhbHNlO1xuICBwcml2YXRlIG5hdmlnYXRpb25UcmlnZ2VyZWRCeURpc3BhdGNoID0gZmFsc2U7XG4gIHByaXZhdGUgbGFzdFJvdXRlclN0YXRlOiBSb3V0ZXJTdGF0ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlclN0b3JlOiBSb3V0ZXJTdG9yZSwgcHJpdmF0ZSByb3V0ZXJRdWVyeTogUm91dGVyUXVlcnksIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHt9XG5cbiAgQGFjdGlvbignTmF2aWdhdGlvbiBDYW5jZWxsZWQnKVxuICBkaXNwYXRjaFJvdXRlckNhbmNlbChldmVudDogTmF2aWdhdGlvbkNhbmNlbCkge1xuICAgIHRoaXMudXBkYXRlKHsgbmF2aWdhdGlvbklkOiBldmVudC5pZCB9KTtcbiAgICB0aGlzLnJvdXRlclF1ZXJ5Ll9fbmF2aWdhdGlvbkNhbmNlbC5uZXh0KGV2ZW50KTtcbiAgfVxuXG4gIEBhY3Rpb24oJ05hdmlnYXRpb24gRXJyb3InKVxuICBkaXNwYXRjaFJvdXRlckVycm9yKGV2ZW50OiBOYXZpZ2F0aW9uRXJyb3IpIHtcbiAgICB0aGlzLnVwZGF0ZSh7IG5hdmlnYXRpb25JZDogZXZlbnQuaWQgfSk7XG4gICAgdGhpcy5yb3V0ZXJRdWVyeS5fX25hdmlnYXRpb25FcnJvci5uZXh0KGV2ZW50KTtcbiAgfVxuXG4gIEBhY3Rpb24oJ05hdmlnYXRpb24gU3VjY2VlZGVkJylcbiAgZGlzcGF0Y2hSb3V0ZXJTdWNjZXNzKCkge1xuICAgIHRoaXMudXBkYXRlKHRoaXMubGFzdFJvdXRlclN0YXRlKTtcbiAgfVxuXG4gIGluaXQoKSB7XG4gICAgdGhpcy5zZXRVcFN0b3JlTGlzdGVuZXIoKTtcbiAgICB0aGlzLnNldFVwU3RhdGVSb2xsYmFja0V2ZW50cygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGUocm91dGVyU3RhdGU6IFBhcnRpYWw8Um91dGVyU3RhdGU+KSB7XG4gICAgdGhpcy5kaXNwYXRjaFRyaWdnZXJlZEJ5Um91dGVyID0gdHJ1ZTtcbiAgICB0aGlzLnJvdXRlclN0b3JlLnVwZGF0ZSgoc3RhdGUpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAuLi5yb3V0ZXJTdGF0ZSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5kaXNwYXRjaFRyaWdnZXJlZEJ5Um91dGVyID0gZmFsc2U7XG4gICAgdGhpcy5uYXZpZ2F0aW9uVHJpZ2dlcmVkQnlEaXNwYXRjaCA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRVcFN0b3JlTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZXJRdWVyeVxuICAgICAgLnNlbGVjdCgoc3RhdGUpID0+IHN0YXRlKVxuICAgICAgLnN1YnNjcmliZSgocykgPT4ge1xuICAgICAgICB0aGlzLmxhc3RSb3V0ZXJTdGF0ZSA9IHM7XG4gICAgICAgIHRoaXMubmF2aWdhdGVJZk5lZWRlZCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG5hdmlnYXRlSWZOZWVkZWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmxhc3RSb3V0ZXJTdGF0ZSB8fCAhdGhpcy5sYXN0Um91dGVyU3RhdGUuc3RhdGUgfHwgdGhpcy5kaXNwYXRjaFRyaWdnZXJlZEJ5Um91dGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucm91dGVyLnVybCAhPT0gdGhpcy5sYXN0Um91dGVyU3RhdGUuc3RhdGUudXJsKSB7XG4gICAgICB0aGlzLm5hdmlnYXRpb25UcmlnZ2VyZWRCeURpc3BhdGNoID0gdHJ1ZTtcbiAgICAgIHNldFNraXBBY3Rpb24oKTtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5sYXN0Um91dGVyU3RhdGUuc3RhdGUudXJsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFVwU3RhdGVSb2xsYmFja0V2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIFJvdXRlc1JlY29nbml6ZWQgfHwgZSBpbnN0YW5jZW9mIEd1YXJkc0NoZWNrRW5kIHx8IGUgaW5zdGFuY2VvZiBSZXNvbHZlRW5kKSB7XG4gICAgICAgIHRoaXMubGFzdFJvdXRlclN0YXRlID0gdGhpcy5zZXJpYWxpemVSb3V0ZShlKTtcbiAgICAgIH0gZWxzZSBpZiAoZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25DYW5jZWwpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaFJvdXRlckNhbmNlbChlKTtcbiAgICAgIH0gZWxzZSBpZiAoZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FcnJvcikge1xuICAgICAgICB0aGlzLmRpc3BhdGNoUm91dGVyRXJyb3IoZSk7XG4gICAgICB9IGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kICYmICF0aGlzLm5hdmlnYXRpb25UcmlnZ2VyZWRCeURpc3BhdGNoKSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hSb3V0ZXJTdWNjZXNzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNlcmlhbGl6ZVJvdXRlKG5hdmlnYXRpb25FdmVudDogUm91dGVzUmVjb2duaXplZCB8IEd1YXJkc0NoZWNrRW5kIHwgUmVzb2x2ZUVuZCk6IFJvdXRlclN0YXRlIHtcbiAgICBsZXQgc3RhdGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgPSBuYXZpZ2F0aW9uRXZlbnQuc3RhdGUucm9vdDtcbiAgICB3aGlsZSAoc3RhdGUuZmlyc3RDaGlsZCkge1xuICAgICAgc3RhdGUgPSBzdGF0ZS5maXJzdENoaWxkO1xuICAgIH1cbiAgICBjb25zdCB7IHBhcmFtcywgZGF0YSwgcXVlcnlQYXJhbXMsIGZyYWdtZW50IH0gPSBzdGF0ZTtcblxuICAgIHJldHVybiB7XG4gICAgICBuYXZpZ2F0aW9uSWQ6IG5hdmlnYXRpb25FdmVudC5pZCxcbiAgICAgIHN0YXRlOiB7XG4gICAgICAgIHVybDogbmF2aWdhdGlvbkV2ZW50LnVybCxcbiAgICAgICAgdXJsQWZ0ZXJSZWRpcmVjdHM6IG5hdmlnYXRpb25FdmVudC51cmxBZnRlclJlZGlyZWN0cyxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgZnJhZ21lbnQsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIG5hdmlnYXRpb25FeHRyYXM6IHRoaXMucm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uKCkuZXh0cmFzID8gdGhpcy5yb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb24oKS5leHRyYXMuc3RhdGUgOiB7fSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuIl19