UNPKG

@firestitch/filter

Version:
248 lines 20.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { isString } from 'lodash-es'; import { ItemType } from '../models/filter-item'; var QueryParams = /** @class */ (function () { function QueryParams(_router, _route, _filterItems) { this._router = _router; this._route = _route; this._filterItems = _filterItems; this._queryKeys = []; this._queryParamsToFilter(this._route.snapshot.queryParams, this._filterItems); } /** * Update query with filter values * @param filterParams */ /** * Update query with filter values * @param {?} filterParams * @return {?} */ QueryParams.prototype.updateQueryParams = /** * Update query with filter values * @param {?} filterParams * @return {?} */ function (filterParams) { // transform selected filter values to query string /** @type {?} */ var newParams = this._filterToQueryParams(filterParams, this._filterItems); // Remove empty keys this._clearKeys(newParams); // Store query keys this._queryKeys = Object.keys(newParams); // Update query this._router.navigate([], { relativeTo: this._route, queryParams: newParams, queryParamsHandling: 'merge' }).then((/** * @return {?} */ function () { })); }; /** * Transformation for selected filter values to query string * @param params * @param items */ /** * Transformation for selected filter values to query string * @private * @param {?} params * @param {?} items * @return {?} */ QueryParams.prototype._filterToQueryParams = /** * Transformation for selected filter values to query string * @private * @param {?} params * @param {?} items * @return {?} */ function (params, items) { // selected filter keys /** @type {?} */ var filterKeys = Object.keys(params); return filterKeys.reduce((/** * @param {?} acc * @param {?} filterKey * @return {?} */ function (acc, filterKey) { // looking filter item /** @type {?} */ var filterItem = items.find((/** * @param {?} item * @return {?} */ function (item) { return item.name === filterKey; })); if (filterItem) { if (filterItem.type === ItemType.Range) { acc[filterKey] = [params[filterKey].min, params[filterKey].max].join(','); } else if (filterItem.type === ItemType.Select && filterItem.multiple && filterItem.model.length > 0) { acc[filterKey] = filterItem.model.join(','); } else if (filterItem.type === ItemType.AutoComplete) { acc[filterKey] = [filterItem.model.value, filterItem.model.name].join(','); } else if (filterItem.type === ItemType.AutoCompleteChips) { acc[filterKey] = filterItem.model.map((/** * @param {?} item * @return {?} */ function (item) { return [item.value, item.name].join(','); })).join(';'); } else { acc[filterKey] = params[filterKey]; } } return acc; }), {}); }; /** * Parse query and update filter values * @param params * @param items */ /** * Parse query and update filter values * @private * @param {?} params * @param {?} items * @return {?} */ QueryParams.prototype._queryParamsToFilter = /** * Parse query and update filter values * @private * @param {?} params * @param {?} items * @return {?} */ function (params, items) { this._queryKeys = Object.keys(params); return this._queryKeys.forEach((/** * @param {?} queryKey * @return {?} */ function (queryKey) { /** @type {?} */ var filterItem = items.find((/** * @param {?} item * @return {?} */ function (item) { return item.name === queryKey; })); if (filterItem) { if (filterItem.type === ItemType.Select && filterItem.multiple) { /** @type {?} */ var values = params[queryKey] .split(','); filterItem.parseAndSetValue(values); } else if (filterItem.type === ItemType.Range) { if (params[queryKey] && isString(params[queryKey])) { /** @type {?} */ var filterParts = params[queryKey].split(','); filterItem.model = { min: filterParts[0], max: filterParts[1] }; } } else if (filterItem.type === ItemType.Chips) { /** @type {?} */ var chipIds = params[queryKey] .split(',') .map((/** * @param {?} value * @return {?} */ function (value) { return +value; })); filterItem.parseAndSetValue(chipIds); } else if (filterItem.type === ItemType.Checkbox) { filterItem.parseAndSetValue(params[queryKey] === 'true'); } else if (filterItem.type === ItemType.AutoComplete) { /** @type {?} */ var filterParts = params[queryKey].split(','); filterItem.model = { name: filterParts[1], value: +filterParts[0] }; } else if (filterItem.type === ItemType.AutoCompleteChips) { /** @type {?} */ var filterParts = params[queryKey].split(';'); filterItem.model = filterParts.reduce((/** * @param {?} acc * @param {?} value * @return {?} */ function (acc, value) { /** @type {?} */ var chipParts = value.split(','); acc.push({ name: chipParts[1], value: +chipParts[0], }); return acc; }), []); } else { filterItem.parseAndSetValue(params[queryKey]); } } })); }; /** * @private * @param {?} params * @return {?} */ QueryParams.prototype._clearKeys = /** * @private * @param {?} params * @return {?} */ function (params) { this._queryKeys.forEach((/** * @param {?} key * @return {?} */ function (key) { if (!params[key]) { params[key] = null; } })); }; return QueryParams; }()); export { QueryParams }; if (false) { /** * @type {?} * @private */ QueryParams.prototype._queryKeys; /** * @type {?} * @private */ QueryParams.prototype._router; /** * @type {?} * @private */ QueryParams.prototype._route; /** * @type {?} * @private */ QueryParams.prototype._filterItems; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcGFyYW1zLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGZpcmVzdGl0Y2gvZmlsdGVyLyIsInNvdXJjZXMiOlsiYXBwL21vZGVscy9xdWVyeS1wYXJhbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLE9BQU8sRUFBYSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEQsT0FBTyxFQUFzQixRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUdyRTtJQUdFLHFCQUNVLE9BQWUsRUFDZixNQUFzQixFQUN0QixZQUFrQztRQUZsQyxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQXNCO1FBTHBDLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFPdEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVEOzs7T0FHRzs7Ozs7O0lBQ0ksdUNBQWlCOzs7OztJQUF4QixVQUF5QixZQUFZOzs7WUFFN0IsU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUU1RSxvQkFBb0I7UUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUzQixtQkFBbUI7UUFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXpDLGVBQWU7UUFDZixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUU7WUFDeEIsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ3ZCLFdBQVcsRUFBRSxTQUFTO1lBQ3RCLG1CQUFtQixFQUFFLE9BQU87U0FDN0IsQ0FBQyxDQUFDLElBQUk7OztRQUFDLGNBQU8sQ0FB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QUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLGlCQUFpQixFQUFFOzt3QkFDbkQsV0FBVyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO29CQUUvQyxVQUFVLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNOzs7OztvQkFBQyxVQUFDLEdBQUcsRUFBRSxLQUFLOzs0QkFFekMsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO3dCQUVsQyxHQUFHLENBQUMsSUFBSSxDQUFDOzRCQUNQLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDOzRCQUNsQixLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO3lCQUNyQixDQUFDLENBQUM7d0JBRUgsT0FBTyxHQUFHLENBQUM7b0JBQ2IsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxDQUFBO2lCQUVQO3FCQUFNO29CQUNMLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztpQkFDL0M7YUFDRjtRQUNILENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQzs7Ozs7O0lBRU8sZ0NBQVU7Ozs7O0lBQWxCLFVBQW1CLE1BQU07UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPOzs7O1FBQUMsVUFBQyxHQUFHO1lBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7YUFDcEI7UUFDSCxDQUFDLEVBQUMsQ0FBQTtJQUNKLENBQUM7SUFDSCxrQkFBQztBQUFELENBQUMsQUF2SUQsSUF1SUM7Ozs7Ozs7SUF0SUMsaUNBQXdCOzs7OztJQUd0Qiw4QkFBdUI7Ozs7O0lBQ3ZCLDZCQUE4Qjs7Ozs7SUFDOUIsbUNBQTBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGlzU3RyaW5nIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEZzRmlsdGVyQ29uZmlnSXRlbSwgSXRlbVR5cGUgfSBmcm9tICcuLi9tb2RlbHMvZmlsdGVyLWl0ZW0nO1xuXG5cbmV4cG9ydCBjbGFzcyBRdWVyeVBhcmFtcyB7XG4gIHByaXZhdGUgX3F1ZXJ5S2V5cyA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgX3JvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIF9maWx0ZXJJdGVtczogRnNGaWx0ZXJDb25maWdJdGVtW10sXG4gICkge1xuICAgIHRoaXMuX3F1ZXJ5UGFyYW1zVG9GaWx0ZXIodGhpcy5fcm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMsIHRoaXMuX2ZpbHRlckl0ZW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgcXVlcnkgd2l0aCBmaWx0ZXIgdmFsdWVzXG4gICAqIEBwYXJhbSBmaWx0ZXJQYXJhbXNcbiAgICovXG4gIHB1YmxpYyB1cGRhdGVRdWVyeVBhcmFtcyhmaWx0ZXJQYXJhbXMpIHtcbiAgICAvLyB0cmFuc2Zvcm0gc2VsZWN0ZWQgZmlsdGVyIHZhbHVlcyB0byBxdWVyeSBzdHJpbmdcbiAgICBjb25zdCBuZXdQYXJhbXMgPSB0aGlzLl9maWx0ZXJUb1F1ZXJ5UGFyYW1zKGZpbHRlclBhcmFtcywgdGhpcy5fZmlsdGVySXRlbXMpO1xuXG4gICAgLy8gUmVtb3ZlIGVtcHR5IGtleXNcbiAgICB0aGlzLl9jbGVhcktleXMobmV3UGFyYW1zKTtcblxuICAgIC8vIFN0b3JlIHF1ZXJ5IGtleXNcbiAgICB0aGlzLl9xdWVyeUtleXMgPSBPYmplY3Qua2V5cyhuZXdQYXJhbXMpO1xuXG4gICAgLy8gVXBkYXRlIHF1ZXJ5XG4gICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICByZWxhdGl2ZVRvOiB0aGlzLl9yb3V0ZSxcbiAgICAgIHF1ZXJ5UGFyYW1zOiBuZXdQYXJhbXMsXG4gICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnXG4gICAgfSkudGhlbigoKSA9PiB7fSk7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtYXRpb24gZm9yIHNlbGVjdGVkIGZpbHRlciB2YWx1ZXMgdG8gcXVlcnkgc3RyaW5nXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIGl0ZW1zXG4gICAqL1xuICBwcml2YXRlIF9maWx0ZXJUb1F1ZXJ5UGFyYW1zKHBhcmFtcywgaXRlbXM6IEZzRmlsdGVyQ29uZmlnSXRlbVtdKSB7XG4gICAgLy8gc2VsZWN0ZWQgZmlsdGVyIGtleXNcbiAgICBjb25zdCBmaWx0ZXJLZXlzID0gT2JqZWN0LmtleXMocGFyYW1zKTtcblxuICAgIHJldHVybiBmaWx0ZXJLZXlzLnJlZHVjZSgoYWNjLCBmaWx0ZXJLZXkpID0+IHtcblxuICAgICAgLy8gbG9va2luZyBmaWx0ZXIgaXRlbVxuICAgICAgY29uc3QgZmlsdGVySXRlbSA9IGl0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gZmlsdGVyS2V5KTtcblxuICAgICAgaWYgKGZpbHRlckl0ZW0pIHtcbiAgICAgICAgaWYgKGZpbHRlckl0ZW0udHlwZSA9PT0gSXRlbVR5cGUuUmFuZ2UpIHtcbiAgICAgICAgICBhY2NbZmlsdGVyS2V5XSA9IFtwYXJhbXNbZmlsdGVyS2V5XS5taW4sIHBhcmFtc1tmaWx0ZXJLZXldLm1heF0uam9pbignLCcpXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVySXRlbS50eXBlID09PSBJdGVtVHlwZS5TZWxlY3QgJiYgZmlsdGVySXRlbS5tdWx0aXBsZSAmJiBmaWx0ZXJJdGVtLm1vZGVsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBhY2NbZmlsdGVyS2V5XSA9IGZpbHRlckl0ZW0ubW9kZWwuam9pbignLCcpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlckl0ZW0udHlwZSA9PT0gSXRlbVR5cGUuQXV0b0NvbXBsZXRlKSB7XG4gICAgICAgICAgYWNjW2ZpbHRlcktleV0gPSBbZmlsdGVySXRlbS5tb2RlbC52YWx1ZSwgZmlsdGVySXRlbS5tb2RlbC5uYW1lXS5qb2luKCcsJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVySXRlbS50eXBlID09PSBJdGVtVHlwZS5BdXRvQ29tcGxldGVDaGlwcykge1xuICAgICAgICAgIGFjY1tmaWx0ZXJLZXldID0gZmlsdGVySXRlbS5tb2RlbC5tYXAoKGl0ZW0pID0+IFtpdGVtLnZhbHVlLCBpdGVtLm5hbWVdLmpvaW4oJywnKSkuam9pbignOycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjY1tmaWx0ZXJLZXldID0gcGFyYW1zW2ZpbHRlcktleV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgcXVlcnkgYW5kIHVwZGF0ZSBmaWx0ZXIgdmFsdWVzXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIGl0ZW1zXG4gICAqL1xuICBwcml2YXRlIF9xdWVyeVBhcmFtc1RvRmlsdGVyKHBhcmFtcywgaXRlbXM6IEZzRmlsdGVyQ29uZmlnSXRlbVtdKSB7XG4gICAgdGhpcy5fcXVlcnlLZXlzID0gT2JqZWN0LmtleXMocGFyYW1zKTtcblxuICAgIHJldHVybiB0aGlzLl9xdWVyeUtleXMuZm9yRWFjaCgocXVlcnlLZXkpID0+IHtcblxuICAgICAgY29uc3QgZmlsdGVySXRlbSA9IGl0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gcXVlcnlLZXkpO1xuXG4gICAgICBpZiAoZmlsdGVySXRlbSkge1xuICAgICAgICBpZiAoZmlsdGVySXRlbS50eXBlID09PSBJdGVtVHlwZS5TZWxlY3QgJiYgZmlsdGVySXRlbS5tdWx0aXBsZSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHBhcmFtc1txdWVyeUtleV1cbiAgICAgICAgICAgIC5zcGxpdCgnLCcpO1xuXG4gICAgICAgICAgZmlsdGVySXRlbS5wYXJzZUFuZFNldFZhbHVlKHZhbHVlcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVySXRlbS50eXBlID09PSBJdGVtVHlwZS5SYW5nZSkge1xuICAgICAgICAgIGlmIChwYXJhbXNbcXVlcnlLZXldICYmIGlzU3RyaW5nKHBhcmFtc1txdWVyeUtleV0pKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJQYXJ0cyA9IHBhcmFtc1txdWVyeUtleV0uc3BsaXQoJywnKTtcbiAgICAgICAgICAgIGZpbHRlckl0ZW0ubW9kZWwgPSB7XG4gICAgICAgICAgICAgIG1pbjogZmlsdGVyUGFydHNbMF0sXG4gICAgICAgICAgICAgIG1heDogZmlsdGVyUGFydHNbMV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlckl0ZW0udHlwZSA9PT0gSXRlbVR5cGUuQ2hpcHMpIHtcbiAgICAgICAgICBjb25zdCBjaGlwSWRzID0gcGFyYW1zW3F1ZXJ5S2V5XVxuICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgIC5tYXAoKHZhbHVlKSA9PiArdmFsdWUpO1xuXG4gICAgICAgICAgZmlsdGVySXRlbS5wYXJzZUFuZFNldFZhbHVlKGNoaXBJZHMpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlckl0ZW0udHlwZSA9PT0gSXRlbVR5cGUuQ2hlY2tib3gpIHtcbiAgICAgICAgICBmaWx0ZXJJdGVtLnBhcnNlQW5kU2V0VmFsdWUocGFyYW1zW3F1ZXJ5S2V5XSA9PT0gJ3RydWUnKTtcbiAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJJdGVtLnR5cGUgPT09IEl0ZW1UeXBlLkF1dG9Db21wbGV0ZSkge1xuICAgICAgICAgIGNvbnN0IGZpbHRlclBhcnRzID0gcGFyYW1zW3F1ZXJ5S2V5XS5zcGxpdCgnLCcpO1xuXG4gICAgICAgICAgZmlsdGVySXRlbS5tb2RlbCA9IHtcbiAgICAgICAgICAgIG5hbWU6IGZpbHRlclBhcnRzWzFdLFxuICAgICAgICAgICAgdmFsdWU6ICtmaWx0ZXJQYXJ0c1swXVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJJdGVtLnR5cGUgPT09IEl0ZW1UeXBlLkF1dG9Db21wbGV0ZUNoaXBzKSB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyUGFydHMgPSBwYXJhbXNbcXVlcnlLZXldLnNwbGl0KCc7Jyk7XG5cbiAgICAgICAgICBmaWx0ZXJJdGVtLm1vZGVsID0gZmlsdGVyUGFydHMucmVkdWNlKChhY2MsIHZhbHVlKSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IGNoaXBQYXJ0cyA9IHZhbHVlLnNwbGl0KCcsJyk7XG5cbiAgICAgICAgICAgIGFjYy5wdXNoKHtcbiAgICAgICAgICAgICAgbmFtZTogY2hpcFBhcnRzWzFdLFxuICAgICAgICAgICAgICB2YWx1ZTogK2NoaXBQYXJ0c1swXSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sIFtdKVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsdGVySXRlbS5wYXJzZUFuZFNldFZhbHVlKHBhcmFtc1txdWVyeUtleV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9jbGVhcktleXMocGFyYW1zKSB7XG4gICAgdGhpcy5fcXVlcnlLZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKCFwYXJhbXNba2V5XSkge1xuICAgICAgICBwYXJhbXNba2V5XSA9IG51bGw7XG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuIl19