Skip to content

Commit b49ba28

Browse files
authored
feat(compass-context-menu): add context menu closing on scroll COMPASS-9471 (#7085)
1 parent b7caa2e commit b49ba28

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

packages/compass-context-menu/src/context-menu-provider.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff 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

packages/compass-context-menu/src/use-context-menu.spec.tsx

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff 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
});

0 commit comments

Comments
 (0)