Skip to content

Commit 441804b

Browse files
yangxiuxiu1115RicardoErii
andauthored
feat: support for submenu custom styles (#645)
* feat: support for submenu custom styles * feat: support for submenu custom styles * feat: support for submenu custom styles * docs: update docs * feat: support custom style * docs: update docs * test: add test case --------- Co-authored-by: RicardoErii <‘[email protected]’>
1 parent 6c805fa commit 441804b

File tree

5 files changed

+33
-2
lines changed

5 files changed

+33
-2
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,12 @@ ReactDOM.render(
300300
<td></td>
301301
<td>additional css class of root dom node</td>
302302
</tr>
303+
<tr>
304+
<td>popupStyle</td>
305+
<td>CSSProperties</td>
306+
<td></td>
307+
<td>additional css style of root dom node</td>
308+
</tr>
303309
<tr>
304310
<td>title</td>
305311
<td>String/ReactElement</td>

src/SubMenu/PopupTrigger.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export interface PopupTriggerProps {
2121
visible: boolean;
2222
children: React.ReactElement;
2323
popup: React.ReactNode;
24+
popupStyle?: React.CSSProperties;
2425
popupClassName?: string;
2526
popupOffset?: number[];
2627
disabled: boolean;
@@ -32,6 +33,7 @@ export default function PopupTrigger({
3233
visible,
3334
children,
3435
popup,
36+
popupStyle,
3537
popupClassName,
3638
popupOffset,
3739
disabled,
@@ -108,6 +110,7 @@ export default function PopupTrigger({
108110
popupPlacement={popupPlacement}
109111
popupVisible={innerVisible}
110112
popup={popup}
113+
popupStyle={popupStyle}
111114
popupAlign={popupOffset && { offset: popupOffset }}
112115
action={disabled ? [] : [triggerSubMenuAction]}
113116
mouseEnterDelay={subMenuOpenDelay}

src/SubMenu/index.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ const InternalSubMenu = (props: SubMenuProps) => {
6262
// Popup
6363
popupClassName,
6464
popupOffset,
65+
popupStyle,
6566

6667
// Events
6768
onClick,
@@ -280,6 +281,7 @@ const InternalSubMenu = (props: SubMenuProps) => {
280281
visible={!internalPopupClose && open && mode !== 'inline'}
281282
popupClassName={popupClassName}
282283
popupOffset={popupOffset}
284+
popupStyle={popupStyle}
283285
popup={
284286
<MenuContextProvider
285287
// Special handle of horizontal mode

src/interface.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export interface SubMenuType extends ItemSharedProps {
2828
// >>>>> Popup
2929
popupClassName?: string;
3030
popupOffset?: number[];
31+
popupStyle?: React.CSSProperties;
3132

3233
// >>>>> Events
3334
onClick?: MenuClickEventHandler;

tests/SubMenu.spec.tsx

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import Menu, { MenuItem, SubMenu } from '../src';
66
import { isActive, last } from './util';
77

88
jest.mock('@rc-component/trigger', () => {
9-
const react = require('react');
9+
const react = require('react');
1010
let Trigger = jest.requireActual('@rc-component/trigger/lib/mock');
1111
Trigger = Trigger.default || Trigger;
1212

@@ -17,7 +17,7 @@ jest.mock('@rc-component/trigger', () => {
1717
});
1818

1919
jest.mock('../src/SubMenu/PopupTrigger', () => {
20-
const react = require('react');
20+
const react = require('react');
2121
let PopupTrigger = jest.requireActual('../src/SubMenu/PopupTrigger');
2222
PopupTrigger = PopupTrigger.default || PopupTrigger;
2323

@@ -480,5 +480,24 @@ describe('SubMenu', () => {
480480

481481
expect(container.children).toMatchSnapshot();
482482
});
483+
484+
it('submenu should support popupStyle', () => {
485+
const { container } = render(
486+
<Menu>
487+
<SubMenu
488+
key="s1"
489+
title="submenu1"
490+
popupStyle={{ zIndex: 100, width: 150 }}
491+
>
492+
<MenuItem key="s1-1">1</MenuItem>
493+
</SubMenu>
494+
</Menu>,
495+
);
496+
497+
fireEvent.mouseEnter(container.querySelector('.rc-menu-submenu-title'));
498+
runAllTimer();
499+
expect((container.querySelector('.rc-menu-submenu-popup') as HTMLElement).style.zIndex).toEqual('100');
500+
expect((container.querySelector('.rc-menu-submenu-popup') as HTMLElement).style.width).toEqual('150px');
501+
});
483502
});
484503
/* eslint-enable */

0 commit comments

Comments
 (0)