deb1c9493686597a4ed18cca8357bf4f9596b9e3
[sdc.git] / catalog-ui / src / app / directives / export-json-to-excel / export-json-to-excel.ts
1 'use strict';
2 import {FileUtils} from "app/utils";
3
4 export interface IJsonExportExcelScope extends ng.IScope {
5     initExportExcelData:Function;
6     export:()=>void;
7 }
8
9 export class JsonExportExcelDirective implements ng.IDirective {
10
11     constructor(private fileUtils:FileUtils) {
12     }
13
14     scope = {
15         initExportExcelData: '&'//get function that init and returns Models.ExportExcel
16     };
17
18     public restrict = 'E';
19     replace = true;
20     template = ():string => {
21         return require('./export-json-to-excel.html');
22     };
23
24     private jsonToTableText = (headers:string, dataObj:Array<Object>):string=> {
25         let tableText = headers + "\n";
26         _.each(dataObj, (rowData:any) => {
27             tableText += _.values(rowData).join() + "\n";
28         });
29         return tableText;
30     };
31
32     link = (scope:IJsonExportExcelScope, $elem:any) => {
33         scope.export = ():void => {
34             let exportExcelData = scope.initExportExcelData();
35             exportExcelData.fileName = !!exportExcelData.fileName ? exportExcelData.fileName : 'export-excel';
36
37             let headers = exportExcelData.tableHeaders.join(",");
38             let tableData = "";
39             if (exportExcelData.groupByField) {
40                 _.each(_.groupBy(exportExcelData.dataObj, exportExcelData.groupByField), (groupData:Array<Object>) => {
41                     tableData += this.jsonToTableText(headers, groupData);
42                     tableData += '\n';
43                 });
44             } else {
45                 tableData = this.jsonToTableText(headers, exportExcelData.dataObj);
46             }
47
48             let blob = new Blob([exportExcelData.metaData.join('\n\n') + '\n\n' + tableData], {type: "text/csv;charset=utf-8"});
49
50             return this.fileUtils.downloadFile(blob, exportExcelData.fileName + '.csv');
51         };
52
53     };
54
55     public static factory = (fileUtils:FileUtils)=> {
56         return new JsonExportExcelDirective( fileUtils);
57     };
58
59 }
60
61 JsonExportExcelDirective.factory.$inject = ['FileUtils'];