Perform Mat-table filterPredicate with multiple fields (all fields)
long version, too much duplicated code
this.dataSource.filterPredicate = ((data: any, filter: string) => {
let searchTerm = JSON.parse(filter);
// assume searchTerm = { a: '', b: 'b-keyword', c: '', d: 'd-keyword', e: ''}
const a = !filter.a || data.a.toString().toLowerCase().includes(filter.a);
const b = !filter.b || data.b.toString().toLowerCase().includes(filter.b);
const c = !filter.c || data.c.toString().toLowerCase().includes(filter.c);
const d = !filter.d || data.d.toString().toLowerCase().includes(filter.d);
// const e = ... may be more fields
return a && b && c && d;
}) as (any, string) => boolean;
shorter version
this.dataSource.filterPredicate = ((data: any, filter: string) => {
let searchTerm = JSON.parse(filter);
// assume searchTerm = { a: '', b: 'b-keyword', c: '', d: 'd-keyword', e: ''}
let dataToReturn = true;
for(let col in searchTerms) {
let colToReturn = !searchTerms[col] || data[col].toString().toLowerCase().includes(searchTerms[col])
dataToReturn = dataToReturn && colToReturn;
}
return dataToReturn;
}) as (any, string) => boolean;
ref: