w-ng5
Version:
Angular Generic Filters to *ngFor
164 lines (157 loc) • 4.28 kB
JavaScript
import { Pipe, NgModule } from '@angular/core';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* @record
*/
class FilterPipe {
/**
* @param {?} values
* @param {?} filter
* @return {?}
*/
transform(values, filter) {
if (filter instanceof Array) {
return this.checkComplexType(values, filter);
}
else {
return this.checkSimpleType(values, filter);
}
}
/**
* @param {?} values
* @param {?} filter
* @return {?}
*/
checkSimpleType(values, filter) {
if (!values || !filter) {
return values;
}
return values.filter(item => item.toString().toLowerCase().indexOf(filter.toString().toLowerCase()) !== -1);
}
/**
* @param {?} values
* @param {?} filter
* @return {?}
*/
checkComplexType(values, filter) {
if (!values || !filter || filter.length === 0) {
return values;
}
const /** @type {?} */ result = [];
// find in all records
values.forEach(row => {
let /** @type {?} */ match = false;
// find in all filters in the array of filters
filter.forEach(field => {
match = match || this.checkValue(row, field);
});
if (match) {
result.push(row); // add row in return
}
});
return result;
}
/**
* @param {?} item
* @param {?} filter
* @return {?}
*/
checkValue(item, filter) {
if (!filter || !filter.field || !filter.value || filter.value === '') {
return true;
}
if (this.existDot(filter.field)) {
return this.parseValue(item, filter.value, filter.field);
// return false;
}
else {
if (item[filter.field]) {
return item[filter.field].toString().toLowerCase().indexOf(filter.value.toString().toLowerCase()) !== -1;
}
else {
return false;
}
}
}
/**
* @param {?} reference
* @param {?} search
* @param {?} filter
* @return {?}
*/
parseValue(reference, search, filter) {
const /** @type {?} */ fields = filter.split('.');
return this.existFieldValue(reference, search, fields, 0);
}
/**
* @param {?} path
* @return {?}
*/
existDot(path) {
return path.indexOf('.') > -1;
}
/**
* @param {?} obj
* @param {?} search
* @param {?} fieldFind
* @param {?} indexFind
* @return {?}
*/
existFieldValue(obj, search, fieldFind, indexFind) {
// Lê o valor da propriedade
const /** @type {?} */ 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) {
return ref.toString().toLowerCase().indexOf(search.toString().toLowerCase()) !== -1;
}
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;
}
}
}
FilterPipe.decorators = [
{ type: Pipe, args: [{
name: 'filter',
pure: true
},] },
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
class PipesModule {
}
PipesModule.decorators = [
{ type: NgModule, args: [{
declarations: [FilterPipe],
exports: [FilterPipe],
providers: [FilterPipe]
},] },
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* Generated bundle index. Do not edit.
*/
export { FilterPipe, PipesModule };
//# sourceMappingURL=w-ng5.js.map