diff options
author | 2018-08-29 17:01:32 +0300 | |
---|---|---|
committer | 2019-02-18 18:35:30 +0200 | |
commit | 6f900cc45d7dd7f97430812b86b5c1d1693c8ae3 (patch) | |
tree | 936005c364dc5a7264d6304d4777c3d83494db22 /vid-webpack-master/src/app/shared/pipes/dataFilter | |
parent | 67d99f816cc583643c35193197594cf78d8ce60a (diff) |
merge from ecomp a88f0072 - Modern UI
Issue-ID: VID-378
Change-Id: Ibcb23dd27f550cf32ce2fe0239f0f496ae014ff6
Signed-off-by: Ittay Stern <ittay.stern@att.com>
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(); + } +} |