@@ -15,6 +15,9 @@ import {
15
15
useFocusRing ,
16
16
useId ,
17
17
} 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' ;
18
21
19
22
function useDefaultAction < T extends VirtualTreeItem > (
20
23
item : T ,
@@ -55,12 +58,18 @@ type RenderItem<T> = (props: {
55
58
isActive : boolean ;
56
59
isFocused : boolean ;
57
60
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 ;
58
68
} ) => React . ReactNode ;
59
69
export type OnDefaultAction < T > = (
60
70
item : T ,
61
71
evt : React . MouseEvent < HTMLDivElement > | React . KeyboardEvent < HTMLDivElement >
62
72
) => void ;
63
- export type OnExpandedChange < T > = ( item : T , expanded : boolean ) => void ;
64
73
65
74
type VirtualTreeProps < T extends VirtualItem > = {
66
75
dataTestId ?: string ;
@@ -72,7 +81,13 @@ type VirtualTreeProps<T extends VirtualItem> = {
72
81
renderItem : RenderItem < T > ;
73
82
getItemKey ?: ( item : T ) => string ;
74
83
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 ;
76
91
77
92
__TEST_OVER_SCAN_COUNT ?: number ;
78
93
} ;
@@ -99,7 +114,9 @@ export function VirtualTree<T extends VirtualItem>({
99
114
getItemKey : _getItemKey ,
100
115
renderItem : _renderItem ,
101
116
onDefaultAction,
102
- onExpandedChange,
117
+ onItemExpand,
118
+ onItemAction,
119
+ getItemActions,
103
120
__TEST_OVER_SCAN_COUNT ,
104
121
} : VirtualTreeProps < T > ) {
105
122
const listRef = useRef < List | null > ( null ) ;
@@ -122,7 +139,7 @@ export function VirtualTree<T extends VirtualItem>({
122
139
useVirtualNavigationTree < HTMLDivElement > ( {
123
140
items,
124
141
activeItemId,
125
- onExpandedChange,
142
+ onExpandedChange : onItemExpand ,
126
143
onFocusMove,
127
144
} ) ;
128
145
@@ -136,6 +153,9 @@ export function VirtualTree<T extends VirtualItem>({
136
153
activeItemId,
137
154
renderItem,
138
155
onDefaultAction,
156
+ onItemAction,
157
+ onItemExpand,
158
+ getItemActions,
139
159
} ;
140
160
} , [
141
161
items ,
@@ -144,6 +164,9 @@ export function VirtualTree<T extends VirtualItem>({
144
164
onDefaultAction ,
145
165
activeItemId ,
146
166
isTreeItemFocused ,
167
+ onItemAction ,
168
+ getItemActions ,
169
+ onItemExpand ,
147
170
] ) ;
148
171
149
172
const getItemKey = useCallback (
@@ -187,6 +210,13 @@ type VirtualItemData<T extends VirtualItem> = {
187
210
activeItemId ?: string ;
188
211
renderItem : RenderItem < T > ;
189
212
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 ;
190
220
} ;
191
221
function TreeItem < T extends VirtualItem > ( {
192
222
index,
@@ -206,6 +236,9 @@ function TreeItem<T extends VirtualItem>({
206
236
data . isTreeItemFocused &&
207
237
! isPlaceholderItem ( item ) &&
208
238
item . id === data . currentTabbable ,
239
+ onItemAction : data . onItemAction ,
240
+ onItemExpand : data . onItemExpand ,
241
+ getItemActions : data . getItemActions ,
209
242
} ) ;
210
243
} , [
211
244
renderItem ,
@@ -214,6 +247,9 @@ function TreeItem<T extends VirtualItem>({
214
247
activeItemId ,
215
248
data . currentTabbable ,
216
249
data . isTreeItemFocused ,
250
+ data . onItemAction ,
251
+ data . getItemActions ,
252
+ data . onItemExpand ,
217
253
] ) ;
218
254
219
255
const actionProps = useDefaultAction (
0 commit comments