summaryrefslogtreecommitdiffstats
path: root/vid-webpack-master/src/app/shared/pipes/dataFilter
diff options
context:
space:
mode:
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.ts52
-rw-r--r--vid-webpack-master/src/app/shared/pipes/dataFilter/data-filter.pipe.ts47
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();
+ }
+}