summaryrefslogtreecommitdiffstats
path: root/vid-webpack-master/src/app/shared/pipes/searchFilter/search-filter.pipe.ts
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)
    );
  };
}