diff options
Diffstat (limited to 'vid-webpack-master/src/app/shared/pipes/dataFilter')
-rw-r--r-- | vid-webpack-master/src/app/shared/pipes/dataFilter/data-filter.pipe.spec.ts | 52 | ||||
-rw-r--r-- | vid-webpack-master/src/app/shared/pipes/dataFilter/data-filter.pipe.ts | 47 |
2 files changed, 99 insertions, 0 deletions
diff --git a/vid-webpack-master/src/app/shared/pipes/dataFilter/data-filter.pipe.spec.ts b/vid-webpack-master/src/app/shared/pipes/dataFilter/data-filter.pipe.spec.ts new file mode 100644 index 000000000..378ba259d --- /dev/null +++ b/vid-webpack-master/src/app/shared/pipes/dataFilter/data-filter.pipe.spec.ts @@ -0,0 +1,52 @@ +import {TestBed} from "@angular/core/testing"; +import {DataFilterPipe} from "./data-filter.pipe"; + +describe('Data filter pipe', () => { + + let dataFilterPipe: DataFilterPipe; + + beforeAll(done => (async () => { + TestBed.configureTestingModule({}); + await TestBed.compileComponents(); + + dataFilterPipe = new DataFilterPipe(); + + })().then(done).catch(done.fail)); + const items= [{'id':1, 'name': 'aaa'}, + {'id':12, 'name': 'bbb', 'children':{'first': 155, 'second': 2, 'third': 3}}, + {'id':3, 'name': 'ccc', 'children':{'first': 1, 'second': 2, 'third': 3}}, + {'id':4, 'name': 'aad', 'children':{'first': 1, 'second': 2, 'third': 3}}]; + const keys : string[][] = [["id"],["name"],["children", "first"]]; + + + test('should return items contains substring, keys not provided', () => { + const expected = [{'id':1, 'name': 'aaa'}, {'id':4, 'name': 'aad', 'children':{'first': 1, 'second': 2, 'third': 3}}]; + let res:any[] = dataFilterPipe.transform(items,'aa'); + expect(res).toEqual(expected); + }); + + + test('should return no result, keys not provided', () => { + const expected = []; + let res:any[] = dataFilterPipe.transform(items,'5'); + expect(res).toEqual(expected); + }); + + test('should return no result, deep keys provided', () => { + const expected = []; + let res:any[] = dataFilterPipe.transform(items,'6', keys); + expect(res).toEqual(expected); + }); + + test('should return expected result, deep keys provided', () => { + const expected = [{'id':12, 'name': 'bbb', 'children':{'first': 155, 'second': 2, 'third': 3}}]; + let res:any[] = dataFilterPipe.transform(items,'155', keys); + expect(res).toEqual(expected); + }); + + test('should return expected result, case insensitive', () => { + const expected = [{'id':12, 'name': 'bbb', 'children':{'first': 155, 'second': 2, 'third': 3}}]; + let res:any[] = dataFilterPipe.transform(items,'BBB', keys); + expect(res).toEqual(expected); + }); +}); diff --git a/vid-webpack-master/src/app/shared/pipes/dataFilter/data-filter.pipe.ts b/vid-webpack-master/src/app/shared/pipes/dataFilter/data-filter.pipe.ts new file mode 100644 index 000000000..4b4f1a5bc --- /dev/null +++ b/vid-webpack-master/src/app/shared/pipes/dataFilter/data-filter.pipe.ts @@ -0,0 +1,47 @@ +/** + * Created by cp2122 on 1/4/2018. + */ +import { Pipe, PipeTransform } from '@angular/core'; +import * as _ from 'lodash'; + +@Pipe({ + name: 'dataFilter' +}) +export class DataFilterPipe implements PipeTransform { + + transform(items: any, searchStr: string, keys?: string[][]): any { + if (items != null && items.length > 0 && !_.isNil(searchStr)) { + let ans = []; + + if (_.isNil(keys) || keys.length === 0) { + keys = Object.keys(items[0]).map((key)=> new Array(key) ); + } + for (const item of items) { + for(const key of keys) { + + let val: string = DataFilterPipe.getDeepObjectValueByKeys(item, key); + if (!_.isNil(val) && val.toLowerCase().includes(searchStr.toLowerCase())) { + ans.push(item); + break; + } + } + } + return ans; + } + } + /********************************************************************** + get value from obj data by array of keys. + @keys: all table column and keys + @rowData : row data + ************************************************************************/ + static getDeepObjectValueByKeys(rowData: any , keys: string[]) : string { + let obj = rowData[keys[0]]; + if(_.isNil(obj)) { + return obj; + } + for(let i = 1; i < keys.length ; i++){ + obj = obj[keys[i]]; + } + return obj.toString(); + } +} |