Skip to content

Commit f9a72c6

Browse files
author
刘欢
committed
feat: update event payload to use itemData instead of info.item in MenuItem
1 parent 3a4e708 commit f9a72c6

5 files changed

Lines changed: 25 additions & 33 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,13 +135,13 @@ ReactDOM.render(
135135
</tr>
136136
<tr>
137137
<td>onSelect</td>
138-
<td>function({key:String, item:ReactComponent, domEvent:Event, selectedKeys:String[], info:{item:MenuItemInfo}})</td>
138+
<td>function({key:String, item:ReactComponent, domEvent:Event, selectedKeys:String[],ItemData:ItemData})</td>
139139
<th></th>
140140
<td>called when select a menu item</td>
141141
</tr>
142142
<tr>
143143
<td>onClick</td>
144-
<td>function({key:String, item:ReactComponent, domEvent:Event, keyPath: String[], info:{item:MenuItemInfo}})</td>
144+
<td>function({key:String, item:ReactComponent, domEvent:Event, keyPath: String[], ItemData:ItemData})</td>
145145
<th></th>
146146
<td>called when click a menu item</td>
147147
</tr>

src/MenuItem.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import PrivateContext from './context/PrivateContext';
1212
import useActive from './hooks/useActive';
1313
import useDirectionStyle from './hooks/useDirectionStyle';
1414
import Icon from './Icon';
15-
import type { MenuInfo, MenuItemInfo, MenuItemType } from './interface';
15+
import type { MenuInfo, ItemData, MenuItemType } from './interface';
1616
import { warnItemProp } from './utils/warnUtil';
1717

1818
export interface MenuItemProps
@@ -34,7 +34,7 @@ export interface MenuItemProps
3434
attribute?: Record<string, string>;
3535

3636
/** @private Origin item config from items prop */
37-
info?: { item: MenuItemInfo };
37+
itemData?: ItemData;
3838
}
3939

4040
// Since Menu event provide the `info.item` which point to the MenuItem node instance.
@@ -80,7 +80,7 @@ const InternalMenuItem = React.forwardRef((props: MenuItemProps, ref: React.Ref<
8080
disabled,
8181
itemIcon,
8282
children,
83-
info: propsInfo,
83+
itemData: propsItemData,
8484

8585
// Aria
8686
role,
@@ -138,7 +138,7 @@ const InternalMenuItem = React.forwardRef((props: MenuItemProps, ref: React.Ref<
138138
e: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>,
139139
): MenuInfo => {
140140
// If propsInfo exists (items mode), use it; otherwise build from props (children mode)
141-
const infoItem: MenuItemInfo = propsInfo?.item || {
141+
const itemData: ItemData = propsItemData || {
142142
key: eventKey || '',
143143
label: children,
144144
itemIcon,
@@ -151,7 +151,7 @@ const InternalMenuItem = React.forwardRef((props: MenuItemProps, ref: React.Ref<
151151
keyPath: [...connectedKeys].reverse(),
152152
item: legacyMenuItemRef.current,
153153
domEvent: e,
154-
info: propsInfo || { item: infoItem },
154+
itemData: propsItemData || itemData,
155155
};
156156
};
157157

src/interface.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ export interface MenuItemType extends ItemSharedProps {
6464
}
6565

6666
/** Info item type passed to onSelect/onClick callbacks, excluding event handlers */
67-
export type MenuItemInfo = {
67+
export type ItemData = {
6868
label?: React.ReactNode;
6969
itemIcon?: RenderIconType;
7070
extra?: React.ReactNode;
@@ -107,7 +107,7 @@ export interface MenuInfo {
107107
/** @deprecated This will not support in future. You should avoid to use this */
108108
item: React.ReactInstance;
109109
domEvent: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>;
110-
info: { item: MenuItemInfo };
110+
itemData: ItemData;
111111
}
112112

113113
export interface MenuTitleInfo {

src/utils/nodeUtil.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ function convertItemsToNodes(
5555
key={mergedKey}
5656
{...restProps}
5757
extra={extra}
58-
info={{ item: { label, key: mergedKey, itemIcon: restProps?.itemIcon, extra } }}
58+
itemData={{ label, key: mergedKey, itemIcon: restProps?.itemIcon, extra }}
5959
>
6060
{hasExtra ? (
6161
<>

tests/MenuItem.spec.tsx

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,8 @@ describe('MenuItem', () => {
150150
});
151151
});
152152

153-
describe('info.item in event', () => {
154-
it('should pass info.item in onSelect and onClick with children', () => {
153+
describe('itemData in event', () => {
154+
it('should pass itemData in onSelect and onClick with children', () => {
155155
const onSelect = jest.fn();
156156
const onClick = jest.fn();
157157
const { container } = render(
@@ -164,28 +164,24 @@ describe('MenuItem', () => {
164164
expect(onSelect).toHaveBeenCalledWith(
165165
expect.objectContaining({
166166
key: '1',
167-
info: expect.objectContaining({
168-
item: expect.objectContaining({
169-
key: '1',
170-
label: 'Menu Item',
171-
}),
167+
itemData: expect.objectContaining({
168+
key: '1',
169+
label: 'Menu Item',
172170
}),
173171
}),
174172
);
175173
expect(onClick).toHaveBeenCalledWith(
176174
expect.objectContaining({
177175
key: '1',
178-
info: expect.objectContaining({
179-
item: expect.objectContaining({
180-
key: '1',
181-
label: 'Menu Item',
182-
}),
176+
itemData: expect.objectContaining({
177+
key: '1',
178+
label: 'Menu Item',
183179
}),
184180
}),
185181
);
186182
});
187183

188-
it('should pass info.item in onSelect and onClick with items', () => {
184+
it('should pass itemData in onSelect and onClick with items', () => {
189185
const onSelect = jest.fn();
190186
const onClick = jest.fn();
191187
const { container } = render(
@@ -201,22 +197,18 @@ describe('MenuItem', () => {
201197
expect(onSelect).toHaveBeenCalledWith(
202198
expect.objectContaining({
203199
key: '1',
204-
info: expect.objectContaining({
205-
item: expect.objectContaining({
206-
key: '1',
207-
label: 'Menu Item',
208-
}),
200+
itemData: expect.objectContaining({
201+
key: '1',
202+
label: 'Menu Item',
209203
}),
210204
}),
211205
);
212206
expect(onClick).toHaveBeenCalledWith(
213207
expect.objectContaining({
214208
key: '1',
215-
info: expect.objectContaining({
216-
item: expect.objectContaining({
217-
key: '1',
218-
label: 'Menu Item',
219-
}),
209+
itemData: expect.objectContaining({
210+
key: '1',
211+
label: 'Menu Item',
220212
}),
221213
}),
222214
);

0 commit comments

Comments
 (0)