@@ -816,10 +816,12 @@ describe('Keyboard interactions', () => {
816
816
<MenuButton>Trigger</MenuButton>
817
817
<MenuItems>
818
818
<MenuItem as="a">Item A</MenuItem>
819
- <MenuItem as="button" :onClick ="clickHandler">
819
+ <MenuItem as="button" @click ="clickHandler">
820
820
Item B
821
821
</MenuItem>
822
- <MenuItem as="a">Item C</MenuItem>
822
+ <MenuItem>
823
+ <button @click="clickHandler">Item C</button>
824
+ </MenuItem>
823
825
</MenuItems>
824
826
</Menu>
825
827
` ,
@@ -851,6 +853,18 @@ describe('Keyboard interactions', () => {
851
853
852
854
// Verify the button got "clicked"
853
855
expect ( clickHandler ) . toHaveBeenCalledTimes ( 1 )
856
+
857
+ // Click the menu button again
858
+ await click ( getMenuButton ( ) )
859
+
860
+ // Active the last menu item
861
+ await hover ( getMenuItems ( ) [ 2 ] )
862
+
863
+ // Close menu, and invoke the item
864
+ await press ( Keys . Enter )
865
+
866
+ // Verify the button got "clicked"
867
+ expect ( clickHandler ) . toHaveBeenCalledTimes ( 2 )
854
868
} )
855
869
856
870
describe ( '`Space` key' , ( ) => {
@@ -2388,6 +2402,46 @@ describe('Mouse interactions', () => {
2388
2402
assertMenu ( getMenu ( ) , { state : MenuState . Closed } )
2389
2403
} )
2390
2404
2405
+ it ( 'should be possible to click a menu item, which closes the menu and invokes the @click handler' , async ( ) => {
2406
+ const clickHandler = jest . fn ( )
2407
+ renderTemplate ( {
2408
+ template : `
2409
+ <Menu>
2410
+ <MenuButton>Trigger</MenuButton>
2411
+ <MenuItems>
2412
+ <MenuItem as="a">alice</MenuItem>
2413
+ <MenuItem as="button" @click="clickHandler">bob</MenuItem>
2414
+ <MenuItem>
2415
+ <button @click="clickHandler">charlie</button>
2416
+ </MenuItem>
2417
+ </MenuItems>
2418
+ </Menu>
2419
+ ` ,
2420
+ setup : ( ) => ( { clickHandler } ) ,
2421
+ } )
2422
+
2423
+ // Open menu
2424
+ await click ( getMenuButton ( ) )
2425
+ assertMenu ( getMenu ( ) , { state : MenuState . Open } )
2426
+
2427
+ // We should be able to click the first item
2428
+ await click ( getMenuItems ( ) [ 1 ] )
2429
+ assertMenu ( getMenu ( ) , { state : MenuState . Closed } )
2430
+
2431
+ // Verify the callback has been called
2432
+ expect ( clickHandler ) . toHaveBeenCalledTimes ( 1 )
2433
+
2434
+ // Let's re-open the window for now
2435
+ await click ( getMenuButton ( ) )
2436
+
2437
+ // Click the last item, which should close and invoke the handler
2438
+ await click ( getMenuItems ( ) [ 2 ] )
2439
+ assertMenu ( getMenu ( ) , { state : MenuState . Closed } )
2440
+
2441
+ // Verify the callback has been called
2442
+ expect ( clickHandler ) . toHaveBeenCalledTimes ( 2 )
2443
+ } )
2444
+
2391
2445
it ( 'should be possible to click a disabled menu item, which is a no-op' , async ( ) => {
2392
2446
renderTemplate ( `
2393
2447
<Menu>
@@ -2468,11 +2522,11 @@ describe('Mouse interactions', () => {
2468
2522
<Menu>
2469
2523
<MenuButton>Trigger</MenuButton>
2470
2524
<MenuItems>
2471
- <MenuItem as="a" :onClick ="clickHandler">alice</MenuItem>
2472
- <MenuItem as="a" :onClick ="clickHandler" disabled>
2525
+ <MenuItem as="a" @click ="clickHandler">alice</MenuItem>
2526
+ <MenuItem as="a" @click ="clickHandler" disabled>
2473
2527
bob
2474
2528
</MenuItem>
2475
- <MenuItem as="a" :onClick ="clickHandler">charlie</MenuItem>
2529
+ <MenuItem as="a" @click ="clickHandler">charlie</MenuItem>
2476
2530
</MenuItems>
2477
2531
</Menu>
2478
2532
` ,
0 commit comments