UNPKG

@datorama/akita-ng-router-store

Version:

Bindings to connect the Angular Router with Akita store

117 lines 15.1 kB
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=