@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
JavaScript
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 };