UNPKG

@firestitch/filter

Version:
214 lines 18.9 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'; export class QueryParams { /** * @param {?} _router * @param {?} _route * @param {?} _filterItems */ constructor(_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 * @return {?} */ updateQueryParams(filterParams) { // transform selected filter values to query string /** @type {?} */ const 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([], { replaceUrl: true, relativeTo: this._route, queryParams: newParams, queryParamsHandling: 'merge' }).then((/** * @return {?} */ () => { })); } /** * Transformation for selected filter values to query string * @private * @param {?} params * @param {?} items * @return {?} */ _filterToQueryParams(params, items) { // selected filter keys /** @type {?} */ const filterKeys = Object.keys(params); return filterKeys.reduce((/** * @param {?} acc * @param {?} filterKey * @return {?} */ (acc, filterKey) => { // looking filter item /** @type {?} */ const filterItem = items.find((/** * @param {?} item * @return {?} */ (item) => item.name === filterKey)); if (filterItem) { if (filterItem.type === ItemType.Range) { acc[filterKey] = [params[filterKey].min, params[filterKey].max].join(','); } else if (filterItem.isTypeSelect() && filterItem.multiple && filterItem.model && filterItem.model.length > 0) { acc[filterKey] = filterItem.model.join(','); } else if (filterItem.isTypeAutocomplete()) { acc[filterKey] = [filterItem.model.value, filterItem.model.name].join(','); } else if (filterItem.type === ItemType.AutoCompleteChips) { acc[filterKey] = filterItem.model.map((/** * @param {?} item * @return {?} */ (item) => [item.value, item.name].join(','))).join(';'); } else { acc[filterKey] = params[filterKey]; } } return acc; }), {}); } /** * Parse query and update filter values * @private * @param {?} params * @param {?} items * @return {?} */ _queryParamsToFilter(params, items) { this._queryKeys = Object.keys(params); return this._queryKeys.forEach((/** * @param {?} queryKey * @return {?} */ (queryKey) => { /** @type {?} */ const filterItem = items.find((/** * @param {?} item * @return {?} */ (item) => item.name === queryKey)); if (filterItem) { if (filterItem.type === ItemType.Select && filterItem.multiple) { /** @type {?} */ const values = params[queryKey] .split(','); filterItem.parseAndSetValue(values); } else if (filterItem.type === ItemType.Range) { if (params[queryKey] && isString(params[queryKey])) { /** @type {?} */ const filterParts = params[queryKey].split(','); filterItem.model = { min: filterParts[0], max: filterParts[1] }; } } else if (filterItem.type === ItemType.Chips) { /** @type {?} */ const chipIds = params[queryKey] .split(',') .map((/** * @param {?} value * @return {?} */ (value) => +value)); filterItem.parseAndSetValue(chipIds); } else if (filterItem.type === ItemType.Checkbox) { filterItem.parseAndSetValue(params[queryKey] === 'true'); } else if (filterItem.type === ItemType.AutoComplete) { /** @type {?} */ const filterParts = params[queryKey].split(','); filterItem.model = { name: filterParts[1], value: +filterParts[0] }; } else if (filterItem.type === ItemType.AutoCompleteChips) { /** @type {?} */ const filterParts = params[queryKey].split(';'); filterItem.model = filterParts.reduce((/** * @param {?} acc * @param {?} value * @return {?} */ (acc, value) => { /** @type {?} */ const chipParts = value.split(','); acc.push({ name: chipParts[1], value: +chipParts[0], }); return acc; }), []); } else { filterItem.parseAndSetValue(params[queryKey]); } } })); } /** * @private * @param {?} params * @return {?} */ _clearKeys(params) { this._queryKeys.forEach((/** * @param {?} key * @return {?} */ (key) => { if (!params[key]) { params[key] = null; } })); } } 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcGFyYW1zLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGZpcmVzdGl0Y2gvZmlsdGVyLyIsInNvdXJjZXMiOlsiYXBwL21vZGVscy9xdWVyeS1wYXJhbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLE9BQU8sRUFBYSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEQsT0FBTyxFQUFzQixRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUdyRSxNQUFNLE9BQU8sV0FBVzs7Ozs7O0lBR3RCLFlBQ1UsT0FBZSxFQUNmLE1BQXNCLEVBQ3RCLFlBQWtDO1FBRmxDLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBc0I7UUFMcEMsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQU90QixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqRixDQUFDOzs7Ozs7SUFNTSxpQkFBaUIsQ0FBQyxZQUFZOzs7Y0FFN0IsU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUU1RSxvQkFBb0I7UUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUzQixtQkFBbUI7UUFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXpDLGVBQWU7UUFDZixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUU7WUFDeEIsVUFBVSxFQUFFLElBQUk7WUFDaEIsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ3ZCLFdBQVcsRUFBRSxTQUFTO1lBQ3RCLG1CQUFtQixFQUFFLE9BQU87U0FDN0IsQ0FBQyxDQUFDLElB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aUIsRUFBRTs7MEJBQ25ELFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztvQkFFL0MsVUFBVSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsTUFBTTs7Ozs7b0JBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7OzhCQUU3QyxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7d0JBRWxDLEdBQUcsQ0FBQyxJQUFJLENBQUM7NEJBQ1AsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7NEJBQ2xCLEtBQUssRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7eUJBQ3JCLENBQUMsQ0FBQzt3QkFFSCxPQUFPLEdBQUcsQ0FBQztvQkFDYixDQUFDLEdBQUUsRUFBRSxDQUFDLENBQUE7aUJBRVA7cUJBQU07b0JBQ0wsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2lCQUMvQzthQUNGO1FBQ0gsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDOzs7Ozs7SUFFTyxVQUFVLENBQUMsTUFBTTtRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU87Ozs7UUFBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7YUFDcEI7UUFDSCxDQUFDLEVBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRjs7Ozs7O0lBdklDLGlDQUF3Qjs7Ozs7SUFHdEIsOEJBQXVCOzs7OztJQUN2Qiw2QkFBOEI7Ozs7O0lBQzlCLG1DQUEwQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBpc1N0cmluZyB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBGc0ZpbHRlckNvbmZpZ0l0ZW0sIEl0ZW1UeXBlIH0gZnJvbSAnLi4vbW9kZWxzL2ZpbHRlci1pdGVtJztcblxuXG5leHBvcnQgY2xhc3MgUXVlcnlQYXJhbXMge1xuICBwcml2YXRlIF9xdWVyeUtleXMgPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIF9yb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBfZmlsdGVySXRlbXM6IEZzRmlsdGVyQ29uZmlnSXRlbVtdLFxuICApIHtcbiAgICB0aGlzLl9xdWVyeVBhcmFtc1RvRmlsdGVyKHRoaXMuX3JvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLCB0aGlzLl9maWx0ZXJJdGVtcyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHF1ZXJ5IHdpdGggZmlsdGVyIHZhbHVlc1xuICAgKiBAcGFyYW0gZmlsdGVyUGFyYW1zXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlUXVlcnlQYXJhbXMoZmlsdGVyUGFyYW1zKSB7XG4gICAgLy8gdHJhbnNmb3JtIHNlbGVjdGVkIGZpbHRlciB2YWx1ZXMgdG8gcXVlcnkgc3RyaW5nXG4gICAgY29uc3QgbmV3UGFyYW1zID0gdGhpcy5fZmlsdGVyVG9RdWVyeVBhcmFtcyhmaWx0ZXJQYXJhbXMsIHRoaXMuX2ZpbHRlckl0ZW1zKTtcblxuICAgIC8vIFJlbW92ZSBlbXB0eSBrZXlzXG4gICAgdGhpcy5fY2xlYXJLZXlzKG5ld1BhcmFtcyk7XG5cbiAgICAvLyBTdG9yZSBxdWVyeSBrZXlzXG4gICAgdGhpcy5fcXVlcnlLZXlzID0gT2JqZWN0LmtleXMobmV3UGFyYW1zKTtcblxuICAgIC8vIFVwZGF0ZSBxdWVyeVxuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMuX3JvdXRlLFxuICAgICAgcXVlcnlQYXJhbXM6IG5ld1BhcmFtcyxcbiAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZSdcbiAgICB9KS50aGVuKCgpID0+IHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm1hdGlvbiBmb3Igc2VsZWN0ZWQgZmlsdGVyIHZhbHVlcyB0byBxdWVyeSBzdHJpbmdcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gaXRlbXNcbiAgICovXG4gIHByaXZhdGUgX2ZpbHRlclRvUXVlcnlQYXJhbXMocGFyYW1zLCBpdGVtczogRnNGaWx0ZXJDb25maWdJdGVtW10pIHtcbiAgICAvLyBzZWxlY3RlZCBmaWx0ZXIga2V5c1xuICAgIGNvbnN0IGZpbHRlcktleXMgPSBPYmplY3Qua2V5cyhwYXJhbXMpO1xuXG4gICAgcmV0dXJuIGZpbHRlcktleXMucmVkdWNlKChhY2MsIGZpbHRlcktleSkgPT4ge1xuXG4gICAgICAvLyBsb29raW5nIGZpbHRlciBpdGVtXG4gICAgICBjb25zdCBmaWx0ZXJJdGVtID0gaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBmaWx0ZXJLZXkpO1xuXG4gICAgICBpZiAoZmlsdGVySXRlbSkge1xuICAgICAgICBpZiAoZmlsdGVySXRlbS50eXBlID09PSBJdGVtVHlwZS5SYW5nZSkge1xuICAgICAgICAgIGFjY1tmaWx0ZXJLZXldID0gW3BhcmFtc1tmaWx0ZXJLZXldLm1pbiwgcGFyYW1zW2ZpbHRlcktleV0ubWF4XS5qb2luKCcsJylcbiAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJJdGVtLmlzVHlwZVNlbGVjdCgpICYmIGZpbHRlckl0ZW0ubXVsdGlwbGUgJiYgZmlsdGVySXRlbS5tb2RlbCAmJiBmaWx0ZXJJdGVtLm1vZGVsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBhY2NbZmlsdGVyS2V5XSA9IGZpbHRlckl0ZW0ubW9kZWwuam9pbignLCcpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlckl0ZW0uaXNUeXBlQXV0b2NvbXBsZXRlKCkpIHtcbiAgICAgICAgICBhY2NbZmlsdGVyS2V5XSA9IFtmaWx0ZXJJdGVtLm1vZGVsLnZhbHVlLCBmaWx0ZXJJdGVtLm1vZGVsLm5hbWVdLmpvaW4oJywnKTtcbiAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJJdGVtLnR5cGUgPT09IEl0ZW1UeXBlLkF1dG9Db21wbGV0ZUNoaXBzKSB7XG4gICAgICAgICAgYWNjW2ZpbHRlcktleV0gPSBmaWx0ZXJJdGVtLm1vZGVsLm1hcCgoaXRlbSkgPT4gW2l0ZW0udmFsdWUsIGl0ZW0ubmFtZV0uam9pbignLCcpKS5qb2luKCc7Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWNjW2ZpbHRlcktleV0gPSBwYXJhbXNbZmlsdGVyS2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBxdWVyeSBhbmQgdXBkYXRlIGZpbHRlciB2YWx1ZXNcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gaXRlbXNcbiAgICovXG4gIHByaXZhdGUgX3F1ZXJ5UGFyYW1zVG9GaWx0ZXIocGFyYW1zLCBpdGVtczogRnNGaWx0ZXJDb25maWdJdGVtW10pIHtcbiAgICB0aGlzLl9xdWVyeUtleXMgPSBPYmplY3Qua2V5cyhwYXJhbXMpO1xuXG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5S2V5cy5mb3JFYWNoKChxdWVyeUtleSkgPT4ge1xuXG4gICAgICBjb25zdCBmaWx0ZXJJdGVtID0gaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBxdWVyeUtleSk7XG5cbiAgICAgIGlmIChmaWx0ZXJJdGVtKSB7XG4gICAgICAgIGlmIChmaWx0ZXJJdGVtLnR5cGUgPT09IEl0ZW1UeXBlLlNlbGVjdCAmJiBmaWx0ZXJJdGVtLm11bHRpcGxlKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWVzID0gcGFyYW1zW3F1ZXJ5S2V5XVxuICAgICAgICAgICAgLnNwbGl0KCcsJyk7XG5cbiAgICAgICAgICBmaWx0ZXJJdGVtLnBhcnNlQW5kU2V0VmFsdWUodmFsdWVzKTtcbiAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJJdGVtLnR5cGUgPT09IEl0ZW1UeXBlLlJhbmdlKSB7XG4gICAgICAgICAgaWYgKHBhcmFtc1txdWVyeUtleV0gJiYgaXNTdHJpbmcocGFyYW1zW3F1ZXJ5S2V5XSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlclBhcnRzID0gcGFyYW1zW3F1ZXJ5S2V5XS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgZmlsdGVySXRlbS5tb2RlbCA9IHtcbiAgICAgICAgICAgICAgbWluOiBmaWx0ZXJQYXJ0c1swXSxcbiAgICAgICAgICAgICAgbWF4OiBmaWx0ZXJQYXJ0c1sxXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVySXRlbS50eXBlID09PSBJdGVtVHlwZS5DaGlwcykge1xuICAgICAgICAgIGNvbnN0IGNoaXBJZHMgPSBwYXJhbXNbcXVlcnlLZXldXG4gICAgICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAgICAgLm1hcCgodmFsdWUpID0+ICt2YWx1ZSk7XG5cbiAgICAgICAgICBmaWx0ZXJJdGVtLnBhcnNlQW5kU2V0VmFsdWUoY2hpcElkcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVySXRlbS50eXBlID09PSBJdGVtVHlwZS5DaGVja2JveCkge1xuICAgICAgICAgIGZpbHRlckl0ZW0ucGFyc2VBbmRTZXRWYWx1ZShwYXJhbXNbcXVlcnlLZXldID09PSAndHJ1ZScpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlckl0ZW0udHlwZSA9PT0gSXRlbVR5cGUuQXV0b0NvbXBsZXRlKSB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyUGFydHMgPSBwYXJhbXNbcXVlcnlLZXldLnNwbGl0KCcsJyk7XG5cbiAgICAgICAgICBmaWx0ZXJJdGVtLm1vZGVsID0ge1xuICAgICAgICAgICAgbmFtZTogZmlsdGVyUGFydHNbMV0sXG4gICAgICAgICAgICB2YWx1ZTogK2ZpbHRlclBhcnRzWzBdXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlckl0ZW0udHlwZSA9PT0gSXRlbVR5cGUuQXV0b0NvbXBsZXRlQ2hpcHMpIHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJQYXJ0cyA9IHBhcmFtc1txdWVyeUtleV0uc3BsaXQoJzsnKTtcblxuICAgICAgICAgIGZpbHRlckl0ZW0ubW9kZWwgPSBmaWx0ZXJQYXJ0cy5yZWR1Y2UoKGFjYywgdmFsdWUpID0+IHtcblxuICAgICAgICAgICAgY29uc3QgY2hpcFBhcnRzID0gdmFsdWUuc3BsaXQoJywnKTtcblxuICAgICAgICAgICAgYWNjLnB1c2goe1xuICAgICAgICAgICAgICBuYW1lOiBjaGlwUGFydHNbMV0sXG4gICAgICAgICAgICAgIHZhbHVlOiArY2hpcFBhcnRzWzBdLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgfSwgW10pXG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWx0ZXJJdGVtLnBhcnNlQW5kU2V0VmFsdWUocGFyYW1zW3F1ZXJ5S2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2NsZWFyS2V5cyhwYXJhbXMpIHtcbiAgICB0aGlzLl9xdWVyeUtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoIXBhcmFtc1trZXldKSB7XG4gICAgICAgIHBhcmFtc1trZXldID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG4iXX0=