diff --git a/src/MenuItem.tsx b/src/MenuItem.tsx index c325ebe4..74882518 100644 --- a/src/MenuItem.tsx +++ b/src/MenuItem.tsx @@ -140,6 +140,7 @@ const InternalMenuItem = React.forwardRef((props: MenuItemProps, ref: React.Ref< label: children, itemIcon, extra: props.extra, + title: props.title, }; return { diff --git a/src/interface.ts b/src/interface.ts index 01eebbfe..1e013c41 100644 --- a/src/interface.ts +++ b/src/interface.ts @@ -69,6 +69,7 @@ export type ItemData = { itemIcon?: RenderIconType; extra?: React.ReactNode; key: React.Key; + title?: string; }; export interface MenuItemGroupType extends ItemSharedProps { diff --git a/src/utils/nodeUtil.tsx b/src/utils/nodeUtil.tsx index 492dea29..b50d8cce 100644 --- a/src/utils/nodeUtil.tsx +++ b/src/utils/nodeUtil.tsx @@ -51,12 +51,7 @@ function convertItemsToNodes( const hasExtra = !!extra || extra === 0; return ( - + {hasExtra ? ( <> {label} diff --git a/tests/MenuItem.spec.tsx b/tests/MenuItem.spec.tsx index ab922944..87966ef1 100644 --- a/tests/MenuItem.spec.tsx +++ b/tests/MenuItem.spec.tsx @@ -181,51 +181,25 @@ describe('MenuItem', () => { ); }); - it('should only pass defined itemData properties in onSelect and onClick', () => { + it('should pass all itemData properties in onSelect and onClick when using items prop', () => { const onSelect = jest.fn(); const onClick = jest.fn(); + const items = [{ key: '1', label: 'Menu Item', foo: '123', title: 'test title' }]; const { container } = render( - , + , ); fireEvent.click(container.querySelector('.rc-menu-item')!); expect(onSelect).toHaveBeenCalledWith( expect.objectContaining({ key: '1', - itemData: expect.objectContaining({ - key: '1', - label: 'Menu Item', - }), - }), - ); - expect(onSelect).toHaveBeenCalledWith( - expect.objectContaining({ - key: '1', - itemData: expect.not.objectContaining({ - foo: '123', - }), + itemData: expect.objectContaining(items[0]), }), ); expect(onClick).toHaveBeenCalledWith( expect.objectContaining({ key: '1', - itemData: expect.objectContaining({ - key: '1', - label: 'Menu Item', - }), - }), - ); - expect(onClick).toHaveBeenCalledWith( - expect.objectContaining({ - key: '1', - itemData: expect.not.objectContaining({ - foo: '123', - }), + itemData: expect.objectContaining(items[0]), }), ); });