devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
127 lines (124 loc) • 6.32 kB
JavaScript
/**
* DevExtreme (cjs/exporter/jspdf/export_data_grid_2.js)
* Version: 21.1.4
* Build date: Mon Jun 21 2021
*
* Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
"use strict";
exports.exportDataGrid = exportDataGrid;
var _type = require("../../core/utils/type");
var _extend = require("../../core/utils/extend");
var _pdf_grid = require("./pdf_grid");
function _getFullOptions(options) {
var fullOptions = (0, _extend.extend)({}, options);
if (!(0, _type.isDefined)(fullOptions.topLeft)) {
throw "options.topLeft is required"
}
if (!(0, _type.isDefined)(fullOptions.indent)) {
fullOptions.indent = 10
}
return fullOptions
}
function exportDataGrid(doc, dataGrid, options) {
options = (0, _extend.extend)({}, _getFullOptions(options));
var dataProvider = dataGrid.getDataProvider();
return new Promise((function(resolve) {
dataProvider.ready().done((function() {
var columns = dataProvider.getColumns();
var pdfGrid = new _pdf_grid.PdfGrid(options.splitToTablesByColumns, options.columnWidths);
var rowsIndents = [];
pdfGrid.startNewTable(options.drawTableBorder, options.topLeft);
var dataRowsCount = dataProvider.getRowsCount();
for (var rowIndex = 0; rowIndex < dataRowsCount; rowIndex++) {
var rowType = dataProvider.getCellData(rowIndex, 0, true).cellSourceData.rowType;
var groupLevel = "header" !== rowType ? dataProvider.getGroupLevel(rowIndex) : 0;
var currentRow = [];
for (var cellIndex = 0; cellIndex < columns.length; cellIndex++) {
var cellData = dataProvider.getCellData(rowIndex, cellIndex, true);
var pdfCell = {
text: cellData.value
};
if ("header" === rowType) {
var cellMerging = dataProvider.getCellMerging(rowIndex, cellIndex);
if (cellMerging && cellMerging.rowspan > 0) {
pdfCell.rowSpan = cellMerging.rowspan
}
if (cellMerging && cellMerging.colspan > 0) {
pdfCell.colSpan = cellMerging.colspan
}
} else if ("group" === rowType) {
pdfCell.drawLeftBorder = false;
pdfCell.drawRightBorder = false;
if (cellIndex > 0) {
var isEmptyCellsExceptFirst = currentRow.slice(1).reduce((function(accumulate, pdfCell) {
return accumulate && !(0, _type.isDefined)(pdfCell.text)
}), true);
if (!(0, _type.isDefined)(pdfCell.text) && isEmptyCellsExceptFirst) {
for (var i = 0; i < currentRow.length; i++) {
currentRow[i].colSpan = currentRow.length
}
pdfCell.colSpan = currentRow.length
}
}
}
if (options.onCellExporting) {
options.onCellExporting({
gridCell: {
value: cellData.value
},
pdfCell: pdfCell
})
}
currentRow.push(pdfCell)
}
if ("group" === rowType) {
currentRow[0].drawLeftBorder = true;
if (currentRow[0].colSpan === currentRow.length - 1) {
currentRow[0].drawRightBorder = true
}
var lastCell = currentRow[currentRow.length - 1];
if (!(0, _type.isDefined)(lastCell.colSpan)) {
lastCell.drawRightBorder = true
}
}
rowsIndents.push(groupLevel * options.indent);
var startNewTableWithIndent = rowsIndents.length >= 2 && rowsIndents[rowsIndents.length - 1] !== rowsIndents[rowsIndents.length - 2];
if (startNewTableWithIndent) {
var indent = rowsIndents[rowsIndents.length - 1];
var prevTable = pdfGrid._currentHorizontalTables[0];
var firstColumnWidth = options.columnWidths[0] - indent;
var tableTopLeft = {
x: options.topLeft.x + indent,
y: prevTable.rect.y + prevTable.rect.h
};
pdfGrid.startNewTable(options.drawTableBorder, tableTopLeft, null, null, firstColumnWidth)
}
var rowHeight = null;
if (options.onRowExporting) {
var args = {
drawNewTableFromThisRow: {},
rowCells: currentRow
};
options.onRowExporting(args);
var _args$drawNewTableFro = args.drawNewTableFromThisRow,
startNewTable = _args$drawNewTableFro.startNewTable,
addPage = _args$drawNewTableFro.addPage,
_tableTopLeft = _args$drawNewTableFro.tableTopLeft,
splitToTablesByColumns = _args$drawNewTableFro.splitToTablesByColumns;
if (true === startNewTable) {
pdfGrid.startNewTable(options.drawTableBorder, _tableTopLeft, true === addPage, splitToTablesByColumns)
}
if ((0, _type.isDefined)(args.rowHeight)) {
rowHeight = args.rowHeight
}
}
pdfGrid.addRow(currentRow, rowHeight)
}
pdfGrid.mergeCellsBySpanAttributes();
pdfGrid.drawTo(doc);
resolve()
}))
}))
}