@mui/x-data-grid-premium
Version:
The Premium plan edition of the MUI X Data Grid Components.
106 lines (103 loc) • 3.91 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.addColumnGroupingHeaders = void 0;
exports.addSerializedRowToWorksheet = addSerializedRowToWorksheet;
exports.createValueOptionsSheetIfNeeded = createValueOptionsSheetIfNeeded;
exports.getExcelJs = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _interopRequireWildcard2 = _interopRequireDefault(require("@babel/runtime/helpers/interopRequireWildcard"));
const getExcelJs = async () => {
const excelJsModule = await Promise.resolve().then(() => (0, _interopRequireWildcard2.default)(require('@mui/x-internal-exceljs-fork')));
return excelJsModule.default ?? excelJsModule;
};
exports.getExcelJs = getExcelJs;
const addColumnGroupingHeaders = (worksheet, columns, columnGroupPaths, columnGroupDetails) => {
const maxDepth = Math.max(...columns.map(({
key
}) => columnGroupPaths[key]?.length ?? 0));
if (maxDepth === 0) {
return;
}
for (let rowIndex = 0; rowIndex < maxDepth; rowIndex += 1) {
const row = columns.map(({
key
}) => {
const groupingPath = columnGroupPaths[key];
if (groupingPath.length <= rowIndex) {
return {
groupId: null,
parents: groupingPath
};
}
return (0, _extends2.default)({}, columnGroupDetails[groupingPath[rowIndex]], {
parents: groupingPath.slice(0, rowIndex)
});
});
const newRow = worksheet.addRow(row.map(group => group.groupId === null ? null : group?.headerName ?? group.groupId));
// use `rowCount`, since worksheet can have additional rows added in `exceljsPreProcess`
const lastRowIndex = newRow.worksheet.rowCount;
let leftIndex = 0;
let rightIndex = 1;
while (rightIndex < columns.length) {
const {
groupId: leftGroupId,
parents: leftParents
} = row[leftIndex];
const {
groupId: rightGroupId,
parents: rightParents
} = row[rightIndex];
const areInSameGroup = leftGroupId === rightGroupId && leftParents.length === rightParents.length && leftParents.every((leftParent, index) => rightParents[index] === leftParent);
if (areInSameGroup) {
rightIndex += 1;
} else {
if (rightIndex - leftIndex > 1) {
worksheet.mergeCells(lastRowIndex, leftIndex + 1, lastRowIndex, rightIndex);
}
leftIndex = rightIndex;
rightIndex += 1;
}
}
if (rightIndex - leftIndex > 1) {
worksheet.mergeCells(lastRowIndex, leftIndex + 1, lastRowIndex, rightIndex);
}
}
};
exports.addColumnGroupingHeaders = addColumnGroupingHeaders;
function addSerializedRowToWorksheet(serializedRow, worksheet) {
const {
row,
dataValidation,
outlineLevel,
mergedCells
} = serializedRow;
const newRow = worksheet.addRow(row);
Object.keys(dataValidation).forEach(field => {
newRow.getCell(field).dataValidation = (0, _extends2.default)({}, dataValidation[field]);
});
if (outlineLevel) {
newRow.outlineLevel = outlineLevel;
}
// use `rowCount`, since worksheet can have additional rows added in `exceljsPreProcess`
const lastRowIndex = newRow.worksheet.rowCount;
mergedCells.forEach(mergedCell => {
worksheet.mergeCells(lastRowIndex, mergedCell.leftIndex, lastRowIndex, mergedCell.rightIndex);
});
}
async function createValueOptionsSheetIfNeeded(valueOptionsData, sheetName, workbook) {
if (Object.keys(valueOptionsData).length === 0) {
return;
}
const valueOptionsWorksheet = workbook.addWorksheet(sheetName);
valueOptionsWorksheet.columns = Object.keys(valueOptionsData).map(key => ({
key
}));
Object.entries(valueOptionsData).forEach(([field, {
values
}]) => {
valueOptionsWorksheet.getColumn(field).values = values;
});
}