UNPKG

@mui/x-data-grid

Version:

The community edition of the data grid component (MUI X).

155 lines 5.89 kB
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck"; import _createClass from "@babel/runtime/helpers/esm/createClass"; import { GRID_CHECKBOX_SELECTION_COL_DEF } from '../../../../colDef'; import { buildWarning } from '../../../../utils/warning'; function sanitizeCellValue(value, delimiterCharacter) { if (typeof value === 'string') { // Make sure value containing delimiter or line break won't be split into multiple rows if ([delimiterCharacter, '\n', '\r', '"'].some(function (delimiter) { return value.includes(delimiter); })) { return "\"".concat(value.replace(/"/g, '""'), "\""); } return value; } return value; } export var serializeCellValue = function serializeCellValue(cellParams, options) { var delimiterCharacter = options.delimiterCharacter, ignoreValueFormatter = options.ignoreValueFormatter; var value; if (ignoreValueFormatter) { var _cellParams$value2; var columnType = cellParams.colDef.type; if (columnType === 'number') { value = String(cellParams.value); } else if (columnType === 'date' || columnType === 'dateTime') { var _cellParams$value; value = (_cellParams$value = cellParams.value) == null ? void 0 : _cellParams$value.toISOString(); } else if (typeof ((_cellParams$value2 = cellParams.value) == null ? void 0 : _cellParams$value2.toString) === 'function') { value = cellParams.value.toString(); } else { value = cellParams.value; } } else { value = cellParams.formattedValue; } return sanitizeCellValue(value, delimiterCharacter); }; var objectFormattedValueWarning = buildWarning(['MUI: When the value of a field is an object or a `renderCell` is provided, the CSV export might not display the value correctly.', 'You can provide a `valueFormatter` with a string representation to be used.']); var CSVRow = /*#__PURE__*/function () { function CSVRow(options) { _classCallCheck(this, CSVRow); this.options = void 0; this.rowString = ''; this.isEmpty = true; this.options = options; } _createClass(CSVRow, [{ key: "addValue", value: function addValue(value) { if (!this.isEmpty) { this.rowString += this.options.delimiterCharacter; } if (value === null || value === undefined) { this.rowString += ''; } else if (typeof this.options.sanitizeCellValue === 'function') { this.rowString += this.options.sanitizeCellValue(value, this.options.delimiterCharacter); } else { this.rowString += value; } this.isEmpty = false; } }, { key: "getRowString", value: function getRowString() { return this.rowString; } }]); return CSVRow; }(); var serializeRow = function serializeRow(_ref) { var id = _ref.id, columns = _ref.columns, getCellParams = _ref.getCellParams, delimiterCharacter = _ref.delimiterCharacter, ignoreValueFormatter = _ref.ignoreValueFormatter; var row = new CSVRow({ delimiterCharacter: delimiterCharacter }); columns.forEach(function (column) { var cellParams = getCellParams(id, column.field); if (process.env.NODE_ENV !== 'production') { if (String(cellParams.formattedValue) === '[object Object]') { objectFormattedValueWarning(); } } row.addValue(serializeCellValue(cellParams, { delimiterCharacter: delimiterCharacter, ignoreValueFormatter: ignoreValueFormatter })); }); return row.getRowString(); }; export function buildCSV(options) { var columns = options.columns, rowIds = options.rowIds, delimiterCharacter = options.delimiterCharacter, includeHeaders = options.includeHeaders, includeColumnGroupsHeaders = options.includeColumnGroupsHeaders, ignoreValueFormatter = options.ignoreValueFormatter, apiRef = options.apiRef; var CSVBody = rowIds.reduce(function (acc, id) { return "".concat(acc).concat(serializeRow({ id: id, columns: columns, getCellParams: apiRef.current.getCellParams, delimiterCharacter: delimiterCharacter, ignoreValueFormatter: ignoreValueFormatter }), "\r\n"); }, '').trim(); if (!includeHeaders) { return CSVBody; } var filteredColumns = columns.filter(function (column) { return column.field !== GRID_CHECKBOX_SELECTION_COL_DEF.field; }); var headerRows = []; if (includeColumnGroupsHeaders) { var columnGroupLookup = apiRef.current.unstable_getAllGroupDetails(); var maxColumnGroupsDepth = 0; var columnGroupPathsLookup = filteredColumns.reduce(function (acc, column) { var columnGroupPath = apiRef.current.unstable_getColumnGroupPath(column.field); acc[column.field] = columnGroupPath; maxColumnGroupsDepth = Math.max(maxColumnGroupsDepth, columnGroupPath.length); return acc; }, {}); var _loop = function _loop(i) { var headerGroupRow = new CSVRow({ delimiterCharacter: delimiterCharacter, sanitizeCellValue: sanitizeCellValue }); headerRows.push(headerGroupRow); filteredColumns.forEach(function (column) { var columnGroupId = (columnGroupPathsLookup[column.field] || [])[i]; var columnGroup = columnGroupLookup[columnGroupId]; headerGroupRow.addValue(columnGroup ? columnGroup.headerName || columnGroup.groupId : ''); }); }; for (var i = 0; i < maxColumnGroupsDepth; i += 1) { _loop(i); } } var mainHeaderRow = new CSVRow({ delimiterCharacter: delimiterCharacter, sanitizeCellValue: sanitizeCellValue }); filteredColumns.forEach(function (column) { mainHeaderRow.addValue(column.headerName || column.field); }); headerRows.push(mainHeaderRow); var CSVHead = "".concat(headerRows.map(function (row) { return row.getRowString(); }).join('\r\n'), "\r\n"); return "".concat(CSVHead).concat(CSVBody).trim(); }