Skip to content

Commit 87d6ba3

Browse files
authored
fix: MenuItem is only focused when mouse cursor is moved (#33725)
1 parent ab504b1 commit 87d6ba3

File tree

7 files changed

+18
-9
lines changed

7 files changed

+18
-9
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "patch",
3+
"comment": "fix: MenuItem is only focused when mouse cursor is moved",
4+
"packageName": "@fluentui/react-menu",
5+
"email": "lingfangao@hotmail.com",
6+
"dependentChangeType": "patch"
7+
}

packages/react-components/react-menu/library/src/components/MenuItem/MenuItem.test.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,13 @@ describe('MenuItem', () => {
4040
expect(tree).toMatchSnapshot();
4141
});
4242

43-
it('should focus the item on mouseenter', () => {
43+
it('should focus the item on mousemove', () => {
4444
// Arrange
4545
const { getByRole } = render(<MenuItem>Item</MenuItem>);
4646

4747
// Act
4848
const menuitem = getByRole('menuitem');
49-
fireEvent.mouseEnter(menuitem);
49+
fireEvent.mouseMove(menuitem);
5050

5151
// Assert
5252
expect(document.activeElement).toBe(menuitem);

packages/react-components/react-menu/library/src/components/MenuItem/__snapshots__/MenuItem.test.tsx.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ exports[`MenuItem renders a default state 1`] = `
66
onClick={[Function]}
77
onKeyDown={[Function]}
88
onKeyUp={[Function]}
9-
onMouseEnter={[Function]}
9+
onMouseMove={[Function]}
1010
role="menuitem"
1111
tabIndex={0}
1212
>

packages/react-components/react-menu/library/src/components/MenuItem/useMenuItem.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,12 @@ export const useMenuItem_unstable = (props: MenuItemProps, ref: React.Ref<ARIABu
7474
dismissedWithKeyboardRef.current = true;
7575
}
7676
}),
77-
onMouseEnter: useEventCallback(event => {
78-
innerRef.current?.focus();
77+
onMouseMove: useEventCallback(event => {
78+
if (event.currentTarget.ownerDocument.activeElement !== event.currentTarget) {
79+
innerRef.current?.focus();
80+
}
7981

80-
props.onMouseEnter?.(event);
82+
props.onMouseMove?.(event);
8183
}),
8284
onClick: useEventCallback(event => {
8385
if (!hasSubmenu && !persistOnClick) {

packages/react-components/react-menu/library/src/components/MenuItemCheckbox/__snapshots__/MenuItemCheckbox.test.tsx.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ exports[`MenuItemCheckbox conformance renders a default state 1`] = `
88
onClick={[Function]}
99
onKeyDown={[Function]}
1010
onKeyUp={[Function]}
11-
onMouseEnter={[Function]}
11+
onMouseMove={[Function]}
1212
role="menuitemcheckbox"
1313
tabIndex={0}
1414
>

packages/react-components/react-menu/library/src/components/MenuItemRadio/__snapshots__/MenuItemRadio.test.tsx.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ exports[`MenuItemRadio renders a default state 1`] = `
88
onClick={[Function]}
99
onKeyDown={[Function]}
1010
onKeyUp={[Function]}
11-
onMouseEnter={[Function]}
11+
onMouseMove={[Function]}
1212
role="menuitemradio"
1313
tabIndex={0}
1414
>

packages/react-components/react-menu/library/src/components/MenuList/MenuList.cy.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ describe('MenuList', () => {
2222
</div>,
2323
);
2424
cy.get(menuItemSelector).each(el => {
25-
cy.wrap(el).trigger('mouseover').should('be.focused');
25+
cy.wrap(el).trigger('mousemove').should('be.focused');
2626
});
2727
});
2828

0 commit comments

Comments
 (0)