UNPKG

@syncfusion/ej2-spreadsheet

Version:

Feature-rich JavaScript Spreadsheet (Excel) control with built-in support for selection, editing, formatting, importing and exporting to Excel

262 lines (261 loc) 12.9 kB
import { getRangeIndexes, getSwapRange, getRangeAddress, addDPRValue } from '../common/index'; import { setCell, getSheetIndex, getCell, getSheetIndexFromId, getSheet } from '../base/index'; import { setChart, initiateChart, deleteChartColl, refreshChartSize, focusChartBorder, getChartRowIdxFromClientY, getChartColIdxFromClientX, refreshChartCellOnInit, importModelUpdate } from '../common/event'; import { closest, isNullOrUndefined, getComponent, isUndefined, getUniqueID } from '@syncfusion/ej2-base'; /** * The `WorkbookChart` module is used to handle chart action in Spreadsheet. */ var WorkbookChart = /** @class */ (function () { /** * Constructor for WorkbookChart module. * * @param {Workbook} parent - Constructor for WorkbookChart module. */ function WorkbookChart(parent) { this.parent = parent; this.addEventListener(); } WorkbookChart.prototype.addEventListener = function () { this.parent.on(setChart, this.setChartHandler, this); this.parent.on(deleteChartColl, this.deleteChartColl, this); this.parent.on(refreshChartSize, this.refreshChartSize, this); this.parent.on(focusChartBorder, this.focusChartBorder, this); this.parent.on(importModelUpdate, this.updateChartsFromSheet, this); }; WorkbookChart.prototype.removeEventListener = function () { if (!this.parent.isDestroyed) { this.parent.off(setChart, this.setChartHandler); this.parent.off(deleteChartColl, this.deleteChartColl); this.parent.off(refreshChartSize, this.refreshChartSize); this.parent.off(focusChartBorder, this.focusChartBorder); this.parent.off(importModelUpdate, this.updateChartsFromSheet); } }; WorkbookChart.prototype.setChartHandler = function (args) { args.isInitCell = isNullOrUndefined(args.isInitCell) ? false : args.isInitCell; args.isUndoRedo = isNullOrUndefined(args.isUndoRedo) ? true : args.isUndoRedo; args.isPaste = isNullOrUndefined(args.isPaste) ? false : args.isPaste; var sheet; var chartModel; var chartLength; var chart = args.chart; var i = 0; var _loop_1 = function () { if (args.isCut === false) { chart[i] = { range: chart[i].range, id: getUniqueID('e_spreadsheet_chart'), theme: chart[i].theme, isSeriesInRows: chart[i].isSeriesInRows, type: chart[i].type, markerSettings: chart[i].markerSettings, title: chart[i].title, legendSettings: chart[i].legendSettings, primaryXAxis: chart[i].primaryXAxis, primaryYAxis: chart[i].primaryYAxis, dataLabelSettings: chart[i].dataLabelSettings, height: chart[i].height, width: chart[i].width }; } if (document.getElementById(args.chart[i].id)) { i++; return "continue"; } chartModel = chart[i]; chartModel.theme = chartModel.theme || 'Material'; chartModel.type = chartModel.type || 'Line'; chartModel.isSeriesInRows = chartModel.isSeriesInRows || false; var range = void 0; var rangeSheetIdx = this_1.parent.activeSheetIndex; if (isNullOrUndefined(chartModel.range)) { sheet = this_1.parent.getActiveSheet(); range = sheet.selectedRange; } else { var tokenIdx = chartModel.range.lastIndexOf('!'); if (tokenIdx > 0) { rangeSheetIdx = getSheetIndex(this_1.parent, chartModel.range.substring(0, tokenIdx)); sheet = getSheet(this_1.parent, rangeSheetIdx); range = chartModel.range.substring(tokenIdx + 1); } else { range = chartModel.range; sheet = this_1.parent.getActiveSheet(); } } var rangeData = []; range.split(' ').forEach(function (individualRange) { var rangeArray = getSwapRange(getRangeIndexes(individualRange)); if (rangeArray[0] === 0 && rangeArray[2] === sheet.rowCount - 1 && rangeArray[2] > sheet.usedRange.rowIndex) { rangeArray[2] = sheet.usedRange.rowIndex; } if (rangeArray[1] === 0 && rangeArray[3] === sheet.colCount - 1 && rangeArray[3] > sheet.usedRange.colIndex) { rangeArray[3] = sheet.usedRange.colIndex; } rangeData.push(rangeArray); }); rangeData.sort(function (a, b) { return chartModel.isSeriesInRows ? (a[0] === b[0] ? a[1] - b[1] : a[0] - b[0]) : (a[1] === b[1] ? a[0] - b[0] : a[1] - b[1]); }); // Convert sorted range arrays back to strings var sortedRanges = rangeData.map(function (rangeArray) { return rangeArray.length && getRangeAddress(rangeArray); }); if (chartModel.range !== '') { chartModel.range = sheet.name + "!" + sortedRanges.join(' '); } if (isNullOrUndefined(chartModel.id)) { chartModel.id = getUniqueID('e_spreadsheet_chart'); } if (chartModel.markerSettings && chartModel.markerSettings.visible) { if (chartModel.markerSettings.isFilled === undefined) { chartModel.markerSettings.isFilled = true; } if (chartModel.markerSettings.shape === undefined) { chartModel.markerSettings.shape = 'Circle'; } } chartModel.height = chartModel.height || 290; chartModel.width = chartModel.width || 480; this_1.parent.notify(initiateChart, { option: chartModel, isInitCell: args.isInitCell, triggerEvent: args.isUndoRedo, range: args.range, dataSheetIdx: args.dataSheetIdx, isPaste: args.isPaste }); if (this_1.parent.chartColl.every(function (chartobj) { return chartobj.id !== chartModel.id; })) { this_1.parent.chartColl.push(chartModel); } if (!args.isInitCell || args.isPaste || args.isUndo || args.isRedo) { var sheetIdx = void 0; var rowIdx = void 0; var colIdx = void 0; if (args.range && (args.isUndo || args.isRedo)) { sheetIdx = getSheetIndex(this_1.parent, args.range.substring(0, args.range.lastIndexOf('!'))); var range_1 = getSwapRange(getRangeIndexes(args.range)); rowIdx = range_1[0]; colIdx = range_1[1]; } else { sheetIdx = args.sheetId === undefined ? rangeSheetIdx : getSheetIndexFromId(this_1.parent, args.sheetId); var indexes = this_1.getIndexesFromChart(chartModel); rowIdx = indexes[0]; colIdx = indexes[1]; } var sheet_1 = isUndefined(sheetIdx) ? this_1.parent.getActiveSheet() : this_1.parent.sheets[sheetIdx]; var cell = getCell(rowIdx, colIdx, sheet_1); if (!this_1.parent.isPrintingProcessing) { chartModel.address = [rowIdx, colIdx]; if (cell && cell.chart) { cell.chart.push(chartModel); } else { setCell(rowIdx, colIdx, sheet_1, { chart: [chartModel] }, true); } } } else { var indexes = getRangeIndexes(args.range); var chartIdxes = this_1.getIndexesFromChart(chartModel); if (indexes[0] !== chartIdxes[0] || indexes[1] !== chartIdxes[1]) { chartLength = chart.length; var eventArgs = { prevTop: chartModel.top, prevLeft: chartModel.left, prevRowIdx: indexes[0], prevColIdx: indexes[1], prevHeight: chartModel.height, prevWidth: chartModel.width, currentTop: chartModel.top, currentLeft: chartModel.left, currentRowIdx: chartIdxes[0], currentColIdx: chartIdxes[1], id: chartModel.id, currentHeight: chartModel.height, currentWidth: chartModel.width, requestType: 'chartRefreshOnInit' }; this_1.parent.notify(refreshChartCellOnInit, eventArgs); i -= chartLength - chart.length; } } i++; }; var this_1 = this; while (i < chart.length) { _loop_1(); } }; WorkbookChart.prototype.getIndexesFromChart = function (chart) { var chartRowIdx = { clientY: Number(addDPRValue(chart.top).toFixed(2)), isImage: true }; var chartColIdx = { clientX: Number(addDPRValue(chart.left).toFixed(2)), isImage: true }; this.parent.notify(getChartRowIdxFromClientY, chartRowIdx); this.parent.notify(getChartColIdxFromClientX, chartColIdx); return [chartRowIdx.clientY, chartColIdx.clientX]; }; WorkbookChart.prototype.refreshChartSize = function (args) { var chartCnt; var j = 1; var sheetCnt = this.parent.sheets.length + 1; while (j < sheetCnt) { var charts = this.parent.chartColl; chartCnt = charts ? charts.length : 0; if (chartCnt) { while (chartCnt--) { var chart = this.parent.chartColl[chartCnt]; if (args.overlayEle && !isNullOrUndefined(args.overlayEle.querySelector('#' + chart.id))) { var chartObj = this.parent.element.querySelector('.' + chart.id); var excelFilter = getComponent(chartObj, 'chart') || getComponent(chartObj, 'accumulationchart'); if (excelFilter) { excelFilter.height = args.height; excelFilter.width = args.width; } } } } j++; } }; WorkbookChart.prototype.focusChartBorder = function (args) { for (var idx = 0; idx < this.parent.chartColl.length; idx++) { var overlayEle = document.getElementById(args.id); var chartEle = document.getElementById(this.parent.chartColl[idx].id); if (overlayEle && chartEle && closest(chartEle, '.' + overlayEle.classList[1]) === overlayEle) { this.parent.notify(initiateChart, { option: this.parent.chartColl[idx], isRefresh: true }); } } }; WorkbookChart.prototype.deleteChartColl = function (args) { for (var idx = 0; idx < this.parent.chartColl.length; idx++) { if (this.parent.chartColl[idx].id + '_overlay' === args.id) { this.parent.chartColl.splice(idx, 1); } } }; WorkbookChart.prototype.updateChartsFromSheet = function () { var _this = this; this.parent.sheets.forEach(function (sheet) { if (sheet.chartColl) { sheet.chartColl.forEach(function (chartModel) { if (isNullOrUndefined(chartModel.id)) { chartModel.id = getUniqueID('e_spreadsheet_chart'); } var indexes = chartModel.address; var cell = getCell(indexes[0], indexes[1], sheet, true); if (cell) { if (!cell.chart) { cell.chart = []; } cell.chart.push(chartModel); } else { setCell(indexes[0], indexes[1], sheet, { chart: [chartModel] }); } if (_this.parent.chartColl.every(function (chartobj) { return chartobj.id !== chartModel.id; })) { _this.parent.chartColl.push(chartModel); } }); } }); }; /** * To Remove the event listeners. * * @returns {void} - To Remove the event listeners. */ WorkbookChart.prototype.destroy = function () { this.removeEventListener(); this.parent = null; }; /** * Get the workbook chart module name. * * @returns {string} - Get the workbook chart module name. */ WorkbookChart.prototype.getModuleName = function () { return 'workbookChart'; }; return WorkbookChart; }()); export { WorkbookChart };