UNPKG

@mui/x-data-grid

Version:

The Community plan edition of the Data Grid components (MUI X).

74 lines (73 loc) 2.85 kB
import * as React from 'react'; import { useGridApiMethod } from "../../utils/useGridApiMethod.js"; import { useGridLogger } from "../../utils/useGridLogger.js"; import { exportAs } from "../../../utils/exportAs.js"; import { buildCSV } from "./serializers/csvSerializer.js"; import { getColumnsToExport, defaultGetRowsToExport } from "./utils.js"; import { useGridRegisterPipeProcessor } from "../../core/pipeProcessing/index.js"; import { GridCsvExportMenuItem } from "../../../components/toolbar/index.js"; import { jsx as _jsx } from "react/jsx-runtime"; /** * @requires useGridColumns (state) * @requires useGridFilter (state) * @requires useGridSorting (state) * @requires useGridSelection (state) * @requires useGridParamsApi (method) */ export const useGridCsvExport = (apiRef, props) => { const logger = useGridLogger(apiRef, 'useGridCsvExport'); const ignoreValueFormatterProp = props.ignoreValueFormatterDuringExport; const ignoreValueFormatter = (typeof ignoreValueFormatterProp === 'object' ? ignoreValueFormatterProp?.csvExport : ignoreValueFormatterProp) || false; const getDataAsCsv = React.useCallback((options = {}) => { logger.debug(`Get data as CSV`); const exportedColumns = getColumnsToExport({ apiRef, options }); const getRowsToExport = options.getRowsToExport ?? defaultGetRowsToExport; const exportedRowIds = getRowsToExport({ apiRef }); return buildCSV({ columns: exportedColumns, rowIds: exportedRowIds, csvOptions: { delimiter: options.delimiter || ',', shouldAppendQuotes: options.shouldAppendQuotes ?? true, includeHeaders: options.includeHeaders ?? true, includeColumnGroupsHeaders: options.includeColumnGroupsHeaders ?? true, escapeFormulas: options.escapeFormulas ?? true }, ignoreValueFormatter, apiRef }); }, [logger, apiRef, ignoreValueFormatter]); const exportDataAsCsv = React.useCallback(options => { logger.debug(`Export data as CSV`); const csv = getDataAsCsv(options); const blob = new Blob([options?.utf8WithBom ? new Uint8Array([0xef, 0xbb, 0xbf]) : '', csv], { type: 'text/csv' }); exportAs(blob, 'csv', options?.fileName); }, [logger, getDataAsCsv]); const csvExportApi = { getDataAsCsv, exportDataAsCsv }; useGridApiMethod(apiRef, csvExportApi, 'public'); /** * PRE-PROCESSING */ const addExportMenuButtons = React.useCallback((initialValue, options) => { if (options.csvOptions?.disableToolbarButton) { return initialValue; } return [...initialValue, { component: /*#__PURE__*/_jsx(GridCsvExportMenuItem, { options: options.csvOptions }), componentName: 'csvExport' }]; }, []); useGridRegisterPipeProcessor(apiRef, 'exportMenu', addExportMenuButtons); };