Merge from ecomp 718fd196 - 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[][], types ?: 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
20       for (const item of items) {
21         let index = 0;
22         for(const key of keys) {
23           if(types && types[index] === 'LIST'){
24             let listVal: string[] = DataFilterPipe.getDeepObjectValueByKeysInList(item, key);
25             if (!_.isNil(listVal) && listVal.filter((val) => val.toLowerCase().includes(searchStr.toLowerCase())).length > 0) {
26               ans.push(item);
27               break;
28             }
29           }else {
30             let val: string = DataFilterPipe.getDeepObjectValueByKeys(item, key);
31             if (!_.isNil(val) && val.toLowerCase().includes(searchStr.toLowerCase())) {
32               ans.push(item);
33               break;
34             }
35           }
36           index++;
37         }
38
39       }
40       return ans;
41     }
42   }
43   /**********************************************************************
44    get value from obj data by array of keys.
45    @keys: all table column and keys
46    @rowData : row data
47    ************************************************************************/
48   static getDeepObjectValueByKeys(rowData: any , keys: string[]) : string {
49     let obj =  rowData[keys[0]];
50     if(_.isNil(obj)) {
51       return obj;
52     }
53     for(let i = 1; i < keys.length ; i++){
54       obj = obj[keys[i]];
55     }
56     return _.isNil(obj) ? null : obj.toString();
57   }
58
59
60   /**********************************************************************
61    get values from obj data by array of keys.
62    @keys: all table column and keys
63    @rowData : row data
64    ************************************************************************/
65   static getDeepObjectValueByKeysInList(rowData: any , keys: string[]) : string[] {
66     let obj =  rowData[keys[0]];
67     if(_.isNil(obj)) {
68       return obj;
69     }
70     for(let i = 1; i < keys.length-1 ; i++){
71       obj = obj[keys[i]];
72     }
73     return _.isNil(obj) ? [] : _.map(obj, keys[keys.length -1 ]);
74   }
75 }