Skip to content

Commit

Permalink
fix(layout): 修复隐藏结点时对父节点的布局计算错误 close #2355 (#2360)
Browse files Browse the repository at this point in the history
* fix(layout): 修复隐藏结点时对父节点的布局计算错误 close #2355

* chore: 增加废弃标记

---------

Co-authored-by: JuZe <[email protected]>
  • Loading branch information
NoobNotN and JuZe authored Oct 11, 2023
1 parent 1583c19 commit 4327d36
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 2 deletions.
28 changes: 28 additions & 0 deletions packages/s2-core/__tests__/spreadsheet/hidden-columns-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -347,6 +347,34 @@ describe('SpreadSheet Hidden Columns Tests', () => {
expect(hiddenColumnsInfo).toBeTruthy();
expect(parentNode.hiddenChildNodeInfo).toEqual(hiddenColumnsInfo);
});
// https://github.com/antvis/S2/issues/2355
test('should render correctly x and width after hide columns when there is only one value for the higher-level dimension.', () => {
const nodeId = 'root[&]笔[&]义乌[&]price';

pivotSheet.setOptions({
style: {
colCfg: {
width: 100,
},
},
});
const data = pivotSheet.dataCfg.data.map((i) => ({ ...i, cost: 0 }));
pivotSheet.setDataCfg({
data,
fields: {
values: ['cost', 'price'],
},
});
pivotSheet.render();

pivotSheet.interaction.hideColumns([nodeId]);
const rootNode = pivotSheet
.getColumnNodes()
.find((node) => node.id === 'root[&]笔');

expect(rootNode.width).toEqual(300);
expect(rootNode.x).toEqual(0);
});

// https://github.com/antvis/S2/issues/2194
test('should render correctly when always hidden last column', () => {
Expand Down
3 changes: 3 additions & 0 deletions packages/s2-core/src/facet/layout/node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,9 @@ export class Node {

public isTotalRoot?: boolean;

/**
* @deprecated 已废弃, 该属性只记录相邻一级的隐藏信息,将会在未来版本中移除
*/
public hiddenChildNodeInfo?: HiddenColumnsInfo | null;

public extra?: Record<string, any>;
Expand Down
4 changes: 2 additions & 2 deletions packages/s2-core/src/facet/pivot-facet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -252,9 +252,9 @@ export class PivotFacet extends BaseFacet {
leafNodes.push(parentNode);

const firstVisibleChildNode = parentNode.children?.find(
(childNode) => !childNode.hiddenChildNodeInfo,
(childNode) => childNode.width,
);
// 父节点 x 坐标 = 第一个未隐藏的子节点的 x 坐标
// 父节点 x 坐标 = 第一个正常布局处理过的子节点 x 坐标(width 有值认为是正常布局过)
const parentNodeX = firstVisibleChildNode?.x;
// 父节点宽度 = 所有子节点宽度之和
const parentNodeWidth = sumBy(parentNode.children, 'width');
Expand Down
1 change: 1 addition & 0 deletions packages/s2-core/src/utils/layout/generate-header-nodes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ export const generateHeaderNodes = (params: HeaderNodesParams) => {
// 如果当前是隐藏节点, 给其父节点挂载相应信息 (兄弟节点, 当前哪个子节点隐藏了), 这样在 facet 层可以直接使用, 不用每次都去遍历
const hiddenColumnsInfo = spreadsheet?.facet?.getHiddenColumnsInfo(node);
if (hiddenColumnsInfo && parentNode) {
// hiddenChildNodeInfo 属性在 S2 中没有用到,但是没删怕外部有使用,已标记为废弃
parentNode.hiddenChildNodeInfo = hiddenColumnsInfo;
}

Expand Down

0 comments on commit 4327d36

Please sign in to comment.