Perform Mat-table filterPredicate with multiple fields (all fields)

Kaka.Go
1 min readNov 11, 2022

--

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:

--

--

Kaka.Go
Kaka.Go

No responses yet