UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

351 lines (350 loc) • 13.8 kB
/** * DevExtreme (cjs/__internal/grids/pivot_grid/export/module.js) * Version: 22.1.9 * Build date: Tue Apr 18 2023 * * Copyright (c) 2012 - 2023 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ "use strict"; var __assign = this && this.__assign || function() { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) { if (Object.prototype.hasOwnProperty.call(s, p)) { t[p] = s[p] } } } return t }; return __assign.apply(this, arguments) }; var __spreadArray = this && this.__spreadArray || function(to, from) { for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) { to[j] = from[i] } return to }; var __importDefault = this && this.__importDefault || function(mod) { return mod && mod.__esModule ? mod : { default: mod } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.DataProvider = exports.PivotGridExport = exports.ExportController = void 0; var class_1 = __importDefault(require("../../../../core/class")); var type_1 = require("../../../../core/utils/type"); var extend_1 = require("../../../../core/utils/extend"); var iterator_1 = require("../../../../core/utils/iterator"); var window_1 = require("../../../../core/utils/window"); var position_1 = require("../../../../core/utils/position"); var format_helper_1 = __importDefault(require("../../../../format_helper")); var number_1 = __importDefault(require("../../../../localization/number")); var exporter_1 = require("../../../../exporter"); var ui_grid_core_export_1 = require("../../../../ui/grid_core/ui.grid_core.export"); var deferred_1 = require("../../../../core/utils/deferred"); var DEFAULT_DATA_TYPE = "string"; var DEFAUL_COLUMN_WIDTH = 100; var ExportController = { exportToExcel: function() { exporter_1.export(this.getDataProvider(), { fileName: this.option("export.fileName"), proxyUrl: this.option("export.proxyUrl"), format: "EXCEL", rtlEnabled: this.option("rtlEnabled"), ignoreErrors: this.option("export.ignoreExcelErrors"), exportingAction: this._actions.onExporting, exportedAction: this._actions.onExported, fileSavingAction: this._actions.onFileSaving }, exporter_1.excel.getData) }, _getLength: function(items) { var i; var itemCount = items[0].length; var cellCount = 0; for (i = 0; i < itemCount; i += 1) { cellCount += items[0][i].colspan || 1 } return cellCount }, _correctCellsInfoItemLengths: function(cellsInfo, expectedLength) { for (var i = 0; i < cellsInfo.length; i += 1) { while (cellsInfo[i].length < expectedLength) { cellsInfo[i].push({}) } } return cellsInfo }, _calculateCellInfoItemLength: function(columnsRow) { var result = 0; for (var columnIndex = 0; columnIndex < columnsRow.length; columnIndex += 1) { result += type_1.isDefined(columnsRow[columnIndex].colspan) ? columnsRow[columnIndex].colspan : 1 } return result }, _getEmptyCell: function() { return { text: "", value: void 0, colspan: 1, rowspan: 1 } }, _getAllItems: function(columnsInfo, rowsInfoItems, cellsInfo) { var cellIndex; var rowIndex; var correctedCellsInfo = cellsInfo; var rowsLength = this._getLength(rowsInfoItems); var headerRowsCount = columnsInfo.length; if (columnsInfo.length > 0 && columnsInfo[0].length > 0 && cellsInfo.length > 0 && 0 === cellsInfo[0].length) { var cellInfoItemLength = this._calculateCellInfoItemLength(columnsInfo[0]); if (cellInfoItemLength > 0) { correctedCellsInfo = this._correctCellsInfoItemLengths(cellsInfo, cellInfoItemLength) } } if (0 === correctedCellsInfo.length) { var rowsCount = rowsInfoItems.length; var collapsedColumnCount = columnsInfo.map((function(headerRowWithColumns) { return headerRowWithColumns.filter((function(row) { return !row.expanded })).length })).reduce((function(result, collapsedCount) { return result + collapsedCount }), 0); for (var rowIdx = 0; rowIdx < rowsCount; rowIdx += 1) { correctedCellsInfo[rowIdx] = []; for (var colIdx = 0; colIdx < collapsedColumnCount; colIdx += 1) { correctedCellsInfo[rowIdx][colIdx] = this._getEmptyCell() } } } var sourceItems = columnsInfo.concat(correctedCellsInfo); for (rowIndex = 0; rowIndex < rowsInfoItems.length; rowIndex += 1) { for (cellIndex = rowsInfoItems[rowIndex].length - 1; cellIndex >= 0; cellIndex -= 1) { if (!type_1.isDefined(sourceItems[rowIndex + headerRowsCount])) { sourceItems[rowIndex + headerRowsCount] = [] } sourceItems[rowIndex + headerRowsCount].splice(0, 0, extend_1.extend({}, rowsInfoItems[rowIndex][cellIndex])) } } sourceItems[0].splice(0, 0, extend_1.extend({}, this._getEmptyCell(), { alignment: position_1.getDefaultAlignment(this._options.rtlEnabled), colspan: rowsLength, rowspan: headerRowsCount })); return ui_grid_core_export_1.prepareItems(sourceItems, this._getEmptyCell()) }, getDataProvider: function() { return new DataProvider(this) } }; exports.ExportController = ExportController; var DataProvider = class_1.default.inherit({ ctor: function(exportController) { this._exportController = exportController }, ready: function() { this._initOptions(); var options = this._options; return deferred_1.when(options.items).done((function(items) { var headerSize = items[0][0].rowspan; var columns = items[headerSize - 1]; iterator_1.each(columns, (function(columnIndex, column) { column.width = DEFAUL_COLUMN_WIDTH })); options.columns = columns; options.items = items })) }, _initOptions: function() { var exportController = this._exportController; var dataController = exportController._dataController; var items = new deferred_1.Deferred; dataController.beginLoading(); setTimeout((function() { var columnsInfo = extend_1.extend(true, [], dataController.getColumnsInfo(true)); var rowsInfoItems = extend_1.extend(true, [], dataController.getRowsInfo(true)); var cellsInfo = dataController.getCellsInfo(true); items.resolve(exportController._getAllItems(columnsInfo, rowsInfoItems, cellsInfo)); dataController.endLoading() })); this._options = { items: items, rtlEnabled: exportController.option("rtlEnabled"), dataFields: exportController.getDataSource().getAreaFields("data"), customizeExcelCell: exportController.option("export.customizeExcelCell"), rowsArea: exportController._rowsArea, columnsArea: exportController._columnsArea } }, getColumns: function() { return this._options.columns }, getColumnsWidths: function() { var colsArea = this._options.columnsArea; var rowsArea = this._options.rowsArea; var columns = this._options.columns; var useDefaultWidth = !window_1.hasWindow() || "virtual" === colsArea.option("scrolling.mode") || colsArea.element().is(":hidden"); return useDefaultWidth ? columns.map((function() { return DEFAUL_COLUMN_WIDTH })) : rowsArea.getColumnsWidth().concat(colsArea.getColumnsWidth()) }, getRowsCount: function() { return this._options.items.length }, getGroupLevel: function() { return 0 }, getCellMerging: function(rowIndex, cellIndex) { var items = this._options.items; var item = items[rowIndex] && items[rowIndex][cellIndex]; return item ? { colspan: item.colspan - 1, rowspan: item.rowspan - 1 } : { colspan: 0, rowspan: 0 } }, getFrozenArea: function() { return { x: this.getRowAreaColCount(), y: this.getColumnAreaRowCount() } }, getCellType: function(rowIndex, cellIndex) { var style = this.getStyles()[this.getStyleId(rowIndex, cellIndex)]; return style && style.dataType || "string" }, getCellData: function(rowIndex, cellIndex, isExcelJS) { var result = {}; var items = this._options.items; var item = items[rowIndex] && items[rowIndex][cellIndex] || {}; if (isExcelJS) { result.cellSourceData = item; var areaName = this._tryGetAreaName(item, rowIndex, cellIndex); if (areaName) { result.cellSourceData.area = areaName } result.cellSourceData.rowIndex = rowIndex; result.cellSourceData.columnIndex = cellIndex } if ("string" === this.getCellType(rowIndex, cellIndex)) { result.value = item.text } else { result.value = item.value } if (result.cellSourceData && result.cellSourceData.isWhiteSpace) { result.value = "" } return result }, _tryGetAreaName: function(item, rowIndex, cellIndex) { if (this.isColumnAreaCell(rowIndex, cellIndex)) { return "column" } if (this.isRowAreaCell(rowIndex, cellIndex)) { return "row" } if (type_1.isDefined(item.dataIndex)) { return "data" } return }, isRowAreaCell: function(rowIndex, cellIndex) { return rowIndex >= this.getColumnAreaRowCount() && cellIndex < this.getRowAreaColCount() }, isColumnAreaCell: function(rowIndex, cellIndex) { return cellIndex >= this.getRowAreaColCount() && rowIndex < this.getColumnAreaRowCount() }, getColumnAreaRowCount: function() { return this._options.items[0][0].rowspan }, getRowAreaColCount: function() { return this._options.items[0][0].colspan }, getHeaderStyles: function() { return [{ alignment: "center", dataType: "string" }, { alignment: position_1.getDefaultAlignment(this._options.rtlEnabled), dataType: "string" }] }, getDataFieldStyles: function() { var _this = this; var dataFields = this._options.dataFields; var dataItemStyle = { alignment: this._options.rtlEnabled ? "left" : "right" }; var dataFieldStyles = []; if (dataFields.length) { dataFields.forEach((function(dataField) { dataFieldStyles.push(__assign(__assign({}, dataItemStyle), { format: dataField.format, dataType: _this.getCellDataType(dataField) })) })); return dataFieldStyles } return [dataItemStyle] }, getStyles: function() { if (this._styles) { return this._styles } this._styles = __spreadArray(__spreadArray([], this.getHeaderStyles()), this.getDataFieldStyles()); return this._styles }, getCellDataType: function(field) { if (field && field.customizeText) { return "string" } if (field.dataType) { return field.dataType } if (field.format) { if (1 === number_1.default.parse(format_helper_1.default.format(1, field.format))) { return "number" } if (format_helper_1.default.format(new Date, field.format)) { return "date" } } return DEFAULT_DATA_TYPE }, getStyleId: function(rowIndex, cellIndex) { var items = this._options.items; var item = items[rowIndex] && items[rowIndex][cellIndex] || {}; if (0 === cellIndex && 0 === rowIndex || this.isColumnAreaCell(rowIndex, cellIndex)) { return 0 } if (this.isRowAreaCell(rowIndex, cellIndex)) { return 1 } return this.getHeaderStyles().length + (item.dataIndex || 0) }, hasCustomizeExcelCell: function() { return type_1.isDefined(this._options.customizeExcelCell) }, customizeExcelCell: function(e) { if (this._options.customizeExcelCell) { this._options.customizeExcelCell(e) } } }); exports.DataProvider = DataProvider; var PivotGridExport = { DEFAUL_COLUMN_WIDTH: DEFAUL_COLUMN_WIDTH }; exports.PivotGridExport = PivotGridExport; exports.default = { ExportController: ExportController, PivotGridExport: PivotGridExport, DataProvider: DataProvider };