@datorama/akita-ng-router-store
Version:
Bindings to connect the Angular Router with Akita store
117 lines • 15.1 kB
JavaScript
import { Injectable } from '@angular/core';
import { filterNilValue, Query } from '@datorama/akita';
import { combineLatest, distinctUntilChanged, map, pluck, Subject } from 'rxjs';
import { RouterStore } from './router.store';
import * as i0 from "@angular/core";
import * as i1 from "./router.store";
function slice(section) {
return (source) => {
return source.pipe(map((data) => data.state)).pipe(filterNilValue(), map((state) => state[section]));
};
}
export class RouterQuery extends Query {
constructor(store) {
super(store);
this.store = store;
this.__navigationCancel = new Subject();
this.__navigationError = new Subject();
}
selectParams(names) {
if (names === undefined) {
return this.select().pipe(slice('params'), distinctUntilChanged());
}
const select = (p) => this.select().pipe(slice('params'), pluck(p), distinctUntilChanged());
if (Array.isArray(names)) {
const sources = names.map(select);
return combineLatest(sources);
}
return select(names).pipe(distinctUntilChanged());
}
getParams(name) {
if (this.getValue().state) {
const params = this.getValue().state.params;
if (name === undefined) {
return params;
}
return params[name];
}
return null;
}
selectQueryParams(names) {
if (names === undefined) {
return this.select().pipe(slice('queryParams'), distinctUntilChanged());
}
const select = (p) => this.select().pipe(slice('queryParams'), pluck(p), distinctUntilChanged());
if (Array.isArray(names)) {
const sources = names.map(select);
return combineLatest(sources);
}
return select(names);
}
getQueryParams(name) {
if (this.getValue().state) {
const params = this.getValue().state.queryParams;
if (name === undefined) {
return params;
}
return params[name];
}
return null;
}
selectFragment() {
return this.select().pipe(slice('fragment'), distinctUntilChanged());
}
getFragment() {
if (this.getValue().state) {
return this.getValue().state.fragment;
}
return null;
}
selectData(name) {
if (name === undefined) {
return this.select().pipe(slice('data'), distinctUntilChanged());
}
return this.select().pipe(slice('data'), pluck(name), distinctUntilChanged());
}
getData(name) {
if (this.getValue().state) {
const data = this.getValue().state.data;
if (name === undefined) {
return data;
}
return data[name];
}
return null;
}
selectNavigationExtras(name) {
if (name === undefined) {
return this.select().pipe(slice('navigationExtras'), distinctUntilChanged());
}
return this.select().pipe(slice('data'), pluck(name), distinctUntilChanged());
}
getNavigationExtras(name) {
if (this.getValue().state) {
const data = this.getValue().state.navigationExtras;
if (name === undefined) {
return data;
}
return data[name];
}
return null;
}
selectNavigationCancel() {
return this.__navigationCancel.asObservable();
}
selectNavigationError() {
return this.__navigationError.asObservable();
}
}
RouterQuery.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: RouterQuery, deps: [{ token: i1.RouterStore }], target: i0.ɵɵFactoryTarget.Injectable });
RouterQuery.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: RouterQuery, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: RouterQuery, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], ctorParameters: function () { return [{ type: i1.RouterStore }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLnF1ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctcm91dGVyLXN0b3JlL3NyYy9saWIvcm91dGVyLnF1ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBYyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVGLE9BQU8sRUFBZSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRTFELFNBQVMsS0FBSyxDQUFDLE9BQWU7SUFDNUIsT0FBTyxDQUFDLE1BQStCLEVBQUUsRUFBRTtRQUN6QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2hELGNBQWMsRUFBRSxFQUNoQixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUMvQixDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUtELE1BQU0sT0FBTyxXQUFZLFNBQVEsS0FBa0I7SUFJakQsWUFBc0IsS0FBa0I7UUFDdEMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRE8sVUFBSyxHQUFMLEtBQUssQ0FBYTtRQUh4Qyx1QkFBa0IsR0FBRyxJQUFJLE9BQU8sRUFBb0IsQ0FBQztRQUNyRCxzQkFBaUIsR0FBRyxJQUFJLE9BQU8sRUFBbUIsQ0FBQztJQUluRCxDQUFDO0lBSUQsWUFBWSxDQUFVLEtBQXlCO1FBQzdDLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtZ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QWdCLENBQUM7WUFDcEQsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO2dCQUN0QixPQUFPLElBQVMsQ0FBQzthQUNsQjtZQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25CO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0MsQ0FBQzs7d0dBaElVLFdBQVc7NEdBQVgsV0FBVyxjQUZWLE1BQU07MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uQ2FuY2VsLCBOYXZpZ2F0aW9uRXJyb3IgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZmlsdGVyTmlsVmFsdWUsIFF1ZXJ5IH0gZnJvbSAnQGRhdG9yYW1hL2FraXRhJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIE9ic2VydmFibGUsIHBsdWNrLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSb3V0ZXJTdGF0ZSwgUm91dGVyU3RvcmUgfSBmcm9tICcuL3JvdXRlci5zdG9yZSc7XG5cbmZ1bmN0aW9uIHNsaWNlKHNlY3Rpb246IHN0cmluZykge1xuICByZXR1cm4gKHNvdXJjZTogT2JzZXJ2YWJsZTxSb3V0ZXJTdGF0ZT4pID0+IHtcbiAgICByZXR1cm4gc291cmNlLnBpcGUobWFwKChkYXRhKSA9PiBkYXRhLnN0YXRlKSkucGlwZShcbiAgICAgIGZpbHRlck5pbFZhbHVlKCksXG4gICAgICBtYXAoKHN0YXRlKSA9PiBzdGF0ZVtzZWN0aW9uXSlcbiAgICApO1xuICB9O1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUm91dGVyUXVlcnkgZXh0ZW5kcyBRdWVyeTxSb3V0ZXJTdGF0ZT4ge1xuICBfX25hdmlnYXRpb25DYW5jZWwgPSBuZXcgU3ViamVjdDxOYXZpZ2F0aW9uQ2FuY2VsPigpO1xuICBfX25hdmlnYXRpb25FcnJvciA9IG5ldyBTdWJqZWN0PE5hdmlnYXRpb25FcnJvcj4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgc3RvcmU6IFJvdXRlclN0b3JlKSB7XG4gICAgc3VwZXIoc3RvcmUpO1xuICB9XG5cbiAgc2VsZWN0UGFyYW1zPFQgPSBhbnk+KG5hbWVzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8VFtdPjtcbiAgc2VsZWN0UGFyYW1zPFQgPSBhbnk+KG5hbWVzPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxUPjtcbiAgc2VsZWN0UGFyYW1zPFQgPSBhbnk+KG5hbWVzPzogc3RyaW5nIHwgc3RyaW5nW10pOiBPYnNlcnZhYmxlPFQgfCBUW10+IHtcbiAgICBpZiAobmFtZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0KCkucGlwZShzbGljZSgncGFyYW1zJyksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdCA9IChwOiBzdHJpbmcpID0+IHRoaXMuc2VsZWN0KCkucGlwZShzbGljZSgncGFyYW1zJyksIHBsdWNrKHApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWVzKSkge1xuICAgICAgY29uc3Qgc291cmNlcyA9IG5hbWVzLm1hcChzZWxlY3QpO1xuICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3Qoc291cmNlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbGVjdChuYW1lcykucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgfVxuXG4gIGdldFBhcmFtczxUID0gYW55PihuYW1lPzogc3RyaW5nKTogVCB8IG51bGwge1xuICAgIGlmICh0aGlzLmdldFZhbHVlKCkuc3RhdGUpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuZ2V0VmFsdWUoKS5zdGF0ZS5wYXJhbXM7XG4gICAgICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBwYXJhbXMgYXMgVDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcmFtc1tuYW1lXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHNlbGVjdFF1ZXJ5UGFyYW1zPFQgPSBhbnk+KG5hbWVzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8VFtdPjtcbiAgc2VsZWN0UXVlcnlQYXJhbXM8VCA9IGFueT4obmFtZXM/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+O1xuICBzZWxlY3RRdWVyeVBhcmFtczxUID0gYW55PihuYW1lcz86IHN0cmluZyB8IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxUIHwgVFtdPiB7XG4gICAgaWYgKG5hbWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdCgpLnBpcGUoc2xpY2UoJ3F1ZXJ5UGFyYW1zJyksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdCA9IChwOiBzdHJpbmcpID0+IHRoaXMuc2VsZWN0KCkucGlwZShzbGljZSgncXVlcnlQYXJhbXMnKSwgcGx1Y2socCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZXMpKSB7XG4gICAgICBjb25zdCBzb3VyY2VzID0gbmFtZXMubWFwKHNlbGVjdCk7XG4gICAgICByZXR1cm4gY29tYmluZUxhdGVzdChzb3VyY2VzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZWN0KG5hbWVzKTtcbiAgfVxuXG4gIGdldFF1ZXJ5UGFyYW1zPFQgPSBhbnk+KG5hbWU/OiBzdHJpbmcpOiBUIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuZ2V0VmFsdWUoKS5zdGF0ZSkge1xuICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5nZXRWYWx1ZSgpLnN0YXRlLnF1ZXJ5UGFyYW1zO1xuICAgICAgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcGFyYW1zIGFzIFQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJhbXNbbmFtZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzZWxlY3RGcmFnbWVudCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdCgpLnBpcGUoc2xpY2UoJ2ZyYWdtZW50JyksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICB9XG5cbiAgZ2V0RnJhZ21lbnQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuZ2V0VmFsdWUoKS5zdGF0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoKS5zdGF0ZS5mcmFnbWVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHNlbGVjdERhdGE8VCA9IGFueT4obmFtZT86IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xuICAgIGlmIChuYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdCgpLnBpcGUoc2xpY2UoJ2RhdGEnKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KCkucGlwZShzbGljZSgnZGF0YScpLCBwbHVjayhuYW1lKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gIH1cblxuICBnZXREYXRhPFQgPSBhbnk+KG5hbWU/OiBzdHJpbmcpOiBUIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuZ2V0VmFsdWUoKS5zdGF0ZSkge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0VmFsdWUoKS5zdGF0ZS5kYXRhO1xuICAgICAgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZGF0YSBhcyBUO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YVtuYW1lXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHNlbGVjdE5hdmlnYXRpb25FeHRyYXM8VCA9IGFueT4obmFtZT86IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xuICAgIGlmIChuYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdCgpLnBpcGUoc2xpY2UoJ25hdmlnYXRpb25FeHRyYXMnKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KCkucGlwZShzbGljZSgnZGF0YScpLCBwbHVjayhuYW1lKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gIH1cblxuICBnZXROYXZpZ2F0aW9uRXh0cmFzPFQgPSBhbnk+KG5hbWU/OiBzdHJpbmcpOiBUIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuZ2V0VmFsdWUoKS5zdGF0ZSkge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0VmFsdWUoKS5zdGF0ZS5uYXZpZ2F0aW9uRXh0cmFzO1xuICAgICAgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZGF0YSBhcyBUO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YVtuYW1lXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHNlbGVjdE5hdmlnYXRpb25DYW5jZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX19uYXZpZ2F0aW9uQ2FuY2VsLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgc2VsZWN0TmF2aWdhdGlvbkVycm9yKCkge1xuICAgIHJldHVybiB0aGlzLl9fbmF2aWdhdGlvbkVycm9yLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG59XG4iXX0=