blob: 6e5cfc667514415a914f552ba0192a6c246203df (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
import {Pipe, PipeTransform} from '@angular/core';
import * as _ from 'lodash';
@Pipe({
name: 'searchFilter'
})
export class SearchFilterPipe implements PipeTransform {
transform(items: Object[], searchText: string): any[] {
if (!items) return [];
if (!searchText) return items;
return items.filter((item: object) => {
const deepFlatObject = this.flatten(item);
const values = _.values(deepFlatObject).map((item: string) => {
return item.toString().toLowerCase()
});
return _.some(values, _.method('includes', searchText.toLowerCase()));
});
}
flatten = object => {
return Object.assign(
{},
...(function _flatten(objectBit, path = '') {
//spread the result into our return object
if(objectBit === null) return [];
return [].concat(
//concat everything into one level
...Object.keys(objectBit).map(
//iterate over object
key =>
typeof objectBit[key] === 'object' //check if there is a nested object
? _flatten(objectBit[key], `${path}/${key}`) //call itself if there is
: { [`${path}/${key}`]: objectBit[key] } //append object with it’s path as key
)
);
})(object)
);
};
}
|