Catalog alignment
[sdc.git] / catalog-ui / src / app / ng2 / pipes / groupBy.pipe.ts
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 /**
22  * Created by rc2122 on 5/17/2017.
23  */
24 import {Pipe, PipeTransform} from '@angular/core';
25
26 @Pipe({name: 'groupBy'})
27 export class GroupByPipe implements PipeTransform {
28     transform(value: Array<any>, field: string): Array<any> {
29         if(!value) {
30             return null;
31         }
32         const groupedObj = value.reduce((prev, cur)=> {
33             if(!prev[cur[field]]) {
34                 prev[cur[field]] = [cur];
35             } else {
36                 prev[cur[field]].push(cur);
37             }
38             return prev;
39         }, {});
40         return Object.keys(groupedObj).map((key:string) => {return { key, value: groupedObj[key] }; });
41     }
42 }