UNPKG

wngx-filter

Version:

Angular 7 generic components for array filter in *ngFor directive.

250 lines 18.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Pipe } from '@angular/core'; import { ASCIIFolder } from './ASCIIFolder'; /** * @record */ export function FilterParam() { } if (false) { /** @type {?} */ FilterParam.prototype.field; /** @type {?} */ FilterParam.prototype.value; } var WfilterPipe = /** @class */ (function () { function WfilterPipe() { } /** * @param {?} values * @param {?} filter * @return {?} */ WfilterPipe.prototype.transform = /** * @param {?} values * @param {?} filter * @return {?} */ function (values, filter) { // if values is not array, then return it... if (values && !(values instanceof Array)) { return values; } // if filter is null , then return value... if (!filter) { return values; } if (filter instanceof Array) { return this._checkComplexType(values, filter); } else { return this._checkSimpleType(values, filter); } }; /** * @private * @param {?} values * @param {?} filter * @return {?} */ WfilterPipe.prototype._checkSimpleType = /** * @private * @param {?} values * @param {?} filter * @return {?} */ function (values, filter) { var _this = this; if (!values || !filter) { return values; } /** @type {?} */ var normalizedValues = tslib_1.__spread(values); /** @type {?} */ var normalizedSearch = this._replaceSpecialChars(filter.toString().toLowerCase()); return normalizedValues.filter(function (item) { return _this._replaceSpecialChars(item.toString()) .toLowerCase() .includes(normalizedSearch); }); }; /** * @private * @param {?} values * @param {?} filter * @return {?} */ WfilterPipe.prototype._checkComplexType = /** * @private * @param {?} values * @param {?} filter * @return {?} */ function (values, filter) { var _this = this; if (!values || !filter || !filter.length) { return values; } /** @type {?} */ var result = []; // find in all records values.forEach(function (row) { /** @type {?} */ var match = false; // find in all filters in the array of filters filter.forEach(function (field) { // lê o valor da propriedade /** @type {?} */ var v = row[field.field]; // Se o valor for um array, então faz a chamada recursiva if (v !== null && v !== undefined && v instanceof Array) { /** @type {?} */ var temp = _this.transform(v, field.value); // se houver registro, é pq deve participar do resultado match = match || (temp !== null && temp !== undefined && temp.length > 0); } else { match = match || _this._checkValue(row, field); } }); if (match) { result.push(row); // add row in return } }); return result; }; /** * @private * @param {?} item * @param {?} filter * @return {?} */ WfilterPipe.prototype._checkValue = /** * @private * @param {?} item * @param {?} filter * @return {?} */ function (item, filter) { if (!filter || !filter.field || !filter.value) { return true; } if (this._existDot(filter.field)) { return this._parseValue(item, filter.value, filter.field); // return false; } else { /** @type {?} */ var value = item[filter.field]; if (value) { value = this._replaceSpecialChars(item[filter.field].toString()); /** @type {?} */ var normalizedSearch = this._replaceSpecialChars(filter.value.toString().toLowerCase()); return value.toLowerCase().includes(normalizedSearch); } else { return false; } } }; /** * @private * @param {?} reference * @param {?} search * @param {?} filter * @return {?} */ WfilterPipe.prototype._parseValue = /** * @private * @param {?} reference * @param {?} search * @param {?} filter * @return {?} */ function (reference, search, filter) { /** @type {?} */ var fields = filter.split('.'); return this._existFieldValue(reference, search, fields, 0); }; /** * @private * @param {?} path * @return {?} */ WfilterPipe.prototype._existDot = /** * @private * @param {?} path * @return {?} */ function (path) { return path.indexOf('.') > -1; }; /** * @private * @param {?} obj * @param {?} search * @param {?} fieldFind * @param {?} indexFind * @return {?} */ WfilterPipe.prototype._existFieldValue = /** * @private * @param {?} obj * @param {?} search * @param {?} fieldFind * @param {?} indexFind * @return {?} */ function (obj, search, fieldFind, indexFind) { // Lê o valor da propriedade /** @type {?} */ var ref = obj[fieldFind[indexFind]]; // Se estiver no último nível... if (indexFind === fieldFind.length - 1) { // Se tiver valor, confere se contém o que está procurando... if (ref) { /** @type {?} */ var value = this._replaceSpecialChars(ref.toString()); /** @type {?} */ var normalizedSearch = this._replaceSpecialChars(search.toString().toLowerCase()); return value.toLowerCase().includes(normalizedSearch); } else { return false; } // Não está no último nível mas há valor na referência } else if (ref) { return this._existFieldValue(ref, search, fieldFind, ++indexFind); // Não está no último nível e não há valor na referência (null) } else { return false; } }; /** * @private * @param {?} str * @return {?} */ WfilterPipe.prototype._replaceSpecialChars = /** * @private * @param {?} str * @return {?} */ function (str) { return ASCIIFolder.fold(str); }; WfilterPipe.decorators = [ { type: Pipe, args: [{ name: 'wfilter', pure: true, },] } ]; return WfilterPipe; }()); export { WfilterPipe }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ZpbHRlci5waXBlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vd25neC1maWx0ZXIvIiwic291cmNlcyI6WyJsaWIvcGlwZXMvd2ZpbHRlci5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQUU1QyxpQ0FHQzs7O0lBRkMsNEJBQWM7O0lBQ2QsNEJBQThCOztBQUdoQztJQUFBO0lBcUlBLENBQUM7Ozs7OztJQS9IQywrQkFBUzs7Ozs7SUFBVCxVQUFVLE1BQWEsRUFBRSxNQUF1QztRQUM5RCw0Q0FBNEM7UUFDNUMsSUFBSSxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sWUFBWSxLQUFLLENBQUMsRUFBRTtZQUN4QyxPQUFPLE1BQU0sQ0FBQztTQUNmO1FBRUQsMkNBQTJDO1FBQzNDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxPQUFPLE1BQU0sQ0FBQztTQUNmO1FBRUQsSUFBSSxNQUFNLFlBQVksS0FBSyxFQUFFO1lBQzNCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztTQUMvQzthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzlDO0lBQ0gsQ0FBQzs7Ozs7OztJQUVPLHNDQUFnQjs7Ozs7O0lBQXhCLFVBQXlCLE1BQWEsRUFBRSxNQUF1QjtRQUEvRCxpQkFjQztRQWJDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDdEIsT0FBTyxNQUFNLENBQUM7U0FDZjs7WUFFSyxnQkFBZ0Isb0JBQWMsTUFBTSxDQUFDOztZQUNyQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQ2hELE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FD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Q0FBb0I7Ozs7O0lBQTVCLFVBQTZCLEdBQVc7UUFDdEMsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7O2dCQW5JRixJQUFJLFNBQUM7b0JBQ0osSUFBSSxFQUFFLFNBQVM7b0JBQ2YsSUFBSSxFQUFFLElBQUk7aUJBQ1g7O0lBa0lELGtCQUFDO0NBQUEsQUFySUQsSUFxSUM7U0FqSVksV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFTQ0lJRm9sZGVyIH0gZnJvbSAnLi9BU0NJSUZvbGRlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyUGFyYW0ge1xuICBmaWVsZDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nIHwgRmlsdGVyUGFyYW1bXTtcbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnd2ZpbHRlcicsXG4gIHB1cmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFdmaWx0ZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgdHJhbnNmb3JtKHZhbHVlczogYW55W10sIGZpbHRlcjogRmlsdGVyUGFyYW1bXSB8IHN0cmluZyB8IG51bWJlcik6IGFueSB7XG4gICAgLy8gaWYgdmFsdWVzIGlzIG5vdCBhcnJheSwgdGhlbiByZXR1cm4gaXQuLi5cbiAgICBpZiAodmFsdWVzICYmICEodmFsdWVzIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH1cblxuICAgIC8vIGlmIGZpbHRlciBpcyBudWxsICwgdGhlbiByZXR1cm4gdmFsdWUuLi5cbiAgICBpZiAoIWZpbHRlcikge1xuICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9XG5cbiAgICBpZiAoZmlsdGVyIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jaGVja0NvbXBsZXhUeXBlKHZhbHVlcywgZmlsdGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrU2ltcGxlVHlwZSh2YWx1ZXMsIGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2hlY2tTaW1wbGVUeXBlKHZhbHVlczogYW55W10sIGZpbHRlcjogc3RyaW5nIHwgbnVtYmVyICk6IGFueSB7XG4gICAgaWYgKCF2YWx1ZXMgfHwgIWZpbHRlcikge1xuICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVkVmFsdWVzOiBhbnlbXSA9IFsuLi52YWx1ZXNdO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTZWFyY2ggPSB0aGlzLl9yZXBsYWNlU3BlY2lhbENoYXJzKFxuICAgICAgZmlsdGVyLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICApO1xuICAgIHJldHVybiBub3JtYWxpemVkVmFsdWVzLmZpbHRlcigoaXRlbSkgPT5cbiAgICAgIHRoaXMuX3JlcGxhY2VTcGVjaWFsQ2hhcnMoaXRlbS50b1N0cmluZygpKVxuICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAuaW5jbHVkZXMobm9ybWFsaXplZFNlYXJjaCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrQ29tcGxleFR5cGUodmFsdWVzLCBmaWx0ZXI6IEZpbHRlclBhcmFtW10pOiBhbnkge1xuICAgIGlmICghdmFsdWVzIHx8ICFmaWx0ZXIgfHwgIWZpbHRlci5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICAvLyBmaW5kIGluIGFsbCByZWNvcmRzXG4gICAgdmFsdWVzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgbGV0IG1hdGNoID0gZmFsc2U7XG4gICAgICAvLyBmaW5kIGluIGFsbCBmaWx0ZXJzIGluIHRoZSBhcnJheSBvZiBmaWx0ZXJzXG4gICAgICBmaWx0ZXIuZm9yRWFjaCgoZmllbGQpID0+IHtcblxuICAgICAgICAvLyBsw6ogbyB2YWxvciBkYSBwcm9wcmllZGFkZVxuICAgICAgICBjb25zdCB2ID0gcm93W2ZpZWxkLmZpZWxkXTtcbiAgICAgICAgLy8gU2UgbyB2YWxvciBmb3IgdW0gYXJyYXksIGVudMOjbyBmYXogYSBjaGFtYWRhIHJlY3Vyc2l2YVxuICAgICAgICBpZiAodiAhPT0gbnVsbCAmJiB2ICE9PSB1bmRlZmluZWQgJiYgdiBpbnN0YW5jZW9mIEFycmF5KSB7XG5cbiAgICAgICAgICBjb25zdCB0ZW1wOiBhbnlbXSA9IHRoaXMudHJhbnNmb3JtKHYsIGZpZWxkLnZhbHVlKTtcbiAgICAgICAgICAvLyBzZSBob3V2ZXIgcmVnaXN0cm8sIMOpIHBxIGRldmUgcGFydGljaXBhciBkbyByZXN1bHRhZG9cbiAgICAgICAgICBtYXRjaCA9IG1hdGNoIHx8ICh0ZW1wICE9PSBudWxsICYmIHRlbXAgIT09IHVuZGVmaW5lZCAmJiB0ZW1wLmxlbmd0aCA+IDApO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWF0Y2ggPSBtYXRjaCB8fCB0aGlzLl9jaGVja1ZhbHVlKHJvdywgZmllbGQpO1xuICAgICAgICB9XG5cbiAgICAgIH0pO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHJvdyk7IC8vIGFkZCByb3cgaW4gcmV0dXJuXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBfY2hlY2tWYWx1ZShpdGVtLCBmaWx0ZXIpOiBib29sZWFuIHtcbiAgICBpZiAoIWZpbHRlciB8fCAhZmlsdGVyLmZpZWxkIHx8ICFmaWx0ZXIudmFsdWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZXhpc3REb3QoZmlsdGVyLmZpZWxkKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlVmFsdWUoaXRlbSwgZmlsdGVyLnZhbHVlLCBmaWx0ZXIuZmllbGQpO1xuICAgICAgLy8gcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdmFsdWUgPSBpdGVtW2ZpbHRlci5maWVsZF07XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLl9yZXBsYWNlU3BlY2lhbENoYXJzKGl0ZW1bZmlsdGVyLmZpZWxkXS50b1N0cmluZygpKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFNlYXJjaCA9IHRoaXMuX3JlcGxhY2VTcGVjaWFsQ2hhcnMoXG4gICAgICAgICAgZmlsdGVyLnZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobm9ybWFsaXplZFNlYXJjaCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VWYWx1ZShyZWZlcmVuY2UsIHNlYXJjaCwgZmlsdGVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZmllbGRzID0gZmlsdGVyLnNwbGl0KCcuJyk7XG4gICAgcmV0dXJuIHRoaXMuX2V4aXN0RmllbGRWYWx1ZShyZWZlcmVuY2UsIHNlYXJjaCwgZmllbGRzLCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgX2V4aXN0RG90KHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwYXRoLmluZGV4T2YoJy4nKSA+IC0xO1xuICB9XG5cbiAgcHJpdmF0ZSBfZXhpc3RGaWVsZFZhbHVlKG9iaiwgc2VhcmNoLCBmaWVsZEZpbmQsIGluZGV4RmluZDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgLy8gTMOqIG8gdmFsb3IgZGEgcHJvcHJpZWRhZGVcbiAgICBjb25zdCByZWYgPSBvYmpbZmllbGRGaW5kW2luZGV4RmluZF1dO1xuICAgIC8vIFNlIGVzdGl2ZXIgbm8gw7psdGltbyBuw612ZWwuLi5cbiAgICBpZiAoaW5kZXhGaW5kID09PSBmaWVsZEZpbmQubGVuZ3RoIC0gMSkge1xuICAgICAgLy8gU2UgdGl2ZXIgdmFsb3IsIGNvbmZlcmUgc2UgY29udMOpbSBvIHF1ZSBlc3TDoSBwcm9jdXJhbmRvLi4uXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fcmVwbGFjZVNwZWNpYWxDaGFycyhyZWYudG9TdHJpbmcoKSk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTZWFyY2ggPSB0aGlzLl9yZXBsYWNlU3BlY2lhbENoYXJzKFxuICAgICAgICAgIHNlYXJjaC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5vcm1hbGl6ZWRTZWFyY2gpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gTsOjbyBlc3TDoSBubyDDumx0aW1vIG7DrXZlbCBtYXMgaMOhIHZhbG9yIG5hIHJlZmVyw6puY2lhXG4gICAgfSBlbHNlIGlmIChyZWYpIHtcbiAgICAgIHJldHVybiB0aGlzLl9leGlzdEZpZWxkVmFsdWUocmVmLCBzZWFyY2gsIGZpZWxkRmluZCwgKytpbmRleEZpbmQpO1xuICAgICAgLy8gTsOjbyBlc3TDoSBubyDDumx0aW1vIG7DrXZlbCBlIG7Do28gaMOhIHZhbG9yIG5hIHJlZmVyw6puY2lhIChudWxsKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVwbGFjZVNwZWNpYWxDaGFycyhzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBBU0NJSUZvbGRlci5mb2xkKHN0cik7XG4gIH1cblxufVxuXG4vKipcbiAqIGZ1bmN0aW9uIGNoZWNrVHlwZUlzT2JqZWN0KHY6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2ICE9PSBudWxsO1xuICAgfVxuICovXG4iXX0=