@mui/x-data-grid-premium
Version:
The Premium plan edition of the data grid component (MUI X).
73 lines (68 loc) • 2.53 kB
JavaScript
import * as React from 'react';
import { useGridApiMethod, useGridLogger } from '@mui/x-data-grid';
import { useGridRegisterPipeProcessor, exportAs, getColumnsToExport, defaultGetRowsToExport } from '@mui/x-data-grid/internals';
import { buildExcel } from './serializer/excelSerializer';
import { GridExcelExportMenuItem } from '../../../components';
/**
* @requires useGridColumns (state)
* @requires useGridFilter (state)
* @requires useGridSorting (state)
* @requires useGridSelection (state)
* @requires useGridParamsApi (method)
*/
import { jsx as _jsx } from "react/jsx-runtime";
export const useGridExcelExport = apiRef => {
const logger = useGridLogger(apiRef, 'useGridExcelExport');
const getDataAsExcel = React.useCallback((options = {}) => {
logger.debug(`Get data as excel`);
const getRowsToExport = options.getRowsToExport ?? defaultGetRowsToExport;
const exportedRowIds = getRowsToExport({
apiRef
});
const exportedColumns = getColumnsToExport({
apiRef,
options
});
return buildExcel({
columns: exportedColumns,
rowIds: exportedRowIds,
includeHeaders: options.includeHeaders ?? true,
valueOptionsSheetName: options?.valueOptionsSheetName || 'Options',
columnsStyles: options?.columnsStyles,
exceljsPreProcess: options?.exceljsPreProcess,
exceljsPostProcess: options?.exceljsPostProcess
}, apiRef.current);
}, [logger, apiRef]);
const exportDataAsExcel = React.useCallback(async options => {
logger.debug(`Export data as excel`);
const workbook = await getDataAsExcel(options);
if (workbook === null) {
return;
}
const content = await workbook.xlsx.writeBuffer();
const blob = new Blob([content], {
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
});
exportAs(blob, 'xlsx', options?.fileName);
}, [logger, getDataAsExcel]);
const excelExportApi = {
getDataAsExcel,
exportDataAsExcel
};
useGridApiMethod(apiRef, excelExportApi, 'GridExcelExportApi');
/**
* PRE-PROCESSING
*/
const addExportMenuButtons = React.useCallback((initialValue, options) => {
if (options.excelOptions?.disableToolbarButton) {
return initialValue;
}
return [...initialValue, {
component: /*#__PURE__*/_jsx(GridExcelExportMenuItem, {
options: options.excelOptions
}),
componentName: 'excelExport'
}];
}, []);
useGridRegisterPipeProcessor(apiRef, 'exportMenu', addExportMenuButtons);
};