Skip to content

Commit 94745fb

Browse files
authored
update menu item (#3166)
1 parent f900373 commit 94745fb

File tree

3 files changed

+29
-0
lines changed

3 files changed

+29
-0
lines changed

.changeset/lazy-symbols-press.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@leafygreen-ui/menu': patch
3+
---
4+
5+
Adds semantically correct `type="button"` to MenuItem components that are rendered as a button. This prevents submitting forms when Menu components are rendered inside of forms.

packages/menu/src/MenuItem/InternalMenuItemContent.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,13 @@ export const InternalMenuItemContent = React.forwardRef<
8383
}
8484
: {};
8585

86+
const defaultButtonProps =
87+
as === 'button'
88+
? {
89+
type: 'button',
90+
}
91+
: {};
92+
8693
return (
8794
<InputOption
8895
ref={fwdRef}
@@ -133,6 +140,7 @@ export const InternalMenuItemContent = React.forwardRef<
133140
},
134141
className,
135142
)}
143+
{...defaultButtonProps}
136144
{...defaultAnchorProps}
137145
{...rest}
138146
>

packages/menu/src/MenuItem/MenuItem.spec.tsx

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,22 @@ describe('packages/menu/menu-item', () => {
9090
});
9191
});
9292

93+
describe('when rendered inside a form', () => {
94+
test('does not invoke a forms submit handler when clicked', () => {
95+
const onSubmit = jest.fn();
96+
97+
const { getByTestId } = render(
98+
<form onSubmit={onSubmit}>
99+
<MenuItem data-testid="menu-item" />
100+
</form>,
101+
);
102+
103+
const menuItem = getByTestId('menu-item');
104+
userEvent.click(menuItem);
105+
expect(onSubmit).not.toHaveBeenCalled();
106+
});
107+
});
108+
93109
/* eslint-disable jest/no-disabled-tests */
94110
describe('types behave as expected', () => {
95111
test.skip('Accepts string as `as` prop', () => {

0 commit comments

Comments
 (0)