@visactor/vtable
Version:
canvas table width high performance
780 lines (774 loc) • 41.1 kB
JavaScript
import { isValid, merge } from "@visactor/vutils";
import { DefaultSparklineSpec } from "../tools/global";
import { checkHasChart, getChartDataId } from "./chart-helper/get-chart-spec";
import { checkHasAggregation, checkHasAggregationOnBottom, checkHasAggregationOnTop, checkHasTreeDefine } from "./layout-helper";
import { DimensionTree } from "./tree-helper";
import { getCellRange } from "./cell-range/simple-cell-range";
export class SimpleHeaderLayoutMap {
constructor(table, columns, showHeader, hierarchyIndent) {
this.seqId = 0, this.leftRowSeriesNumberColumnCount = 0, this.rightRowSeriesNumberColumnCount = 0,
this.bodyRowSpanCount = 1, this._transpose = !1, this._showHeader = !0, this._recordsCount = 0,
this._hasAggregation = !1, this._hasAggregationOnTopCount = 0, this._hasAggregationOnBottomCount = 0,
this._cellRangeMap = new Map, this._showHeader = showHeader, this._table = table,
this._columns = [], this._columnsIncludeHided = [], this._headerCellIds = [], this.hierarchyIndent = null != hierarchyIndent ? hierarchyIndent : 20,
this.hierarchyTextStartAlignment = table.options.hierarchyTextStartAlignment, this.columnTree = new DimensionTree(columns, {
seqId: 0
}, null), this._headerObjectsIncludeHided = this._addHeaders(0, columns, []), this._headerObjects = this._headerObjectsIncludeHided.filter((col => !0 !== col.define.hide)),
this._headerObjectMap = this._headerObjects.reduce(((o, e) => (o[e.id] = e, o)), {}),
this.rowHierarchyType = checkHasTreeDefine(this) ? "tree" : "grid", this._hasAggregation = checkHasAggregation(this),
this._hasAggregationOnBottomCount = checkHasAggregationOnBottom(this), this._hasAggregationOnTopCount = checkHasAggregationOnTop(this),
this.handleRowSeriesNumber(table.internalProps.rowSeriesNumber);
}
handleRowSeriesNumber(rowSeriesNumber) {
var _a;
rowSeriesNumber && (Array.isArray(rowSeriesNumber) ? this.rowSeriesNumberColumn = rowSeriesNumber.map(((seriesNumber, index) => {
var _a, _b;
return {
id: this.seqId++,
title: seriesNumber.title,
define: merge({
field: "_vtable_rowSeries_number_" + index
}, seriesNumber),
cellType: null !== (_a = seriesNumber.cellType) && void 0 !== _a ? _a : "text",
headerType: "checkbox" === seriesNumber.cellType ? "checkbox" : "text",
style: seriesNumber.style,
width: seriesNumber.width,
format: seriesNumber.format,
field: null !== (_b = seriesNumber.field) && void 0 !== _b ? _b : "_vtable_rowSeries_number_" + index,
icon: seriesNumber.icon,
headerIcon: seriesNumber.headerIcon,
isChildNode: !1
};
})) : this.rowSeriesNumberColumn = [ {
id: this.seqId++,
title: rowSeriesNumber.title,
define: merge({
field: "_vtable_rowSeries_number"
}, rowSeriesNumber),
cellType: null !== (_a = rowSeriesNumber.cellType) && void 0 !== _a ? _a : "text",
headerType: "checkbox" === rowSeriesNumber.cellType ? "checkbox" : "text",
style: rowSeriesNumber.style,
width: rowSeriesNumber.width,
format: rowSeriesNumber.format,
field: "_vtable_rowSeries_number",
icon: rowSeriesNumber.icon,
headerIcon: rowSeriesNumber.headerIcon,
isChildNode: !1
} ], this.leftRowSeriesNumberColumn = this.rowSeriesNumberColumn.filter((rowSeriesNumberItem => !0)),
this.rightRowSeriesNumberColumn = this.rowSeriesNumberColumn.filter((rowSeriesNumberItem => !1)),
this.leftRowSeriesNumberColumnCount = this.leftRowSeriesNumberColumn.length, this.rightRowSeriesNumberColumnCount = this.rightRowSeriesNumberColumn.length);
}
get transpose() {
return this._transpose;
}
set transpose(_transpose) {
this._transpose = _transpose;
}
get showHeader() {
return this._showHeader;
}
set showHeader(_showHeader) {
this._showHeader = _showHeader;
}
isSeriesNumberInHeader(col, row) {
if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && row >= 0 && col < this.leftRowSeriesNumberColumnCount) {
if (this.transpose) return !1;
if (row < this.headerLevelCount) return !0;
}
if (this.rightRowSeriesNumberColumnCount > 0 && row >= 0 && col >= this.colCount - this.rightRowSeriesNumberColumnCount) {
if (this.transpose) return !1;
if (row < this.headerLevelCount) return !0;
}
return !1;
}
isSeriesNumberInBody(col, row) {
if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && col < this.leftRowSeriesNumberColumnCount) {
if (this.transpose) return !0;
if (row >= this.headerLevelCount) return !0;
}
if (this.rightRowSeriesNumberColumnCount > 0 && col >= this.colCount - this.rightRowSeriesNumberColumnCount) {
if (this.transpose) return !0;
if (row >= this.headerLevelCount) return !0;
}
return !1;
}
isSeriesNumber(col, row) {
if (isValid(col) && isValid(row)) {
if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && row >= 0 && col < this.leftRowSeriesNumberColumnCount) return !0;
if (this.rightRowSeriesNumberColumnCount > 0 && row >= 0 && col >= this.colCount - this.rightRowSeriesNumberColumnCount) return !0;
}
return !1;
}
getSeriesNumberHeader(col, row) {
if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && col < this.leftRowSeriesNumberColumnCount) {
if (this.transpose) return;
if (row < this.headerLevelCount) return Object.assign({}, this.leftRowSeriesNumberColumn[col], {
style: Object.assign({}, this._table.transpose ? this._table.internalProps.theme.rowHeaderStyle : this._table.internalProps.theme.headerStyle, this._table.internalProps.rowSeriesNumber.headerStyle)
});
}
if (this.rightRowSeriesNumberColumnCount > 0 && col >= this.colCount - this.rightRowSeriesNumberColumnCount && row < this.headerLevelCount) {
if (this.transpose) return;
if (row < this.headerLevelCount) return this.rightRowSeriesNumberColumn[col - (this.colCount - this.rightRowSeriesNumberColumnCount)];
}
}
getSeriesNumberBody(col, row) {
if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && col < this.leftRowSeriesNumberColumnCount) {
if (this.transpose) return this.leftRowSeriesNumberColumn[col];
if (row >= this.headerLevelCount) return this.leftRowSeriesNumberColumn[col];
}
if (this.rightRowSeriesNumberColumnCount > 0 && col >= this.colCount - this.rightRowSeriesNumberColumnCount) {
if (this.transpose) return this.rightRowSeriesNumberColumn[col - (this.colCount - this.rightRowSeriesNumberColumnCount)];
if (row >= this.headerLevelCount) return this.rightRowSeriesNumberColumn[col - (this.colCount - this.rightRowSeriesNumberColumnCount)];
}
}
isHeader(col, row) {
return !!(this.transpose && col >= this.leftRowSeriesNumberColumnCount && col < this.headerLevelCount + this.leftRowSeriesNumberColumnCount) || !this.transpose && row >= 0 && row < this.headerLevelCount;
}
isAggregation(col, row) {
if (this.hasAggregation) {
if (this.hasAggregationOnBottomCount) if (this.transpose) {
if (col >= this.colCount - this.hasAggregationOnBottomCount) return !0;
} else if (row >= this.rowCount - this.hasAggregationOnBottomCount) return !0;
if (this.hasAggregationOnTopCount) if (this.transpose) {
if (col >= this.rowHeaderLevelCount && col < this.rowHeaderLevelCount + this.hasAggregationOnTopCount) return !0;
} else if (row >= this.columnHeaderLevelCount && row < this.columnHeaderLevelCount + this.hasAggregationOnTopCount) return !0;
}
return !1;
}
isTopAggregation(col, row) {
if (this.hasAggregationOnTopCount) if (this.transpose) {
if (col >= this.rowHeaderLevelCount && col < this.rowHeaderLevelCount + this.hasAggregationOnTopCount) return !0;
} else if (row >= this.columnHeaderLevelCount && row < this.columnHeaderLevelCount + this.hasAggregationOnTopCount) return !0;
return !1;
}
isBottomAggregation(col, row) {
if (this.hasAggregationOnBottomCount) if (this.transpose) {
if (col >= this.colCount - this.hasAggregationOnBottomCount) return !0;
} else if (row >= this.rowCount - this.hasAggregationOnBottomCount) return !0;
return !1;
}
get hasAggregation() {
return this._hasAggregation;
}
get hasAggregationOnTopCount() {
return this._hasAggregationOnTopCount;
}
get hasAggregationOnBottomCount() {
return this._hasAggregationOnBottomCount;
}
getAggregatorsByCell(col, row) {
return this.getColumnDefine(col, row).vtable_aggregator;
}
getAggregatorsByCellRange(startCol, startRow, endCol, endRow) {
let aggregators = [];
if (!this.transpose) {
for (let i = startCol; i <= endCol; i++) {
const column = this.getColumnDefine(i, startRow);
column.vtable_aggregator && (aggregators = aggregators.concat(Array.isArray(column.vtable_aggregator) ? column.vtable_aggregator : [ column.vtable_aggregator ]));
}
return aggregators;
}
for (let i = startRow; i <= endRow; i++) {
const column = this.getColumnDefine(startCol, i);
column.vtable_aggregator && (aggregators = aggregators.concat(Array.isArray(column.vtable_aggregator) ? column.vtable_aggregator : [ column.vtable_aggregator ]));
}
return [];
}
getAggregatorOnTop(col, row) {
const column = this.getColumnDefine(col, row), aggregators = column.vtable_aggregator, aggregation = column.aggregation;
if (Array.isArray(aggregation)) {
const topAggregators = aggregation.reduce(((indexs, agg, index) => (agg.showOnTop && indexs.push(index),
indexs)), []).map((index => aggregators[index]));
return this.transpose ? topAggregators[col - this.rowHeaderLevelCount] : topAggregators[row - this.columnHeaderLevelCount];
}
return this.transpose && col - this.rowHeaderLevelCount == 0 ? (null == aggregation ? void 0 : aggregation.showOnTop) ? aggregators : null : this.transpose || row - this.columnHeaderLevelCount != 0 ? null : (null == aggregation ? void 0 : aggregation.showOnTop) ? aggregators : null;
}
getAggregatorOnBottom(col, row) {
const column = this.getColumnDefine(col, row), aggregators = column.vtable_aggregator, aggregation = column.aggregation;
if (Array.isArray(aggregation)) {
const bottomAggregators = aggregation.reduce(((indexs, agg, index) => (agg.showOnTop || indexs.push(index),
indexs)), []).map((index => aggregators[index]));
return this.transpose ? bottomAggregators[col - (this.colCount - this.hasAggregationOnBottomCount)] : bottomAggregators[row - (this.rowCount - this.hasAggregationOnBottomCount)];
}
return this.transpose && col - (this.colCount - this.hasAggregationOnBottomCount) == 0 ? (null == aggregation ? void 0 : aggregation.showOnTop) ? null : aggregators : this.transpose || row - (this.rowCount - this.hasAggregationOnBottomCount) != 0 || (null == aggregation ? void 0 : aggregation.showOnTop) ? null : aggregators;
}
getAggregatorCellAddress(startCol, startRow, endCol, endRow) {
const cellAddrs = [], topCount = this.hasAggregationOnTopCount, bottomCount = this.hasAggregationOnBottomCount;
if (this.transpose) for (let row = startRow; row <= endRow; row++) {
if (this.getColumnDefine(startCol, row).vtable_aggregator) {
for (let i = 0; i < topCount; i++) cellAddrs.push({
col: this.headerLevelCount + i,
row: row
});
for (let i = 0; i < bottomCount; i++) cellAddrs.push({
col: this.rowCount - bottomCount + i,
row: row
});
}
} else for (let col = startCol; col <= endCol; col++) {
if (this.getColumnDefine(col, startRow).vtable_aggregator) {
for (let i = 0; i < topCount; i++) cellAddrs.push({
col: col,
row: this.headerLevelCount + i
});
for (let i = 0; i < bottomCount; i++) cellAddrs.push({
col: col,
row: this.rowCount - bottomCount + i
});
}
}
return cellAddrs;
}
getCellLocation(col, row) {
return this.isHeader(col, row) ? this.transpose ? "rowHeader" : "columnHeader" : "body";
}
isRowHeader(col, row) {
return !!(this.transpose && col >= this.leftRowSeriesNumberColumnCount && col < this.headerLevelCount + this.leftRowSeriesNumberColumnCount);
}
isColumnHeader(col, row) {
return !this.transpose && row >= 0 && row <= this.headerLevelCount - 1 && col >= this.leftRowSeriesNumberColumnCount && col < this.colCount - this.rightRowSeriesNumberColumnCount;
}
isFrozenColumn(col, row) {
if (isValid(row)) {
if (col >= 0 && col < this.frozenColCount && row >= this.frozenRowCount && row < this.rowCount - this.bottomFrozenRowCount) return !0;
} else if (this.frozenColCount > 0 && col >= 0 && col < this.frozenColCount) return !0;
return !1;
}
isRightFrozenColumn(col, row) {
if (isValid(row)) {
if (col >= this.colCount - this.rightFrozenColCount && row >= this.frozenRowCount && row < this.rowCount - this.bottomFrozenRowCount) return !0;
} else if (this.rightFrozenColCount > 0 && col >= this.colCount - this.rightFrozenColCount) return !0;
return !1;
}
isFrozenRow(col, row) {
if (isValid(row)) {
if (row >= 0 && row < this.frozenRowCount && col >= this.frozenColCount && col < this.colCount - this.rightFrozenColCount) return !0;
} else if (row = col, this.frozenRowCount > 0 && row >= 0 && row < this.frozenRowCount) return !0;
return !1;
}
isBottomFrozenRow(col, row) {
if (isValid(row)) {
if (row >= this.rowCount - this.bottomFrozenRowCount && col >= this.frozenColCount && col < this.colCount - this.rightFrozenColCount) return !0;
} else if (row = col, this.bottomFrozenRowCount > 0 && row >= this.rowCount - this.bottomFrozenRowCount) return !0;
return !1;
}
isLeftTopCorner(col, row) {
return col >= 0 && col < this.frozenColCount && row >= 0 && row < this.frozenRowCount;
}
isLeftBottomCorner(col, row) {
return col >= 0 && col < this.frozenColCount && row >= this.rowCount - this.bottomFrozenRowCount;
}
isRightTopCorner(col, row) {
return col >= this.colCount - this.rightFrozenColCount && row >= 0 && row < this.frozenRowCount;
}
isRightBottomCorner(col, row) {
return col >= this.colCount - this.rightFrozenColCount && row >= this.rowCount - this.bottomFrozenRowCount;
}
isCornerHeader(col, row) {
return !1;
}
getColumnHeaderRange() {
var _a, _b;
return this.transpose ? {
start: {
col: 0,
row: 0
},
end: {
col: this._headerCellIds.length - 1,
row: (null !== (_a = this.rowCount) && void 0 !== _a ? _a : 0) - 1
}
} : {
start: {
col: 0,
row: 0
},
end: {
col: (null !== (_b = this.colCount) && void 0 !== _b ? _b : 0) - 1,
row: this._headerCellIds.length - 1
}
};
}
getRowHeaderRange() {
var _a, _b;
return this.transpose ? {
start: {
col: 0,
row: 0
},
end: {
col: this._headerCellIds.length - 1,
row: (null !== (_a = this.rowCount) && void 0 !== _a ? _a : 0) - 1
}
} : {
start: {
col: 0,
row: 0
},
end: {
col: (null !== (_b = this.colCount) && void 0 !== _b ? _b : 0) - 1,
row: this._headerCellIds.length - 1
}
};
}
getCornerHeaderRange() {}
getBodyRange() {
var _a, _b, _c, _d;
return this.transpose ? {
start: {
col: this.headerLevelCount,
row: 0
},
end: {
col: (null !== (_a = this.colCount) && void 0 !== _a ? _a : 0) - 1,
row: (null !== (_b = this.rowCount) && void 0 !== _b ? _b : 0) - 1
}
} : {
start: {
col: 0,
row: this.headerLevelCount
},
end: {
col: (null !== (_c = this.colCount) && void 0 !== _c ? _c : 0) - 1,
row: (null !== (_d = this.rowCount) && void 0 !== _d ? _d : 0) - 1
}
};
}
get headerLevelCount() {
return this.showHeader ? this._headerCellIds.length : 0;
}
get columnHeaderLevelCount() {
return this.transpose ? 0 : this.headerLevelCount;
}
get rowHeaderLevelCount() {
return this.transpose ? this.headerLevelCount : 0;
}
get frozenColCount() {
return this._table.internalProps.frozenColCount ? this.colCount > this._table.internalProps.frozenColCount ? this._table.internalProps.frozenColCount : this.colCount : 0;
}
get frozenRowCount() {
return this._table.internalProps.frozenRowCount ? this.rowCount >= this._table.internalProps.frozenRowCount ? this._table.internalProps.frozenRowCount : this.rowCount : 0;
}
get bottomFrozenRowCount() {
return this._table.internalProps.bottomFrozenRowCount ? this.rowCount - this.headerLevelCount >= this._table.internalProps.bottomFrozenRowCount ? this._table.internalProps.bottomFrozenRowCount : this.rowCount - this.headerLevelCount : 0;
}
get rightFrozenColCount() {
return this._table.internalProps.rightFrozenColCount ? this.colCount - this.frozenColCount >= this._table.internalProps.rightFrozenColCount ? this._table.internalProps.rightFrozenColCount : Math.max(0, this.colCount - this.frozenColCount) : 0;
}
get colCount() {
return this.transpose ? this.headerLevelCount + this.recordsCount + this.leftRowSeriesNumberColumnCount + this.rightRowSeriesNumberColumnCount : this._columns.length + this.leftRowSeriesNumberColumnCount + this.rightRowSeriesNumberColumnCount;
}
get rowCount() {
return this.transpose ? this._columns.length : this.headerLevelCount + this.recordsCount;
}
get bodyRowCount() {
return this.transpose ? this._columns.length : this.rowCount - this.bottomFrozenRowCount - this.headerLevelCount;
}
get bodyColCount() {
return this.transpose ? this.colCount - this.rightFrozenColCount - this.rowHeaderLevelCount : this._columns.length;
}
get recordsCount() {
return this._recordsCount;
}
set recordsCount(recordsCount) {
this._recordsCount = recordsCount;
}
get headerObjects() {
return this._headerObjects;
}
get columnObjects() {
return this._columns;
}
get headerObjectsIncludeHided() {
return this._headerObjectsIncludeHided;
}
get columnWidths() {
if (this.leftRowSeriesNumberColumnCount) {
const widths = this.leftRowSeriesNumberColumn.map((item => ({
width: item.width,
minWidth: item.minWidth,
maxWidth: item.maxWidth
})));
return widths.push(...this._columns.map((item => ({
width: item.width,
minWidth: item.minWidth,
maxWidth: item.maxWidth
})))), widths;
}
return this._columns.map((item => ({
width: item.width,
minWidth: item.minWidth,
maxWidth: item.maxWidth
})));
}
getColumnWidthDefined(col) {
var _a;
if (col >= 0) {
if (col < this.leftRowSeriesNumberColumnCount) return this.leftRowSeriesNumberColumn[col];
if (this.transpose) {
let maxWidth, minWidth, width = 0;
if (col >= this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount) {
let isAuto;
return this.columnObjects.forEach(((obj, index) => {
"number" == typeof obj.width ? width = Math.max(obj.width, width) : "auto" === obj.width && (isAuto = !0),
"number" == typeof obj.minWidth && (minWidth = Math.max(obj.minWidth, minWidth)),
"number" == typeof obj.maxWidth && (maxWidth = Math.max(obj.maxWidth, maxWidth));
})), width = width > 0 ? width : isAuto ? "auto" : void 0, {
width: width,
minWidth: minWidth,
maxWidth: maxWidth
};
}
if (this.isRowHeader(col, 0)) {
const defaultWidth = Array.isArray(this._table.defaultHeaderColWidth) ? null !== (_a = this._table.defaultHeaderColWidth[col]) && void 0 !== _a ? _a : this._table.defaultColWidth : this._table.defaultHeaderColWidth;
return "auto" === defaultWidth ? {
width: "auto"
} : {
width: defaultWidth
};
}
}
return this._columns[col - this.leftRowSeriesNumberColumnCount];
}
}
getCellId(col, row) {
var _a, _b, _c, _d;
return this.transpose ? col >= this.headerLevelCount + this.leftRowSeriesNumberColumnCount ? null === (_a = this._columns[row]) || void 0 === _a ? void 0 : _a.id : this.isSeriesNumber(col, row) ? row + "_series_number" : null === (_b = this._headerCellIds[col - this.leftRowSeriesNumberColumnCount]) || void 0 === _b ? void 0 : _b[row] : this.isSeriesNumber(col, row) ? this.rowSeriesNumberColumn[col].id : this.headerLevelCount <= row ? null === (_c = this._columns[col - this.leftRowSeriesNumberColumnCount]) || void 0 === _c ? void 0 : _c.id : null === (_d = this._headerCellIds[row]) || void 0 === _d ? void 0 : _d[col - this.leftRowSeriesNumberColumnCount];
}
getHeader(col, row) {
if (this.isSeriesNumberInHeader(col, row)) return this.getSeriesNumberHeader(col, row);
const id = this.getCellId(col, row);
return this._headerObjectMap[id];
}
getHeaderField(col, row) {
var _a, _b, _c;
if (this.isSeriesNumberInHeader(col, row)) return null === (_a = this.getSeriesNumberHeader(col, row)) || void 0 === _a ? void 0 : _a.field;
if (this.isSeriesNumberInBody(col, row)) return null === (_b = this.getSeriesNumberBody(col, row)) || void 0 === _b ? void 0 : _b.field;
const id = this.getCellId(col, row);
return (null === (_c = this._headerObjectMap[id]) || void 0 === _c ? void 0 : _c.field) || (this.transpose ? this._columns[row] && this._columns[row].field : this._columns[col - this.leftRowSeriesNumberColumnCount] && this._columns[col - this.leftRowSeriesNumberColumnCount].field);
}
getHeaderCellAdressById(id) {
for (let i = 0; i < this._headerCellIds.length; i++) {
const row = this._headerCellIds[i];
for (let j = 0; j < row.length; j++) if (row[j] === id) return this.transpose ? {
col: i,
row: j
} : {
col: j + this.leftRowSeriesNumberColumnCount,
row: i
};
}
}
getHeaderCellAddressByField(field) {
const hd = this.headerObjects.find((col => col && col.field === field));
return hd && this.getHeaderCellAdressById(hd.id);
}
getBody(col, _row) {
return this.isSeriesNumber(col, _row) ? this.getSeriesNumberBody(col, _row) : this.transpose ? this._columns[_row] : this._columns[col - this.leftRowSeriesNumberColumnCount];
}
getBodyLayoutRangeById(id) {
var _a, _b;
if (this.transpose) {
for (let row = 0; row < (null !== (_a = this.rowCount) && void 0 !== _a ? _a : 0); row++) if (id === this._columns[row].id) return {
start: {
col: 0,
row: row
},
end: {
col: 0,
row: row
}
};
} else for (let col = this.leftRowSeriesNumberColumnCount; col < (null !== (_b = this.colCount) && void 0 !== _b ? _b : 0); col++) if (id === this._columns[col - this.leftRowSeriesNumberColumnCount].id) return {
start: {
col: col,
row: 0
},
end: {
col: col,
row: 0
}
};
return {
start: {
col: -1,
row: -1
},
end: {
col: -1,
row: -1
}
};
}
getCellRange(col, row) {
return getCellRange(col, row, this);
}
isCellRangeEqual(col, row, targetCol, targetRow) {
const range1 = this.getCellRange(col, row), range2 = this.getCellRange(targetCol, targetRow);
return range1.start.col === range2.start.col && range1.end.col === range2.end.col && range1.start.row === range2.start.row && range1.end.row === range2.end.row;
}
getRecordShowIndexByCell(col, row) {
const skipRowCount = this.hasAggregationOnTopCount ? this.headerLevelCount + 1 : this.headerLevelCount;
return this.transpose ? col < skipRowCount ? -1 : col - skipRowCount : row < skipRowCount ? -1 : row - skipRowCount;
}
getRecordStartRowByRecordIndex(index) {
return (this.hasAggregationOnTopCount ? this.headerLevelCount + 1 : this.headerLevelCount) + index;
}
_addHeaders(row, column, roots, hideColumnsSubHeader) {
const results = [], rowCells = this._newRow(row, hideColumnsSubHeader);
return column.forEach((hd => {
var _a, _b, _c, _d;
const col = this._columns.length, id = this.seqId++, cell = {
id: id,
title: null !== (_a = hd.title) && void 0 !== _a ? _a : hd.caption,
headerIcon: hd.headerIcon,
field: hd.field,
style: hd.headerStyle,
headerType: null !== (_b = hd.headerType) && void 0 !== _b ? _b : "text",
dropDownMenu: hd.dropDownMenu,
define: hd,
columnWidthComputeMode: hd.columnWidthComputeMode
};
results[id] = cell;
for (let r = row - 1; r >= 0; r--) this._headerCellIds[r] && (this._headerCellIds[r][col] = roots[r]);
if (hideColumnsSubHeader ? this._headerCellIds[row - 1] && (rowCells[col] = this._headerCellIds[row - 1][col]) : rowCells[col] = id,
hd.columns) {
!hd.columns.every((c => c.hide)) && this._addHeaders(row + 1, hd.columns, [ ...roots, id ], hd.hideColumnsSubHeader || hideColumnsSubHeader).forEach((c => results.push(c)));
} else {
const colDef = {
id: this.seqId++,
field: hd.field,
fieldFormat: hd.fieldFormat,
width: hd.width,
minWidth: hd.minWidth,
maxWidth: hd.maxWidth,
icon: hd.icon,
cellType: null !== (_d = null !== (_c = hd.cellType) && void 0 !== _c ? _c : hd.columnType) && void 0 !== _d ? _d : "text",
chartModule: "chartModule" in hd ? hd.chartModule : null,
chartSpec: "chartSpec" in hd ? hd.chartSpec : null,
sparklineSpec: "sparklineSpec" in hd ? hd.sparklineSpec : DefaultSparklineSpec,
style: hd.style,
define: hd,
columnWidthComputeMode: hd.columnWidthComputeMode,
disableColumnResize: null == hd ? void 0 : hd.disableColumnResize,
aggregation: hd.aggregation,
isChildNode: row >= 1
};
if (this._columnsIncludeHided.push(colDef), !0 !== hd.hide) {
this._columns.push(colDef);
for (let r = row + 1; r < this._headerCellIds.length; r++) this._headerCellIds[r][col] = id;
}
}
})), results;
}
_newRow(row, hideColumnsSubHeader = !1) {
if (this._headerCellIds[row]) {
const prev = this._headerCellIds[row - 1];
if (prev.length > this._headerCellIds[row].length) for (let col = this._headerCellIds[row].length; col < prev.length; col++) this._headerCellIds[row][col] = prev[col];
return this._headerCellIds[row];
}
if (hideColumnsSubHeader) return [];
const newRow = this._headerCellIds[row] = [];
if (!this._columns.length) return newRow;
const prev = this._headerCellIds[row - 1];
for (let col = 0; col < prev.length; col++) newRow[col] = prev[col];
return newRow;
}
getCellHeaderPaths(col, row) {
if (this.isSeriesNumber(col, row)) return;
let colPath = [], rowPath = [];
return this.transpose ? rowPath = [ {
field: this._columns[row].field
} ] : colPath = [ {
field: this._columns[col - this.leftRowSeriesNumberColumnCount].field
} ], {
colHeaderPaths: colPath,
rowHeaderPaths: rowPath,
cellLocation: this.getCellLocation(col, row)
};
}
getParentCellId(col, row) {
if (0 !== row) {
if (this.isColumnHeader(col, row)) return this.getCellId(col, row - 1);
if (this.isRowHeader(col, row)) {
if (this.isSeriesNumberInBody(col - 1, row)) return;
return this.getCellId(col - 1, row);
}
}
}
canMoveHeaderPosition(source, target) {
if (this.isSeriesNumberInHeader(target.col, target.row) || this.isSeriesNumberInHeader(source.col, source.row)) return !1;
if (!this.transpose && this.isSeriesNumberInBody(target.col, target.row) && this.isSeriesNumberInBody(source.col, source.row)) {
const sourceIndex = this.getRecordShowIndexByCell(0, source.row), targetIndex = this.getRecordShowIndexByCell(0, target.row);
return this._table.dataSource.canChangeOrder(sourceIndex, targetIndex);
}
if (this.transpose && this.isSeriesNumberInBody(target.col, target.row) && this.isSeriesNumberInBody(source.col, source.row) && (this.getBody(source.col + this.leftRowSeriesNumberColumnCount, source.row).isChildNode && this.getBody(target.col + this.leftRowSeriesNumberColumnCount, target.row).isChildNode ? (source.col = source.col + this.leftRowSeriesNumberColumnCount + this.rowHeaderLevelCount - 1,
target.col = target.col + this.leftRowSeriesNumberColumnCount + this.rowHeaderLevelCount - 1) : (source.col = source.col + this.leftRowSeriesNumberColumnCount,
target.col = target.col + this.leftRowSeriesNumberColumnCount)), source.col < 0 || source.row < 0 || target.col < 0 || target.row < 0) return !1;
if ("disabled" === this._table.internalProps.frozenColDragHeaderMode && this._table.isFrozenColumn(target.col)) return !1;
const sourceCellRange = this.getCellRange(source.col, source.row);
if (this.isColumnHeader(source.col, source.row)) {
return this.getParentCellId(source.col, sourceCellRange.start.row) === this.getParentCellId(target.col, sourceCellRange.start.row);
}
if (this.isRowHeader(source.col, source.row)) {
return this.getParentCellId(sourceCellRange.start.col, source.row) === this.getParentCellId(sourceCellRange.start.col, target.row);
}
return !1;
}
moveHeaderPosition(source, target) {
var _a, _b;
if (((null === (_a = this._table.options.dragOrder) || void 0 === _a ? void 0 : _a.validateDragOrderOnEnd(source, target)) || !(null === (_b = this._table.options.dragOrder) || void 0 === _b ? void 0 : _b.validateDragOrderOnEnd)) && this.canMoveHeaderPosition(source, target)) {
let sourceCellRange = this.getCellRange(source.col, source.row);
if (this.isColumnHeader(source.col, source.row)) {
const sourceSize = sourceCellRange.end.col - sourceCellRange.start.col + 1;
let targetIndex;
const targetCellRange = this.getCellRange(target.col, sourceCellRange.start.row);
if (targetIndex = target.col >= source.col ? targetCellRange.end.col - sourceSize + 1 : targetCellRange.start.col,
targetIndex === sourceCellRange.start.col) return null;
for (let row = 0; row < this._headerCellIds.length; row++) {
const sourceIds = this._headerCellIds[row].splice(sourceCellRange.start.col - this.leftRowSeriesNumberColumnCount, sourceSize);
sourceIds.unshift(targetIndex - this.leftRowSeriesNumberColumnCount, 0), Array.prototype.splice.apply(this._headerCellIds[row], sourceIds);
}
const sourceColumns = this._columns.splice(sourceCellRange.start.col - this.leftRowSeriesNumberColumnCount, sourceSize);
return sourceColumns.unshift(targetIndex - this.leftRowSeriesNumberColumnCount, 0),
Array.prototype.splice.apply(this._columns, sourceColumns), this.columnTree.movePosition(sourceCellRange.start.row, sourceCellRange.start.col - this.leftRowSeriesNumberColumnCount, targetIndex - this.leftRowSeriesNumberColumnCount),
this.columnTree.reset(this.columnTree.tree.children), this._cellRangeMap = new Map,
{
sourceIndex: sourceCellRange.start.col,
targetIndex: targetIndex,
sourceSize: sourceSize,
targetSize: targetCellRange.end.col - targetCellRange.start.col + 1,
moveType: "column"
};
}
if (this.isRowHeader(source.col, source.row) || this.isSeriesNumberInBody(source.col, source.row) && this.transpose) {
this.isSeriesNumberInBody(source.col, source.row) && (sourceCellRange = this.getCellRange(source.col + this.leftRowSeriesNumberColumnCount, source.row));
const sourceSize = sourceCellRange.end.row - sourceCellRange.start.row + 1;
let targetIndex;
const targetCellRange = this.getCellRange(sourceCellRange.start.col, target.row);
if (targetIndex = target.row >= source.row ? targetCellRange.end.row - sourceSize + 1 : targetCellRange.start.row,
targetIndex === sourceCellRange.start.row) return null;
for (let row = 0; row < this._headerCellIds.length; row++) {
const sourceIds = this._headerCellIds[row].splice(sourceCellRange.start.row, sourceSize);
sourceIds.unshift(targetIndex, 0), Array.prototype.splice.apply(this._headerCellIds[row], sourceIds);
}
const sourceColumns = this._columns.splice(sourceCellRange.start.row, sourceSize);
return sourceColumns.unshift(targetIndex, 0), Array.prototype.splice.apply(this._columns, sourceColumns),
this.columnTree.movePosition(sourceCellRange.start.col - this.leftRowSeriesNumberColumnCount, sourceCellRange.start.row, targetIndex + (target.row > source.row ? sourceCellRange.end.row - sourceCellRange.start.row : 0)),
this.columnTree.reset(this.columnTree.tree.children), this._cellRangeMap = new Map,
{
sourceIndex: sourceCellRange.start.row,
targetIndex: targetIndex,
sourceSize: sourceSize,
targetSize: targetCellRange.end.row - targetCellRange.start.row + 1,
moveType: "row"
};
}
if (this.isSeriesNumberInBody(source.col, source.row)) return {
sourceIndex: source.row,
targetIndex: target.row,
sourceSize: 1,
targetSize: 1,
moveType: "row"
};
}
return null;
}
toggleHierarchyState(diffDataIndices) {
return {
addCellPositions: diffDataIndices.add.map((index => ({
col: 0,
row: this._table.columnHeaderLevelCount + index
}))),
removeCellPositions: diffDataIndices.remove.map((index => ({
col: 0,
row: this._table.columnHeaderLevelCount + index
})))
};
}
setChartInstance(_col, _row, chartInstance) {
const columnObj = this.transpose ? this._columns[_row] : this._columns[_col - this.leftRowSeriesNumberColumnCount];
"function" != typeof columnObj.chartSpec && (columnObj.chartInstance = chartInstance);
}
getChartInstance(_col, _row) {
return (this.transpose ? this._columns[_row] : this._columns[_col - this.leftRowSeriesNumberColumnCount]).chartInstance;
}
checkHasChart() {
return checkHasChart(this);
}
getAxisConfigInPivotChart(col, row) {}
isEmpty(col, row) {
return !1;
}
isAxisCell(col, row) {
return !1;
}
getChartAxes(col, row) {
return [];
}
isShareChartSpec(col, row) {
const body = this.getBody(col, row);
return "function" != typeof (null == body ? void 0 : body.chartSpec);
}
isNoChartDataRenderNothing(col, row) {
const body = this.getBody(col, row);
return (null == body ? void 0 : body.define).noDataRenderNothing;
}
getChartSpec(col, row) {
return this.getRawChartSpec(col, row);
}
getRawChartSpec(col, row) {
const body = this.getBody(col, row), chartSpec = null == body ? void 0 : body.chartSpec;
if ("function" == typeof chartSpec) {
return chartSpec({
col: col,
row: row,
dataValue: this._table.getCellOriginValue(col, row) || "",
value: this._table.getCellValue(col, row) || "",
rect: this._table.getCellRangeRelativeRect(this._table.getCellRange(col, row)),
table: this._table
});
}
return chartSpec;
}
getChartDataId(col, row) {
return getChartDataId(col, row, this);
}
release() {
const activeChartInstance = this._table._getActiveChartInstance();
null == activeChartInstance || activeChartInstance.release(), this.columnObjects.forEach((indicatorObject => {
var _a;
null === (_a = indicatorObject.chartInstance) || void 0 === _a || _a.release();
}));
}
clearCellRangeMap() {
this._cellRangeMap.clear();
}
updateColumnTitle(col, row, title) {
const define = this._table.internalProps.layoutMap.getHeader(col, row);
define.title = title, define.define.title = title;
}
getColumnByField(field) {
var _a;
return null === (_a = this.columnObjects) || void 0 === _a ? void 0 : _a.reduce(((pre, cur, index) => (cur.field === field && pre.push({
col: index,
columnDefine: cur
}), pre)), []);
}
getColumnByKey(key) {
var _a;
let col;
return {
columnDefine: null === (_a = this.columnObjects) || void 0 === _a ? void 0 : _a.find(((columnData, index) => {
var _a;
return (null === (_a = columnData.define) || void 0 === _a ? void 0 : _a.key) === key && (col = index,
!0);
})),
col: col
};
}
getColumnDefine(col, row) {
if (col >= 0) return col < this.leftRowSeriesNumberColumnCount ? this.leftRowSeriesNumberColumn[col].define : this.transpose ? this._columns[row].define : this._columns[col - this.leftRowSeriesNumberColumnCount].define;
}
}
//# sourceMappingURL=simple-header-layout.js.map