Skip to content
This repository was archived by the owner on Jun 28, 2026. It is now read-only.

Commit 9ac1c0f

Browse files
authored
fix: node toggling while filtering and wrong position of the dropdown panel (#8173)
1 parent 578f095 commit 9ac1c0f

1 file changed

Lines changed: 18 additions & 11 deletions

File tree

components/lib/tree/Tree.js

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ export const Tree = React.memo(
1616

1717
const [filterValue, filterValueState, setFilterValueState] = useDebounce('', props.filterDelay || 0);
1818
const [expandedKeysState, setExpandedKeysState] = React.useState(props.expandedKeys);
19-
const [filterExpandedKeys, setFilterExpandedKeys] = React.useState({});
2019

2120
const elementRef = React.useRef(null);
2221
const filteredNodes = React.useRef([]);
@@ -25,8 +24,8 @@ export const Tree = React.memo(
2524

2625
const filteredValue = props.onFilterValueChange ? props.filterValue : filterValueState;
2726
const isFiltering = props.filter && filteredValue;
28-
const expandedKeys = isFiltering ? filterExpandedKeys : props.onToggle ? props.expandedKeys : expandedKeysState;
29-
const currentFilterExpandedKeys = {};
27+
const expandedKeys = props.onToggle ? props.expandedKeys : expandedKeysState;
28+
const currentFilterExpandedKeys = React.useRef({});
3029

3130
const childFocusEvent = React.useRef(null);
3231
const { ptm, cx, isUnstyled } = TreeBase.setMetaData({
@@ -51,18 +50,20 @@ export const Tree = React.memo(
5150
const onToggle = (event) => {
5251
const { originalEvent, value, navigateFocusToChild } = event;
5352

54-
if (props.onToggle) {
53+
if (originalEvent == null && isFiltering) {
54+
if (props.onToggle) {
55+
props.onToggle({ originalEvent, value: { ...props.expandedKeys, ...value } });
56+
} else {
57+
setExpandedKeysState({ ...expandedKeysState, ...value });
58+
}
59+
} else if (props.onToggle) {
5560
props.onToggle({ originalEvent, value });
5661
} else {
5762
if (navigateFocusToChild) {
5863
childFocusEvent.current = originalEvent;
5964
}
6065

61-
if (isFiltering) {
62-
setFilterExpandedKeys(value);
63-
} else {
64-
setExpandedKeysState(value);
65-
}
66+
setExpandedKeysState(value);
6667
}
6768
};
6869

@@ -343,7 +344,13 @@ export const Tree = React.memo(
343344
}
344345
}
345346

346-
setFilterExpandedKeys(currentFilterExpandedKeys);
347+
onToggle({
348+
originalEvent: null,
349+
value: currentFilterExpandedKeys.current,
350+
navigateFocusToChild: false
351+
});
352+
353+
currentFilterExpandedKeys.current = {};
347354
filterChanged.current = false;
348355
};
349356

@@ -367,7 +374,7 @@ export const Tree = React.memo(
367374
}
368375

369376
if (matched) {
370-
currentFilterExpandedKeys[node.key] = true;
377+
currentFilterExpandedKeys.current[node.key] = true;
371378

372379
return true;
373380
}

0 commit comments

Comments
 (0)