@@ -22,12 +22,24 @@ export function LayerHierarchy(props: {
2222 // make mode
2323 const selectionmode = props . onLayerSelect ?. multi ? "multi" : "single" ;
2424 const [ selections , setSelections ] = useState < string [ ] > ( ) ;
25+ const [ expanded , setExpanded ] = useState < string [ ] > ( [ ] ) ;
26+ const [ selected , setSelected ] = useState < string [ ] > ( [ ] ) ;
2527
26- const handleLayerClick = ( id : string ) => {
28+ const handleToggle = ( event : React . ChangeEvent < { } > , nodeIds : string [ ] ) => {
29+ setExpanded ( nodeIds ) ;
30+ } ;
31+
32+ const handleSelect = ( event : React . ChangeEvent < { } > , nodeIds : string [ ] ) => {
33+ setSelected ( nodeIds ) ;
34+ handleLayerClick ( nodeIds ) ;
35+ } ;
36+
37+ const handleLayerClick = ( ids : string [ ] ) => {
2738 if ( selectionmode == "single" ) {
39+ const id = ids [ ids . length - 1 ] ;
2840 props . onLayerSelect ?. single ?.( id ) ;
2941 } else {
30- setSelections ( [ id , ... selections ] ) ;
42+ setSelections ( ids ) ;
3143 props . onLayerSelect ?. multi ?.( selections ) ;
3244 }
3345 } ;
@@ -39,12 +51,7 @@ export function LayerHierarchy(props: {
3951 return < div style = { { padding : 24 } } > empty</ div > ;
4052 }
4153 return (
42- < TreeItem
43- key = { nodes . id }
44- nodeId = { nodes . id }
45- label = { nodes . name }
46- onClick = { ( ) => handleLayerClick ( nodes . id ) }
47- >
54+ < TreeItem key = { nodes . id } nodeId = { nodes . id } label = { nodes . name } >
4855 { Array . isArray ( nodes . children )
4956 ? nodes . children . map ( ( node ) => renderTree ( node ) )
5057 : null }
@@ -61,8 +68,12 @@ export function LayerHierarchy(props: {
6168 < >
6269 < TreeView
6370 defaultCollapseIcon = { < ExpandMoreIcon /> }
64- defaultExpanded = { [ "root" ] }
71+ defaultExpanded = { [ props . data ?. id ] }
6572 defaultExpandIcon = { < ChevronRightIcon /> }
73+ expanded = { expanded }
74+ selected = { selected }
75+ onNodeToggle = { handleToggle }
76+ onNodeSelect = { handleSelect }
6677 >
6778 { renderTree ( data ) }
6879 </ TreeView >
0 commit comments