Skip to content

Commit 94cdeab

Browse files
committed
bugfix(react-tree): fix VisibleFlatTreeItemGenerator omitting visible items
1 parent b83d941 commit 94cdeab

File tree

3 files changed

+48
-35
lines changed

3 files changed

+48
-35
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "prerelease",
3+
"comment": "bugfix: fix VisibleFlatTreeItemGenerator omitting visible items",
4+
"packageName": "@fluentui/react-tree",
5+
"email": "bernardo.sunderhus@gmail.com",
6+
"dependentChangeType": "patch"
7+
}

packages/react-components/react-tree/src/utils/createFlatTreeItems.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,12 @@ export function* VisibleFlatTreeItemGenerator<Props extends FlatTreeItemProps<un
109109
) {
110110
for (let index = 0, visibleIndex = 0; index < flatTreeItems.size; index++) {
111111
const item = flatTreeItems.getByIndex(index) as FlatTreeItem<Props>;
112-
const parent = item.parentValue ? flatTreeItems.get(item.parentValue) ?? flatTreeItems.root : flatTreeItems.root;
113112
if (isItemVisible(item, openItems, flatTreeItems)) {
114113
item.index = visibleIndex++;
115114
yield item;
116115
} else {
117-
index += parent.childrenSize - 1 + item.childrenSize;
116+
// Jump the amount of children the current item has, since those items will also be hidden
117+
index += item.childrenSize;
118118
}
119119
}
120120
}

packages/react-components/react-tree/stories/D_flatTree/useFlatTree.stories.tsx

+39-33
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,51 @@
1+
import {
2+
Tree,
3+
TreeItem,
4+
TreeItemLayout,
5+
useFlatTree_unstable,
6+
FlatTreeItemProps,
7+
} from '@fluentui/react-components/unstable';
18
import * as React from 'react';
2-
import { Tree, TreeItem, TreeItemLayout, useFlatTree_unstable, FlatTreeItemProps } from '@fluentui/react-tree';
3-
import story from './useFlatTree.md';
49

5-
type Item = FlatTreeItemProps & { content: string };
6-
7-
const defaultItems: Item[] = [
8-
{ value: '1', content: 'Level 1, item 1' },
9-
{ value: '1-1', parentValue: '1', content: 'Level 2, item 1' },
10-
{ value: '1-2', parentValue: '1', content: 'Level 2, item 2' },
11-
{ value: '1-3', parentValue: '1', content: 'Level 2, item 3' },
12-
{ value: '2', content: 'Level 1, item 2' },
13-
{ value: '2-1', parentValue: '2', content: 'Level 2, item 1' },
14-
{ value: '2-1-1', parentValue: '2-1', content: 'Level 3, item 1' },
15-
{ value: '2-2', parentValue: '2', content: 'Level 2, item 2' },
16-
{ value: '2-2-1', parentValue: '2-2', content: 'Level 3, item 1' },
17-
{ value: '2-2-2', parentValue: '2-2', content: 'Level 3, item 2' },
18-
{ value: '2-2-3', parentValue: '2-2', content: 'Level 3, item 3' },
19-
{ value: '3', content: 'Level 1, item 3' },
10+
const defaultItems: FlatTreeItemProps[] = [
11+
{
12+
value: '1',
13+
children: <TreeItemLayout>Level 1, item 1</TreeItemLayout>,
14+
},
15+
{
16+
value: '1-1',
17+
parentValue: '1',
18+
children: <TreeItemLayout>Level 2, item 1</TreeItemLayout>,
19+
},
20+
{
21+
value: '1-1-1',
22+
parentValue: '1-1',
23+
children: <TreeItemLayout>Level 3, item 1</TreeItemLayout>,
24+
},
25+
{
26+
value: '1-1-1-1',
27+
parentValue: '1-1-1',
28+
children: <TreeItemLayout>Level 4, item 1</TreeItemLayout>,
29+
},
30+
{
31+
value: '1-2',
32+
parentValue: '1',
33+
children: <TreeItemLayout>Level 2, item 2</TreeItemLayout>,
34+
},
35+
{
36+
value: '2',
37+
children: <TreeItemLayout>Level 1, item 2</TreeItemLayout>,
38+
},
2039
];
2140

2241
export const UseFlatTree = () => {
2342
const flatTree = useFlatTree_unstable(defaultItems);
2443

2544
return (
2645
<Tree {...flatTree.getTreeProps()} aria-label="Tree">
27-
{Array.from(flatTree.items(), flatTreeItem => {
28-
const { content, ...treeItemProps } = flatTreeItem.getTreeItemProps();
29-
return (
30-
<TreeItem {...treeItemProps} key={flatTreeItem.value}>
31-
<TreeItemLayout>{content}</TreeItemLayout>
32-
</TreeItem>
33-
);
34-
})}
46+
{Array.from(flatTree.items(), flatTreeItem => (
47+
<TreeItem {...flatTreeItem.getTreeItemProps()} key={flatTreeItem.value} />
48+
))}
3549
</Tree>
3650
);
3751
};
38-
39-
UseFlatTree.parameters = {
40-
docs: {
41-
description: {
42-
story,
43-
},
44-
},
45-
};

0 commit comments

Comments
 (0)