File tree Expand file tree Collapse file tree 5 files changed +37
-0
lines changed Expand file tree Collapse file tree 5 files changed +37
-0
lines changed Original file line number Diff line number Diff line change @@ -209,6 +209,14 @@ export const ContextMenuMixin = (superClass) =>
209209 this . __forwardFocus ( ) ;
210210 }
211211
212+ /**
213+ * Runs after overlay's closing animation is finished
214+ * @private
215+ */
216+ _onVaadinOverlayClosed ( ) {
217+ this . dispatchEvent ( new CustomEvent ( 'closed' ) ) ;
218+ }
219+
212220 /** @private */
213221 _targetOrOpenOnChanged ( listenOn , openOn ) {
214222 if ( this . _oldListenOn && this . _oldOpenOn ) {
@@ -641,4 +649,10 @@ export const ContextMenuMixin = (superClass) =>
641649 this . close ( ) ;
642650 }
643651 }
652+
653+ /**
654+ * Fired when the context menu is closed.
655+ *
656+ * @event closed
657+ */
644658 } ;
Original file line number Diff line number Diff line change @@ -34,6 +34,11 @@ export type ContextMenuItemSelectedEvent<TItem extends ContextMenuItem = Context
3434 value : TItem ;
3535} > ;
3636
37+ /**
38+ * Fired when the context menu is closed.
39+ */
40+ export type ContextMenuClosedEvent = CustomEvent ;
41+
3742export interface ContextMenuCustomEventMap < TItem extends ContextMenuItem = ContextMenuItem > {
3843 'opened-changed' : ContextMenuOpenedChangedEvent ;
3944
@@ -42,6 +47,8 @@ export interface ContextMenuCustomEventMap<TItem extends ContextMenuItem = Conte
4247 'close-all-menus' : Event ;
4348
4449 'items-outside-click' : Event ;
50+
51+ closed : ContextMenuClosedEvent ;
4552}
4653
4754export interface ContextMenuEventMap < TItem extends ContextMenuItem = ContextMenuItem >
@@ -237,6 +244,7 @@ export interface ContextMenuEventMap<TItem extends ContextMenuItem = ContextMenu
237244 *
238245 * @fires {CustomEvent } opened-changed - Fired when the `opened` property changes.
239246 * @fires {CustomEvent } item-selected - Fired when an item is selected when the context menu is populated using the `items` API.
247+ * @fires {CustomEvent } closed - Fired when the context menu is closed.
240248 */
241249declare class ContextMenu < TItem extends ContextMenuItem = ContextMenuItem > extends HTMLElement {
242250 addEventListener < K extends keyof ContextMenuEventMap > (
Original file line number Diff line number Diff line change @@ -205,6 +205,7 @@ import { ContextMenuMixin } from './vaadin-context-menu-mixin.js';
205205 *
206206 * @fires {CustomEvent } opened-changed - Fired when the `opened` property changes.
207207 * @fires {CustomEvent } item-selected - Fired when an item is selected when the context menu is populated using the `items` API.
208+ * @fires {CustomEvent } closed - Fired when the context menu is closed.
208209 *
209210 * @customElement
210211 * @extends HTMLElement
@@ -249,6 +250,7 @@ class ContextMenu extends ContextMenuMixin(
249250 exportparts ="backdrop, overlay, content "
250251 @opened-changed ="${ this . _onOverlayOpened } "
251252 @vaadin-overlay-open ="${ this . _onVaadinOverlayOpen } "
253+ @vaadin-overlay-closed ="${ this . _onVaadinOverlayClosed } "
252254 >
253255 < slot name ="overlay "> </ slot >
254256 < slot name ="submenu " slot ="submenu "> </ slot >
Original file line number Diff line number Diff line change @@ -394,6 +394,14 @@ describe('overlay', () => {
394394 expect ( menu . opened ) . to . eql ( true ) ;
395395 } ) ;
396396
397+ it ( 'should dispatch closed event when the overlay is closed' , async ( ) => {
398+ const closedSpy = sinon . spy ( ) ;
399+ menu . addEventListener ( 'closed' , closedSpy ) ;
400+ fire ( document . body , 'click' ) ;
401+ await nextRender ( ) ;
402+ expect ( closedSpy . calledOnce ) . to . be . true ;
403+ } ) ;
404+
397405 describe ( 'with shift key' , ( ) => {
398406 it ( 'should not close on menu contextmenu' , ( ) => {
399407 const e = contextmenu ( 0 , 0 , true , overlay ) ;
Original file line number Diff line number Diff line change @@ -7,6 +7,7 @@ import type { ContextMenuItem } from '../../src/vaadin-context-menu-item.js';
77import type { ContextMenuListBox } from '../../src/vaadin-context-menu-list-box.js' ;
88import type {
99 ContextMenu ,
10+ ContextMenuClosedEvent ,
1011 ContextMenuItem as MenuItem ,
1112 ContextMenuItemSelectedEvent ,
1213 ContextMenuOpenedChangedEvent ,
@@ -36,6 +37,10 @@ menu.addEventListener('item-selected', (event) => {
3637 assertType < MenuItem > ( event . detail . value ) ;
3738} ) ;
3839
40+ menu . addEventListener ( 'closed' , ( event ) => {
41+ assertType < ContextMenuClosedEvent > ( event ) ;
42+ } ) ;
43+
3944const renderer : ContextMenuRenderer = ( root , contextMenu , context ) => {
4045 assertType < HTMLElement > ( root ) ;
4146 assertType < ContextMenu > ( contextMenu ) ;
You can’t perform that action at this time.
0 commit comments