Skip to content

Commit c568585

Browse files
authored
LG-5477: Updates Menu Props (#3129)
* updates Menu Props * fix bug * rm any * update menu * fix ts issues * with updated changeset
1 parent cee1e79 commit c568585

File tree

4 files changed

+30
-4
lines changed

4 files changed

+30
-4
lines changed

.changeset/three-toys-count.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+
Improves MenuProps types to extend `React.ComponentProps<'ul'>`

packages/menu/src/Menu.spec.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,6 @@ describe('packages/menu', () => {
105105
test('respects custom testid', async () => {
106106
const customTestId = 'custom-menu-test-id';
107107
const { getByTestId } = renderMenu({
108-
// @ts-expect-error - data-testid is not a valid prop for MenuProps FIXME: LG-5477
109108
'data-testid': customTestId,
110109
initialOpen: true,
111110
});
@@ -639,4 +638,16 @@ describe('packages/menu', () => {
639638
});
640639
});
641640
});
641+
642+
// eslint-disable-next-line jest/no-disabled-tests
643+
describe.skip('Types work as expected', () => {
644+
test('Types work as expected', () => {
645+
render(
646+
<Menu data-testid="menu">
647+
<MenuItem>Item</MenuItem>
648+
<MenuItem>Item</MenuItem>
649+
</Menu>,
650+
);
651+
});
652+
});
642653
});

packages/menu/src/Menu/Menu.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ export const Menu = React.forwardRef<HTMLDivElement, MenuProps>(function Menu(
7070
darkMode: darkModeProp,
7171
renderDarkMenu = true,
7272
'data-lgid': dataLgId,
73+
'data-testid': dataTestId,
7374
children,
7475
className,
7576
refEl,
@@ -81,6 +82,8 @@ export const Menu = React.forwardRef<HTMLDivElement, MenuProps>(function Menu(
8182
portalRef,
8283
scrollContainer,
8384
popoverZIndex,
85+
// Extract only ul-appropriate props from rest
86+
id,
8487
...rest
8588
}: MenuProps,
8689
forwardRef,
@@ -264,12 +267,13 @@ export const Menu = React.forwardRef<HTMLDivElement, MenuProps>(function Menu(
264267
{/* Need to stop propagation, otherwise Menu will closed automatically when clicked */}
265268
{/* eslint-disable-next-line jsx-a11y/click-events-have-key-events*/}
266269
<ul
267-
data-testid={lgIds.root}
268-
{...rest}
270+
data-testid={dataTestId || lgIds.root}
271+
id={id}
269272
data-lgid={lgIds.root}
270273
className={scrollContainerStyle}
271274
role="menu"
272275
onClick={e => e.stopPropagation()}
276+
{...rest}
273277
>
274278
{children}
275279
</ul>

packages/menu/src/Menu/Menu.types.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,20 @@ export const MenuVariant = {
2020
export type MenuVariant = (typeof MenuVariant)[keyof typeof MenuVariant];
2121

2222
export interface MenuProps
23-
extends Omit<PopoverProps, 'active' | 'dismissMode' | 'onToggle'>,
23+
extends Omit<React.ComponentPropsWithoutRef<'ul'>, 'onClick'>,
24+
Omit<PopoverProps, 'active' | 'dismissMode' | 'onToggle'>,
2425
LgIdProps {
2526
/**
2627
* The menu items, or submenus
2728
* @type `<MenuItem />` | `<SubMenu />` | `<MenuGroup />` | `<MenuSeparator />`
2829
*/
2930
children: ReactNode;
3031

32+
/**
33+
* Test id for the menu element
34+
*/
35+
'data-testid'?: string;
36+
3137
/**
3238
* A slot for the element used to trigger the Menu. Passing a trigger allows
3339
* Menu to control opening and closing itself internally.

0 commit comments

Comments
 (0)