@firestitch/filter
Version:
248 lines • 20.1 kB
JavaScript
/**
* @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