@crnk/angular-ngrx
Version:
Angular helper library for ngrx-json-api and crnk:
53 lines • 2.3 kB
JavaScript
import { Subject } from "rxjs/Subject";
import { Observable } from "rxjs/Observable";
import * as _ from "lodash";
import "rxjs/add/operator/zip";
import "rxjs/add/operator/do";
import "rxjs/add/operator/debounceTime";
import "rxjs/add/operator/distinct";
import "rxjs/add/operator/switch";
import { FilteringParam, ManyQueryResult, NGRX_JSON_API_DEFAULT_ZONE, NgrxJsonApiService, NgrxJsonApiZoneService, Query, ResourceIdentifier } from "ngrx-json-api";
import { CrnkBindingUtils } from "./crnk.binding.utils";
var SelectorBinding = /** @class */ (function () {
function SelectorBinding(ngrxJsonApiService, config, utils) {
var _this = this;
this.config = config;
this.utils = utils;
this.ngrxJsonApiZone = ngrxJsonApiService.getZone(config.zoneId || NGRX_JSON_API_DEFAULT_ZONE);
var termToQuery = function (queryTerm) {
var query = _.cloneDeep(_this.config.query);
if (queryTerm !== null) {
if (!query.params) {
query.params = {};
}
if (!query.params.filtering) {
query.params.filtering = [];
}
var filterParam = _this.config.filterFactory(queryTerm);
query.params.filtering.push(filterParam);
}
return query;
};
var executeQuery = function (query) {
_this.ngrxJsonApiZone.putQuery({
query: query,
fromServer: true
});
return _this.ngrxJsonApiZone.selectManyResults(query.queryId);
};
var isNotLoading = function (result) { return !result.loading; };
var toIdentifiers = function (result) { return _this.utils.toResourceIdentifiers(result.data); };
this.querySubject = new Subject();
this.values = this.querySubject.asObservable()
.map(termToQuery)
.switchMap(executeQuery)
.filter(isNotLoading)
.map(toIdentifiers);
}
SelectorBinding.prototype.complete = function (event) {
this.querySubject.next(event.query);
};
return SelectorBinding;
}());
export { SelectorBinding };
//# sourceMappingURL=crnk.binding.selector.js.map