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({
7676
7777 document . addEventListener ( 'contextmenu' , handleContextMenu ) ;
7878 window . addEventListener ( 'resize' , handleClosingEvent ) ;
79+ window . addEventListener ( 'scroll' , handleClosingEvent , { capture : true } ) ;
7980
8081 return ( ) => {
8182 document . removeEventListener ( 'contextmenu' , handleContextMenu ) ;
8283 window . removeEventListener ( 'resize' , handleClosingEvent ) ;
84+ window . removeEventListener ( 'scroll' , handleClosingEvent , {
85+ capture : true ,
86+ } ) ;
8387 } ;
8488 } , [ disabled , handleClosingEvent , parentContext ] ) ;
8589
Original file line number Diff line number Diff line change @@ -263,5 +263,28 @@ describe('useContextMenu', function () {
263263 expect ( ( ) => screen . getByTestId ( 'test-menu' ) ) . to . throw ;
264264 } ) ;
265265 } ) ;
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+ } ) ;
266289 } ) ;
267290} ) ;
You can’t perform that action at this time.
0 commit comments