11import { type Workbook , type Worksheet } from "exceljs"
22import { saveAs } from "file-saver"
3+ import React from "react"
34
45type Sheet = { name : string ; columns : Worksheet [ "columns" ] }
56type InterceptFn = ( workbook : Workbook ) => Workbook | void
@@ -18,20 +19,23 @@ export default function useExcelJS<T extends Array<Sheet>>({
1819 type Data = Array < any > | Record < WorksheetName , Array < any > >
1920
2021 return {
21- download : async ( data : Data ) => {
22- const ExcelJS = await import ( "exceljs" )
23- let workbook = new ExcelJS . Workbook ( )
24- for ( const worksheet of worksheets ) {
25- const sheet = workbook . addWorksheet ( worksheet . name )
26- sheet . columns = worksheet . columns
27- const rows = ( Array . isArray ( data ) ? data : data [ worksheet . name as WorksheetName ] ) ?? [ ]
28- sheet . addRows ( rows )
29- }
30- workbook = intercept ? intercept ( workbook ) ?? workbook : workbook
31- const buffer = await workbook . xlsx . writeBuffer ( )
32- const fileType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
33- const blob = new Blob ( [ buffer ] , { type : fileType } )
34- saveAs ( blob , filename ?? "workbook.xlsx" )
35- } ,
22+ download : React . useCallback (
23+ async ( data : Data ) => {
24+ const ExcelJS = await import ( "exceljs" )
25+ let workbook = new ExcelJS . Workbook ( )
26+ for ( const worksheet of worksheets ) {
27+ const sheet = workbook . addWorksheet ( worksheet . name )
28+ sheet . columns = worksheet . columns
29+ const rows = ( Array . isArray ( data ) ? data : data [ worksheet . name as WorksheetName ] ) ?? [ ]
30+ sheet . addRows ( rows )
31+ }
32+ workbook = intercept ? intercept ( workbook ) ?? workbook : workbook
33+ const buffer = await workbook . xlsx . writeBuffer ( )
34+ const fileType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
35+ const blob = new Blob ( [ buffer ] , { type : fileType } )
36+ saveAs ( blob , filename ?? "workbook.xlsx" )
37+ } ,
38+ [ filename , worksheets , intercept ]
39+ ) ,
3640 }
3741}
0 commit comments