11import { Meta } from '@storybook/react' ;
2- import { useEffect , useMemo } from 'react' ;
2+ import { useEffect , useMemo , useRef } from 'react' ;
33import * as React from 'react' ;
44import { shortTree } from 'demodata' ;
55import { Tree } from '../tree/Tree' ;
@@ -8,6 +8,7 @@ import { UncontrolledTreeEnvironment } from '../uncontrolledEnvironment/Uncontro
88import {
99 Disposable ,
1010 TreeDataProvider ,
11+ TreeEnvironmentRef ,
1112 TreeItem ,
1213 TreeItemIndex ,
1314} from '../types' ;
@@ -17,6 +18,7 @@ export default {
1718} as Meta ;
1819
1920export const InjectingDataFromOutside = ( ) => {
21+ const treeEnv = useRef < TreeEnvironmentRef > ( null ) ;
2022 const items = useMemo ( ( ) => ( { ...shortTree . items } ) , [ ] ) ;
2123 const dataProvider = useMemo (
2224 ( ) =>
@@ -36,15 +38,24 @@ export const InjectingDataFromOutside = () => {
3638
3739 const removeItem = ( ) => {
3840 if ( items . root . children . length === 0 ) return ;
39- items . root . children . pop ( ) ;
41+ const item = items . root . children . pop ( ) ;
42+ delete items [ item ] ;
4043 dataProvider . onDidChangeTreeDataEmitter . emit ( [ 'root' ] ) ;
4144 } ;
4245
43- useEffect ( ( ) => {
44- dataProvider . onDidChangeTreeData ( changedItemIds => {
45- console . log ( changedItemIds ) ;
46- } ) ;
47- } , [ dataProvider ] ) ;
46+ useEffect (
47+ ( ) =>
48+ dataProvider . onDidChangeTreeData ( changedItemIds => {
49+ console . log ( 'Changed Item IDs:' , changedItemIds ) ;
50+
51+ const focusedItem = treeEnv . current ?. viewState [ 'tree-1' ] ?. focusedItem ;
52+ if ( focusedItem && ! items [ focusedItem ] ) {
53+ console . log ( 'Focused item was deleted, refocusing new item...' ) ;
54+ treeEnv . current . focusItem ( items . root . children [ 0 ] , 'tree-1' ) ;
55+ }
56+ } ) . dispose ,
57+ [ dataProvider , items ]
58+ ) ;
4859
4960 return (
5061 < UncontrolledTreeEnvironment < string >
@@ -58,6 +69,7 @@ export const InjectingDataFromOutside = () => {
5869 expandedItems : [ ] ,
5970 } ,
6071 } }
72+ ref = { treeEnv }
6173 >
6274 < button type = "button" onClick = { injectItem } >
6375 Inject item
0 commit comments