11// Require local class dependencies
22import xl from 'excel4node' ;
3+ import fs from 'fs' ;
34import uuid from 'uuid' ;
45import Helper from 'helper' ;
56import moment from 'moment' ;
67import toText from 'html-to-text' ;
78import dotProp from 'dot-prop' ;
89import json2csv from 'json2csv' ;
910
10-
1111// require models
1212const Grid = model ( 'grid' ) ;
1313
@@ -686,7 +686,7 @@ export default class GridHelper extends Helper {
686686 const json2csvParser = new Json2csvParser ( {
687687 fields,
688688 } ) ;
689- const csv = json2csvParser . parse ( rows ) ;
689+ const csv = json2csvParser . parse ( rows . map ( ( row ) => row . get ? row . get ( ) : row ) ) ;
690690
691691 // get model
692692 const FormModel = this . get ( 'model' ) ;
@@ -714,7 +714,7 @@ export default class GridHelper extends Helper {
714714 // create workbook
715715 const wb = new xl . Workbook ( ) ;
716716 const ws = wb . addWorksheet ( `${ this . get ( 'id' ) || ( new FormModel ( ) ) . constructor . name } -${ moment ( ) . format ( 'DD-MM-YYYY' ) } .csv` ) ;
717- const fields = Object . keys ( rows [ 0 ] ) ;
717+ const fields = Object . keys ( rows [ 0 ] && rows [ 0 ] . get ? rows [ 0 ] . get ( ) : rows [ 0 ] ) ;
718718
719719 // add titles
720720 fields . forEach ( ( title , i ) => {
@@ -725,10 +725,10 @@ export default class GridHelper extends Helper {
725725 // loop rows
726726 rows . forEach ( ( row , i ) => {
727727 // values
728- Object . values ( row ) . forEach ( ( col , x ) => {
728+ Object . values ( row . get ? row . get ( ) : row ) . forEach ( ( col , x ) => {
729729 // create worksheet cell
730730 ws . cell ( ( i + 2 ) , ( x + 1 ) )
731- . string ( col ) ;
731+ . string ( ` ${ col } ` ) ;
732732 } ) ;
733733 } ) ;
734734
@@ -749,7 +749,15 @@ export default class GridHelper extends Helper {
749749
750750 // download XLSX
751751 res . set ( 'Content-Disposition' , `attachment; filename=${ this . get ( 'id' ) || ( new FormModel ( ) ) . constructor . name } -${ moment ( ) . format ( 'DD-MM-YYYY' ) } .xlsx` ) ;
752- res . download ( `/tmp/${ UUID } .xlsx` ) ;
752+
753+ // create stream
754+ const stream = fs . createReadStream ( `/tmp/${ UUID } .xlsx` ) ;
755+
756+ // pipe to response
757+ stream . pipe ( res ) . on ( 'end' , ( ) => {
758+ // remove
759+ fs . remove ( `/tmp/${ UUID } .xlsx` ) ;
760+ } ) ;
753761 }
754762
755763 // ////////////////////////////////////////////////////////////////////////////
0 commit comments