@firestitch/filter
Version:
243 lines • 20.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { pickBy, isEqual, isObject, isArray } from 'lodash-es';
import { list as arrayList } from '@firestitch/common';
var FilterParams = /** @class */ (function () {
function FilterParams(_router, _route, _filterItems) {
this._router = _router;
this._route = _route;
this._filterItems = _filterItems;
this._preserveParams = {};
}
/**
* @return {?}
*/
FilterParams.prototype.getValues = /**
* @return {?}
*/
function () {
/** @type {?} */
var values = {};
this._filterItems.forEach((/**
* @param {?} filter
* @return {?}
*/
function (filter) {
values[filter.name] = filter.value;
}));
return values;
};
/**
* @return {?}
*/
FilterParams.prototype.getFlattenedParams = /**
* @return {?}
*/
function () {
/** @type {?} */
var params = {};
this._filterItems.forEach((/**
* @param {?} filterItem
* @return {?}
*/
function (filterItem) {
Object.assign(params, filterItem.flattenedParams);
}));
return pickBy(params);
};
/**
* @return {?}
*/
FilterParams.prototype.updateQueryParams = /**
* @return {?}
*/
function () {
/** @type {?} */
var flattenedParams = this.getFlattenedParams();
this._filterItems.forEach((/**
* @param {?} filterItem
* @return {?}
*/
function (filterItem) {
if (filterItem.isTypeSelect && filterItem.isolate) {
/** @type {?} */
var isolated = arrayList(filterItem.values, 'value').sort();
/** @type {?} */
var value = filterItem.value.sort();
if (isEqual(value, isolated)) {
flattenedParams[filterItem.name] = null;
}
}
if (filterItem.isTypeAutocomplete) {
if (isObject(filterItem.model)) {
flattenedParams[filterItem.name] = filterItem.model.value + ':' + filterItem.model.name;
}
}
else if (filterItem.isTypeAutocompleteChips) {
if (isArray(filterItem.model) && filterItem.model.length) {
flattenedParams[filterItem.name] = filterItem.model.map((/**
* @param {?} item
* @return {?}
*/
function (item) {
return item.value + ':' + item.name;
})).join(',');
}
}
}));
/** @type {?} */
var params = Object.assign({}, this._preserveParams, flattenedParams);
// Update query
this._router.navigate([], {
replaceUrl: true,
relativeTo: this._route,
queryParams: params
}).then((/**
* @return {?}
*/
function () { }));
};
/**
* Parse query and update filter values
* @param params
*/
/**
* Parse query and update filter values
* @param {?} params
* @return {?}
*/
FilterParams.prototype.updateFromQueryParams = /**
* Parse query and update filter values
* @param {?} params
* @return {?}
*/
function (params) {
var _this = this;
Object.keys(params).forEach((/**
* @param {?} name
* @return {?}
*/
function (name) {
/** @type {?} */
var found = _this._filterItems.some((/**
* @param {?} filterItem
* @return {?}
*/
function (filterItem) {
if (filterItem.isTypeRange) {
return name === filterItem.name.concat('_min') ||
name === filterItem.name.concat('_max') ||
name === filterItem.name;
}
else if (filterItem.isTypeDateRange || filterItem.isTypeDateTimeRange) {
return name === filterItem.name.concat('_from') || name === filterItem.name.concat('_to');
}
return filterItem.name === name;
}));
if (!found) {
_this._preserveParams[name] = params[name];
}
}));
this._filterItems.forEach((/**
* @param {?} filterItem
* @return {?}
*/
function (filterItem) {
/** @type {?} */
var param = params[filterItem.name];
if (filterItem.isTypeRange) {
/** @type {?} */
var min = params[filterItem.name + '_min'];
/** @type {?} */
var max = params[filterItem.name + '_max'];
filterItem.model = { min: min, max: max };
}
else if (filterItem.isTypeDateRange || filterItem.isTypeDateTimeRange) {
/** @type {?} */
var from = params[filterItem.name + '_from'];
/** @type {?} */
var to = params[filterItem.name + '_to'];
filterItem.model = { from: from, to: to };
}
else if (param) {
if (filterItem.isTypeSelect && filterItem.multiple) {
if (filterItem.isolate && param === filterItem.isolate.value) {
filterItem.model = [param];
filterItem.isolate.enabled = true;
}
else {
filterItem.model = param.split(',');
}
}
else if (filterItem.isTypeChips) {
filterItem.model = param
.split(',')
.map((/**
* @param {?} value
* @return {?}
*/
function (value) { return +value; }));
}
else if (filterItem.isTypeCheckbox) {
filterItem.model = param;
}
else if (filterItem.isTypeAutocomplete) {
/** @type {?} */
var filterParts = param.split(':');
filterItem.model = {
name: filterParts[1],
value: +filterParts[0]
};
}
else if (filterItem.isTypeAutocompleteChips) {
/** @type {?} */
var filterParts = param.split(',');
filterItem.model = filterParts.reduce((/**
* @param {?} arry
* @param {?} value
* @return {?}
*/
function (arry, value) {
/** @type {?} */
var chipParts = value.split(':');
arry.push({
name: chipParts[1],
value: +chipParts[0],
});
return arry;
}), []);
}
else {
filterItem.model = param;
}
}
}));
};
return FilterParams;
}());
export { FilterParams };
if (false) {
/**
* @type {?}
* @private
*/
FilterParams.prototype._preserveParams;
/**
* @type {?}
* @private
*/
FilterParams.prototype._router;
/**
* @type {?}
* @private
*/
FilterParams.prototype._route;
/**
* @type {?}
* @private
*/
FilterParams.prototype._filterItems;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXBhcmFtcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BmaXJlc3RpdGNoL2ZpbHRlci8iLCJzb3VyY2VzIjpbImFwcC9tb2RlbHMvZmlsdGVyLXBhcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMvRCxPQUFPLEVBQUUsSUFBSSxJQUFJLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSXZEO0lBSUUsc0JBQ1UsT0FBZSxFQUNmLE1BQXNCLEVBQ3RCLFlBQWtDO1FBRmxDLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBc0I7UUFMcEMsb0JBQWUsR0FBRyxFQUFFLENBQUM7SUFNMUIsQ0FBQzs7OztJQUVHLGdDQUFTOzs7SUFBaEI7O1lBRVEsTUFBTSxHQUFHLEVBQUU7UUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPOzs7O1FBQUMsVUFBQSxNQUFNO1lBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNyQyxDQUFDLEVBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Ozs7SUFFTSx5Q0FBa0I7OztJQUF6Qjs7WUFFUSxNQUFNLEdBQUcsRUFBRTtRQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU87Ozs7UUFBQyxVQUFDLFVBQThCO1lBQ3ZELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNwRCxDQUFDLEVBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLENBQUM7Ozs7SUFFTSx3Q0FBaUI7OztJQUF4Qjs7WUFFUSxlQUFlLEdBQUcs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QUMsR0FBRSxFQUFFLENBQUMsQ0FBQTtpQkFFUDtxQkFBTTtvQkFDTCxVQUFVLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztpQkFDMUI7YUFDRjtRQUNILENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQztJQUNILG1CQUFDO0FBQUQsQ0FBQyxBQXJLRCxJQXFLQzs7Ozs7OztJQW5LQyx1Q0FBNkI7Ozs7O0lBRzNCLCtCQUF1Qjs7Ozs7SUFDdkIsOEJBQThCOzs7OztJQUM5QixvQ0FBMEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyLCBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgcGlja0J5LCBpc0VxdWFsLCBpc09iamVjdCwgaXNBcnJheSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBsaXN0IGFzIGFycmF5TGlzdCB9IGZyb20gJ0BmaXJlc3RpdGNoL2NvbW1vbic7XG5pbXBvcnQgeyBGc0ZpbHRlckNvbmZpZ0l0ZW0gfSBmcm9tICcuLi9tb2RlbHMvZmlsdGVyLWl0ZW0nO1xuXG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJQYXJhbXMge1xuXG4gIHByaXZhdGUgX3ByZXNlcnZlUGFyYW1zID0ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBfcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgX2ZpbHRlckl0ZW1zOiBGc0ZpbHRlckNvbmZpZ0l0ZW1bXSxcbiAgKSB7fVxuXG4gIHB1YmxpYyBnZXRWYWx1ZXMoKSB7XG5cbiAgICBjb25zdCB2YWx1ZXMgPSB7fTtcbiAgICB0aGlzLl9maWx0ZXJJdGVtcy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICB2YWx1ZXNbZmlsdGVyLm5hbWVdID0gZmlsdGVyLnZhbHVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIHB1YmxpYyBnZXRGbGF0dGVuZWRQYXJhbXMoKSB7XG5cbiAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICB0aGlzLl9maWx0ZXJJdGVtcy5mb3JFYWNoKChmaWx0ZXJJdGVtOiBGc0ZpbHRlckNvbmZpZ0l0ZW0pID0+IHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocGFyYW1zLCBmaWx0ZXJJdGVtLmZsYXR0ZW5lZFBhcmFtcyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcGlja0J5KHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUXVlcnlQYXJhbXMoKSB7XG5cbiAgICBjb25zdCBmbGF0dGVuZWRQYXJhbXMgPSB0aGlzLmdldEZsYXR0ZW5lZFBhcmFtcygpO1xuXG4gICAgdGhpcy5fZmlsdGVySXRlbXMuZm9yRWFjaChmaWx0ZXJJdGVtID0+IHtcblxuICAgICAgaWYgKGZpbHRlckl0ZW0uaXNUeXBlU2VsZWN0ICYmIGZpbHRlckl0ZW0uaXNvbGF0ZSkge1xuXG4gICAgICAgIGNvbnN0IGlzb2xhdGVkID0gYXJyYXlMaXN0KGZpbHRlckl0ZW0udmFsdWVzLCAndmFsdWUnKS5zb3J0KCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVySXRlbS52YWx1ZS5zb3J0KCk7XG5cbiAgICAgICAgaWYgKGlzRXF1YWwodmFsdWUsIGlzb2xhdGVkKSkge1xuICAgICAgICAgIGZsYXR0ZW5lZFBhcmFtc1tmaWx0ZXJJdGVtLm5hbWVdID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmlsdGVySXRlbS5pc1R5cGVBdXRvY29tcGxldGUpIHtcbiAgICAgICAgaWYgKGlzT2JqZWN0KGZpbHRlckl0ZW0ubW9kZWwpKSB7XG4gICAgICAgICAgZmxhdHRlbmVkUGFyYW1zW2ZpbHRlckl0ZW0ubmFtZV0gPSBmaWx0ZXJJdGVtLm1vZGVsLnZhbHVlICsgJzonICsgZmlsdGVySXRlbS5tb2RlbC5uYW1lO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGZpbHRlckl0ZW0uaXNUeXBlQXV0b2NvbXBsZXRlQ2hpcHMpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkoZmlsdGVySXRlbS5tb2RlbCkgJiYgZmlsdGVySXRlbS5tb2RlbC5sZW5ndGgpIHtcbiAgICAgICAgICBmbGF0dGVuZWRQYXJhbXNbZmlsdGVySXRlbS5uYW1lXSA9IGZpbHRlckl0ZW0ubW9kZWwubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS52YWx1ZSArICc6JyArIGl0ZW0ubmFtZTtcbiAgICAgICAgICB9KS5qb2luKCcsJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHt9LFxuICAgICAgICB0aGlzLl9wcmVzZXJ2ZVBhcmFtcyxcbiAgICAgICAgZmxhdHRlbmVkUGFyYW1zKTtcblxuICAgIC8vIFVwZGF0ZSBxdWVyeVxuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMuX3JvdXRlLFxuICAgICAgcXVlcnlQYXJhbXM6IHBhcmFtc1xuICAgIH0pLnRoZW4oKCkgPT4ge30pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIHF1ZXJ5IGFuZCB1cGRhdGUgZmlsdGVyIHZhbHVlc1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlRnJvbVF1ZXJ5UGFyYW1zKHBhcmFtczogUGFyYW1zKSB7XG5cbiAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goKG5hbWUpID0+IHtcblxuICAgICAgY29uc3QgZm91bmQgPSB0aGlzLl9maWx0ZXJJdGVtcy5zb21lKGZpbHRlckl0ZW0gPT4ge1xuXG4gICAgICAgIGlmIChmaWx0ZXJJdGVtLmlzVHlwZVJhbmdlKSB7XG4gICAgICAgICAgcmV0dXJuICBuYW1lID09PSBmaWx0ZXJJdGVtLm5hbWUuY29uY2F0KCdfbWluJykgfHxcbiAgICAgICAgICAgICAgICAgIG5hbWUgPT09IGZpbHRlckl0ZW0ubmFtZS5jb25jYXQoJ19tYXgnKSB8fFxuICAgICAgICAgICAgICAgICAgbmFtZSA9PT0gZmlsdGVySXRlbS5uYW1lO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVySXRlbS5pc1R5cGVEYXRlUmFuZ2UgfHwgZmlsdGVySXRlbS5pc1R5cGVEYXRlVGltZVJhbmdlKSB7XG4gICAgICAgICAgcmV0dXJuIG5hbWUgPT09IGZpbHRlckl0ZW0ubmFtZS5jb25jYXQoJ19mcm9tJykgfHwgbmFtZSA9PT0gZmlsdGVySXRlbS5uYW1lLmNvbmNhdCgnX3RvJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVySXRlbS5uYW1lID09PSBuYW1lO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgdGhpcy5fcHJlc2VydmVQYXJhbXNbbmFtZV0gPSBwYXJhbXNbbmFtZV07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9maWx0ZXJJdGVtcy5mb3JFYWNoKGZpbHRlckl0ZW0gPT4ge1xuXG4gICAgICBjb25zdCBwYXJhbSA9IHBhcmFtc1tmaWx0ZXJJdGVtLm5hbWVdO1xuXG4gICAgICBpZiAoZmlsdGVySXRlbS5pc1R5cGVSYW5nZSkge1xuXG4gICAgICAgIGNvbnN0IG1pbiA9IHBhcmFtc1tmaWx0ZXJJdGVtLm5hbWUgKyAnX21pbiddO1xuICAgICAgICBjb25zdCBtYXggPSBwYXJhbXNbZmlsdGVySXRlbS5uYW1lICsgJ19tYXgnXTtcblxuICAgICAgICBmaWx0ZXJJdGVtLm1vZGVsID0geyBtaW46IG1pbiwgbWF4OiBtYXggfTtcblxuICAgICAgfSBlbHNlIGlmIChmaWx0ZXJJdGVtLmlzVHlwZURhdGVSYW5nZSB8fCBmaWx0ZXJJdGVtLmlzVHlwZURhdGVUaW1lUmFuZ2UpIHtcblxuICAgICAgICBjb25zdCBmcm9tID0gcGFyYW1zW2ZpbHRlckl0ZW0ubmFtZSArICdfZnJvbSddO1xuICAgICAgICBjb25zdCB0byA9IHBhcmFtc1tmaWx0ZXJJdGVtLm5hbWUgKyAnX3RvJ107XG5cbiAgICAgICAgZmlsdGVySXRlbS5tb2RlbCA9IHsgZnJvbTogZnJvbSwgdG86IHRvIH07XG5cbiAgICAgIH0gZWxzZSBpZiAocGFyYW0pIHtcblxuICAgICAgICBpZiAoZmlsdGVySXRlbS5pc1R5cGVTZWxlY3QgJiYgZmlsdGVySXRlbS5tdWx0aXBsZSkge1xuXG4gICAgICAgICAgaWYgKGZpbHRlckl0ZW0uaXNvbGF0ZSAmJiBwYXJhbSA9PT0gZmlsdGVySXRlbS5pc29sYXRlLnZhbHVlKSB7XG4gICAgICAgICAgICBmaWx0ZXJJdGVtLm1vZGVsID0gW3BhcmFtXTtcbiAgICAgICAgICAgIGZpbHRlckl0ZW0uaXNvbGF0ZS5lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmlsdGVySXRlbS5tb2RlbCA9IHBhcmFtLnNwbGl0KCcsJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVySXRlbS5pc1R5cGVDaGlwcykge1xuXG4gICAgICAgICAgICBmaWx0ZXJJdGVtLm1vZGVsID0gcGFyYW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgodmFsdWUpID0+ICt2YWx1ZSk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJJdGVtLmlzVHlwZUNoZWNrYm94KSB7XG4gICAgICAgICAgZmlsdGVySXRlbS5tb2RlbCA9IHBhcmFtO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVySXRlbS5pc1R5cGVBdXRvY29tcGxldGUpIHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJQYXJ0cyA9IHBhcmFtLnNwbGl0KCc6Jyk7XG5cbiAgICAgICAgICBmaWx0ZXJJdGVtLm1vZGVsID0ge1xuICAgICAgICAgICAgbmFtZTogZmlsdGVyUGFydHNbMV0sXG4gICAgICAgICAgICB2YWx1ZTogK2ZpbHRlclBhcnRzWzBdXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlckl0ZW0uaXNUeXBlQXV0b2NvbXBsZXRlQ2hpcHMpIHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJQYXJ0cyA9IHBhcmFtLnNwbGl0KCcsJyk7XG5cbiAgICAgICAgICBmaWx0ZXJJdGVtLm1vZGVsID0gZmlsdGVyUGFydHMucmVkdWNlKChhcnJ5LCB2YWx1ZSkgPT4ge1xuXG4gICAgICAgICAgICBjb25zdCBjaGlwUGFydHMgPSB2YWx1ZS5zcGxpdCgnOicpO1xuXG4gICAgICAgICAgICBhcnJ5LnB1c2goe1xuICAgICAgICAgICAgICBuYW1lOiBjaGlwUGFydHNbMV0sXG4gICAgICAgICAgICAgIHZhbHVlOiArY2hpcFBhcnRzWzBdLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBhcnJ5O1xuICAgICAgICAgIH0sIFtdKVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsdGVySXRlbS5tb2RlbCA9IHBhcmFtO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==