Skip to content

Commit c4c8913

Browse files
EmilyyyLiu刘欢gemini-code-assist[bot]
authored
feat: pass full opt object to itemData in convertItemsToNodes (#867)
* feat: add title property to ItemData and update itemData usage in convertItemsToNodes * feat: update test to pass all itemData properties in onSelect and onClick when using items prop * Update src/utils/nodeUtil.tsx Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --------- Co-authored-by: 刘欢 <lh01217311@antgroup.com> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
1 parent e9643ea commit c4c8913

4 files changed

Lines changed: 8 additions & 37 deletions

File tree

src/MenuItem.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ const InternalMenuItem = React.forwardRef((props: MenuItemProps, ref: React.Ref<
140140
label: children,
141141
itemIcon,
142142
extra: props.extra,
143+
title: props.title,
143144
};
144145

145146
return {

src/interface.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ export type ItemData = {
6969
itemIcon?: RenderIconType;
7070
extra?: React.ReactNode;
7171
key: React.Key;
72+
title?: string;
7273
};
7374

7475
export interface MenuItemGroupType extends ItemSharedProps {

src/utils/nodeUtil.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,7 @@ function convertItemsToNodes(
5151
const hasExtra = !!extra || extra === 0;
5252

5353
return (
54-
<MergedMenuItem
55-
key={mergedKey}
56-
{...restProps}
57-
extra={extra}
58-
itemData={{ label, key: mergedKey, itemIcon: restProps?.itemIcon, extra }}
59-
>
54+
<MergedMenuItem key={mergedKey} {...restProps} extra={extra} itemData={{ ...opt, key: mergedKey }}>
6055
{hasExtra ? (
6156
<>
6257
<span className={`${prefixCls}-item-label`}>{label}</span>

tests/MenuItem.spec.tsx

Lines changed: 5 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -181,51 +181,25 @@ describe('MenuItem', () => {
181181
);
182182
});
183183

184-
it('should only pass defined itemData properties in onSelect and onClick', () => {
184+
it('should pass all itemData properties in onSelect and onClick when using items prop', () => {
185185
const onSelect = jest.fn();
186186
const onClick = jest.fn();
187+
const items = [{ key: '1', label: 'Menu Item', foo: '123', title: 'test title' }];
187188
const { container } = render(
188-
<Menu
189-
onSelect={onSelect}
190-
onClick={onClick}
191-
selectable
192-
items={[{ key: '1', label: 'Menu Item', foo: '123' }] as any}
193-
/>,
189+
<Menu onSelect={onSelect} onClick={onClick} selectable items={items as any} />,
194190
);
195191

196192
fireEvent.click(container.querySelector('.rc-menu-item')!);
197193
expect(onSelect).toHaveBeenCalledWith(
198194
expect.objectContaining({
199195
key: '1',
200-
itemData: expect.objectContaining({
201-
key: '1',
202-
label: 'Menu Item',
203-
}),
204-
}),
205-
);
206-
expect(onSelect).toHaveBeenCalledWith(
207-
expect.objectContaining({
208-
key: '1',
209-
itemData: expect.not.objectContaining({
210-
foo: '123',
211-
}),
196+
itemData: expect.objectContaining(items[0]),
212197
}),
213198
);
214199
expect(onClick).toHaveBeenCalledWith(
215200
expect.objectContaining({
216201
key: '1',
217-
itemData: expect.objectContaining({
218-
key: '1',
219-
label: 'Menu Item',
220-
}),
221-
}),
222-
);
223-
expect(onClick).toHaveBeenCalledWith(
224-
expect.objectContaining({
225-
key: '1',
226-
itemData: expect.not.objectContaining({
227-
foo: '123',
228-
}),
202+
itemData: expect.objectContaining(items[0]),
229203
}),
230204
);
231205
});

0 commit comments

Comments
 (0)