File tree Expand file tree Collapse file tree 2 files changed +27
-0
lines changed Expand file tree Collapse file tree 2 files changed +27
-0
lines changed Original file line number Diff line number Diff line change @@ -76,10 +76,14 @@ export function ContextMenuProvider({
76
76
77
77
document . addEventListener ( 'contextmenu' , handleContextMenu ) ;
78
78
window . addEventListener ( 'resize' , handleClosingEvent ) ;
79
+ window . addEventListener ( 'scroll' , handleClosingEvent , { capture : true } ) ;
79
80
80
81
return ( ) => {
81
82
document . removeEventListener ( 'contextmenu' , handleContextMenu ) ;
82
83
window . removeEventListener ( 'resize' , handleClosingEvent ) ;
84
+ window . removeEventListener ( 'scroll' , handleClosingEvent , {
85
+ capture : true ,
86
+ } ) ;
83
87
} ;
84
88
} , [ disabled , handleClosingEvent , parentContext ] ) ;
85
89
Original file line number Diff line number Diff line change @@ -263,5 +263,28 @@ describe('useContextMenu', function () {
263
263
expect ( ( ) => screen . getByTestId ( 'test-menu' ) ) . to . throw ;
264
264
} ) ;
265
265
} ) ;
266
+
267
+ describe ( 'menu closing behavior' , function ( ) {
268
+ for ( const event of [ 'scroll' , 'resize' , 'click' ] ) {
269
+ it ( `closes menu on window ${ event } event` , function ( ) {
270
+ render (
271
+ < ContextMenuProvider menuWrapper = { TestMenu } >
272
+ < TestComponent />
273
+ </ ContextMenuProvider >
274
+ ) ;
275
+
276
+ const trigger = screen . getByTestId ( 'test-trigger' ) ;
277
+ userEvent . click ( trigger , { button : 2 } ) ;
278
+
279
+ // Verify menu is open
280
+ expect ( screen . getByTestId ( 'menu-item-Test Item' ) ) . to . exist ;
281
+
282
+ window . dispatchEvent ( new Event ( event ) ) ;
283
+
284
+ // Verify menu is closed
285
+ expect ( ( ) => screen . getByTestId ( 'test-menu' ) ) . to . throw ;
286
+ } ) ;
287
+ }
288
+ } ) ;
266
289
} ) ;
267
290
} ) ;
You can’t perform that action at this time.
0 commit comments