@datorama/akita-ng-router-store
Version:
Bindings to connect the Angular Router with Akita store
125 lines • 14.3 kB
JavaScript
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