@@ -15,6 +15,9 @@ import {
1515 useFocusRing ,
1616 useId ,
1717} from '@mongodb-js/compass-components' ;
18+ import { type SidebarActionableItem , type SidebarTreeItem } from '../tree-data' ;
19+ import { type Actions } from '../constants' ;
20+ import { type NavigationItemActions } from '../item-actions' ;
1821
1922function useDefaultAction < T extends VirtualTreeItem > (
2023 item : T ,
@@ -55,12 +58,18 @@ type RenderItem<T> = (props: {
5558 isActive : boolean ;
5659 isFocused : boolean ;
5760 item : T ;
61+ onItemAction ( this : void , item : SidebarActionableItem , action : Actions ) : void ;
62+ onItemExpand (
63+ this : void ,
64+ item : SidebarActionableItem ,
65+ isExpanded : boolean
66+ ) : void ;
67+ getItemActions ( this : void , item : SidebarTreeItem ) : NavigationItemActions ;
5868} ) => React . ReactNode ;
5969export type OnDefaultAction < T > = (
6070 item : T ,
6171 evt : React . MouseEvent < HTMLDivElement > | React . KeyboardEvent < HTMLDivElement >
6272) => void ;
63- export type OnExpandedChange < T > = ( item : T , expanded : boolean ) => void ;
6473
6574type VirtualTreeProps < T extends VirtualItem > = {
6675 dataTestId ?: string ;
@@ -72,7 +81,13 @@ type VirtualTreeProps<T extends VirtualItem> = {
7281 renderItem : RenderItem < T > ;
7382 getItemKey ?: ( item : T ) => string ;
7483 onDefaultAction : OnDefaultAction < NotPlaceholderTreeItem < T > > ;
75- onExpandedChange : OnExpandedChange < NotPlaceholderTreeItem < T > > ;
84+ onItemExpand (
85+ this : void ,
86+ item : SidebarActionableItem ,
87+ isExpanded : boolean
88+ ) : void ;
89+ onItemAction ( this : void , item : SidebarActionableItem , action : Actions ) : void ;
90+ getItemActions ( this : void , item : SidebarTreeItem ) : NavigationItemActions ;
7691
7792 __TEST_OVER_SCAN_COUNT ?: number ;
7893} ;
@@ -99,7 +114,9 @@ export function VirtualTree<T extends VirtualItem>({
99114 getItemKey : _getItemKey ,
100115 renderItem : _renderItem ,
101116 onDefaultAction,
102- onExpandedChange,
117+ onItemExpand,
118+ onItemAction,
119+ getItemActions,
103120 __TEST_OVER_SCAN_COUNT ,
104121} : VirtualTreeProps < T > ) {
105122 const listRef = useRef < List | null > ( null ) ;
@@ -122,7 +139,7 @@ export function VirtualTree<T extends VirtualItem>({
122139 useVirtualNavigationTree < HTMLDivElement > ( {
123140 items,
124141 activeItemId,
125- onExpandedChange,
142+ onExpandedChange : onItemExpand ,
126143 onFocusMove,
127144 } ) ;
128145
@@ -136,6 +153,9 @@ export function VirtualTree<T extends VirtualItem>({
136153 activeItemId,
137154 renderItem,
138155 onDefaultAction,
156+ onItemAction,
157+ onItemExpand,
158+ getItemActions,
139159 } ;
140160 } , [
141161 items ,
@@ -144,6 +164,9 @@ export function VirtualTree<T extends VirtualItem>({
144164 onDefaultAction ,
145165 activeItemId ,
146166 isTreeItemFocused ,
167+ onItemAction ,
168+ getItemActions ,
169+ onItemExpand ,
147170 ] ) ;
148171
149172 const getItemKey = useCallback (
@@ -187,6 +210,13 @@ type VirtualItemData<T extends VirtualItem> = {
187210 activeItemId ?: string ;
188211 renderItem : RenderItem < T > ;
189212 onDefaultAction : OnDefaultAction < NotPlaceholderTreeItem < T > > ;
213+ onItemAction ( this : void , item : SidebarActionableItem , action : Actions ) : void ;
214+ onItemExpand (
215+ this : void ,
216+ item : SidebarActionableItem ,
217+ isExpanded : boolean
218+ ) : void ;
219+ getItemActions ( this : void , item : SidebarTreeItem ) : NavigationItemActions ;
190220} ;
191221function TreeItem < T extends VirtualItem > ( {
192222 index,
@@ -206,6 +236,9 @@ function TreeItem<T extends VirtualItem>({
206236 data . isTreeItemFocused &&
207237 ! isPlaceholderItem ( item ) &&
208238 item . id === data . currentTabbable ,
239+ onItemAction : data . onItemAction ,
240+ onItemExpand : data . onItemExpand ,
241+ getItemActions : data . getItemActions ,
209242 } ) ;
210243 } , [
211244 renderItem ,
@@ -214,6 +247,9 @@ function TreeItem<T extends VirtualItem>({
214247 activeItemId ,
215248 data . currentTabbable ,
216249 data . isTreeItemFocused ,
250+ data . onItemAction ,
251+ data . getItemActions ,
252+ data . onItemExpand ,
217253 ] ) ;
218254
219255 const actionProps = useDefaultAction (
0 commit comments