@mui/x-data-grid
Version:
The community edition of the data grid component (MUI X).
155 lines • 5.89 kB
JavaScript
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();
}