Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"changes": [
{
"comment": "feat: refactor pivotTable corner with no columns or rows case #3653\n\n",
"type": "none",
"packageName": "@visactor/vtable"
}
],
"packageName": "@visactor/vtable",
"email": "892739385@qq.com"
}
33 changes: 22 additions & 11 deletions packages/vtable/src/layout/pivot-header-layout.ts
Original file line number Diff line number Diff line change
Expand Up @@ -798,6 +798,9 @@ export class PivotHeaderLayoutMap implements LayoutMapAPI {
this.rowHierarchyType === 'grid-tree'
? this._getRowHeaderTreeExpandedMaxLevelCount() || this.rowHeaderLevelCount
: this.rowHeaderLevelCount;
if (colLevelCount === 0 || rowLevelCount === 0) {
return results;
}
if (this.cornerSetting.titleOnDimension === 'all') {
if (this.indicatorsAsCol) {
if (colDimensionKeys) {
Expand Down Expand Up @@ -1581,7 +1584,10 @@ export class PivotHeaderLayoutMap implements LayoutMapAPI {
!this.dataset.customColTree?.length //根据情况来加的判断条件 之前是只兼容没有设置两个自定义树的情况 现在对有自定义树的情况也处理出现角头
// && !this.dataset.customRowTree?.length
) {
if (this.cornerSetting.titleOnDimension === 'row' && this.cornerSetting.forceShowHeader) {
if (
(this.cornerSetting.titleOnDimension === 'row' || this.cornerSetting.titleOnDimension === 'all') &&
this.cornerSetting.forceShowHeader
) {
count = 1;
} else if (
!this._table.isPivotChart() &&
Expand Down Expand Up @@ -1658,7 +1664,10 @@ export class PivotHeaderLayoutMap implements LayoutMapAPI {
// && !this.dataset.customColTree
!this.dataset.customRowTree?.length //根据情况来加的判断条件 之前是只兼容没有设置两个自定义树的情况 现在对有自定义树的情况也处理出现角头
) {
if (this.cornerSetting.titleOnDimension === 'column' && this.cornerSetting.forceShowHeader) {
if (
(this.cornerSetting.titleOnDimension === 'column' || this.cornerSetting.titleOnDimension === 'all') &&
this.cornerSetting.forceShowHeader
) {
count = 1;
} else if (
!this._table.isPivotChart() &&
Expand Down Expand Up @@ -1714,17 +1723,20 @@ export class PivotHeaderLayoutMap implements LayoutMapAPI {
this._rowHeaderLevelCount = count;
}
get colCount(): number {
return (
(this._getColumnHeaderTreeExpandedMaxLevelCount() > 0 ||
let bodyColCount;
if (
this._getColumnHeaderTreeExpandedMaxLevelCount() > 0 ||
this._table.isPivotChart() ||
(this.dataset.records as Array<any>)?.length > 0 ||
(this.dataset.records && !Array.isArray(this.dataset.records))
? this._columnHeaderCellIds[0]?.length ?? this.columnDimensionTree.tree.size
: 0) +
this.rowHeaderLevelCount +
this.rightHeaderColCount +
this.leftRowSeriesNumberColumnCount
); // 小心rightFrozenColCount和colCount的循环引用 造成调用栈溢出
) {
bodyColCount =
(this._columnHeaderCellIds[0]?.length ?? this.columnDimensionTree.tree.size) ||
(this._indicators?.length > 0 ? 1 : 0);
} else {
bodyColCount = 0;
}
return bodyColCount + this.rowHeaderLevelCount + this.rightHeaderColCount + this.leftRowSeriesNumberColumnCount; // 小心rightFrozenColCount和colCount的循环引用 造成调用栈溢出
}
get rowCount(): number {
return (
Expand All @@ -1740,7 +1752,6 @@ export class PivotHeaderLayoutMap implements LayoutMapAPI {
this.columnHeaderLevelCount +
this.bottomHeaderRowCount // 小心bottomFrozenRowCount和rowCount的循环引用 造成调用栈溢出
);
// return (this._rowHeaderCellIds?.length ?? 0) + this.columnHeaderLevelCount + this.bottomFrozenRowCount;
}
get bodyRowSpanCount() {
return this.rowDimensionTree.tree.size;
Expand Down
4 changes: 2 additions & 2 deletions packages/vtable/src/layout/tree-helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ export class DimensionTree {
size += this.setTreeNode(n, size, node);
});
} else {
size = 1;
node.level === -1 ? (size = 0) : (size = 1);
// re.totalLevel = Math.max(re.totalLevel, (node.level ?? -1) + 1);
}
} else if (node.hierarchyState === HierarchyState.expand && children?.length >= 1) {
Expand Down Expand Up @@ -224,7 +224,7 @@ export class DimensionTree {
} else {
//树形展示 无children子节点。但不能确定是最后一层的叶子节点 totalLevel还不能确定是计算完整棵树的整体深度
node.hierarchyState = HierarchyState.none;
size = 1;
node.level === -1 ? (size = 0) : (size = 1);
}

node.size = size;
Expand Down
6 changes: 4 additions & 2 deletions packages/vtable/src/scenegraph/scenegraph.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1233,8 +1233,10 @@ export class Scenegraph {
*/
setBodyAndRowHeaderY(y: number) {
// correct y, avoid scroll out of range
const firstBodyCell = this.bodyGroup.firstChild?.firstChild as Group;
const lastBodyCell = this.bodyGroup.firstChild?.lastChild as Group;
const firstBodyCell =
(this.bodyGroup.firstChild?.firstChild as Group) ?? (this.rowHeaderGroup.firstChild?.firstChild as Group);
const lastBodyCell =
(this.bodyGroup.firstChild?.lastChild as Group) ?? (this.rowHeaderGroup.firstChild?.lastChild as Group);
if (
y === 0 &&
firstBodyCell &&
Expand Down