merge from ecomp a88f0072 - Modern UI
[vid.git] / vid-webpack-master / src / app / shared / pipes / dataFilter / data-filter.pipe.ts
1 /**
2  * Created by cp2122 on 1/4/2018.
3  */
4 import { Pipe, PipeTransform } from '@angular/core';
5 import * as _ from 'lodash';
6
7 @Pipe({
8   name: 'dataFilter'
9 })
10 export class DataFilterPipe implements PipeTransform {
11
12   transform(items: any, searchStr: string, keys?: string[][]): any {
13     if (items != null && items.length > 0 && !_.isNil(searchStr)) {
14       let ans = [];
15
16       if (_.isNil(keys) || keys.length === 0) {
17         keys = Object.keys(items[0]).map((key)=> new Array(key) );
18       }
19       for (const item of items) {
20         for(const key of keys) {
21
22           let val: string = DataFilterPipe.getDeepObjectValueByKeys(item, key);
23           if (!_.isNil(val) && val.toLowerCase().includes(searchStr.toLowerCase())) {
24             ans.push(item);
25             break;
26           }
27         }
28       }
29       return ans;
30     }
31   }
32   /**********************************************************************
33    get value from obj data by array of keys.
34    @keys: all table column and keys
35    @rowData : row data
36    ************************************************************************/
37   static getDeepObjectValueByKeys(rowData: any , keys: string[]) : string {
38     let obj =  rowData[keys[0]];
39     if(_.isNil(obj)) {
40       return obj;
41     }
42     for(let i = 1; i < keys.length ; i++){
43       obj = obj[keys[i]];
44     }
45     return obj.toString();
46   }
47 }