@@ -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