chore: Internal Menu interface for ProLayout usage (#33399)

* test: Update snapshot

* chore: disable tooltip

* chore: rename
This commit is contained in:
二货机器人 2021-12-24 10:57:35 +08:00 committed by GitHub
parent ff88851c4c
commit f1e0c9c1d2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 106 additions and 95 deletions

View File

@ -9,6 +9,8 @@ export interface MenuContextProps {
antdMenuTheme?: MenuTheme;
direction?: DirectionType;
firstLevel: boolean;
/** @private Internal Usage. Safe to remove */
disableMenuItemTitleTooltip?: boolean;
}
const MenuContext = createContext<MenuContextProps>({

View File

@ -34,7 +34,8 @@ export default class MenuItem extends React.Component<MenuItemProps> {
}
renderItem = ({ siderCollapsed }: SiderContextProps) => {
const { prefixCls, firstLevel, inlineCollapsed, direction } = this.context;
const { prefixCls, firstLevel, inlineCollapsed, direction, disableMenuItemTitleTooltip } =
this.context;
const { className, children } = this.props;
const { title, icon, danger, ...rest } = this.props;
@ -55,12 +56,8 @@ export default class MenuItem extends React.Component<MenuItemProps> {
tooltipProps.visible = false;
}
const childrenLength = toArray(children).length;
return (
<Tooltip
{...tooltipProps}
placement={direction === 'rtl' ? 'left' : 'right'}
overlayClassName={`${prefixCls}-inline-collapsed-tooltip`}
>
let returnNode = (
<Item
{...rest}
className={classNames(
@ -80,8 +77,21 @@ export default class MenuItem extends React.Component<MenuItemProps> {
})}
{this.renderItemChildren(inlineCollapsed)}
</Item>
);
if (!disableMenuItemTitleTooltip) {
returnNode = (
<Tooltip
{...tooltipProps}
placement={direction === 'rtl' ? 'left' : 'right'}
overlayClassName={`${prefixCls}-inline-collapsed-tooltip`}
>
{returnNode}
</Tooltip>
);
}
return returnNode;
};
render() {

View File

@ -879,15 +879,15 @@ Array [
<br />,
<br />,
<ul
class="ant-menu-overflow ant-menu ant-menu-root ant-menu-horizontal ant-menu-dark"
class="ant-menu ant-menu-root ant-menu-vertical ant-menu-dark ant-menu-inline-collapsed"
data-menu-list="true"
role="menu"
tabindex="0"
>
<li
class="ant-menu-overflow-item ant-menu-submenu ant-menu-submenu-horizontal"
class="ant-menu-submenu ant-menu-submenu-vertical"
role="none"
style="opacity:1;order:0"
style="background:rgba(255,255,255,0.3)"
>
<div
aria-expanded="false"
@ -926,9 +926,9 @@ Array [
</div>
</li>
<li
class="ant-menu-overflow-item ant-menu-submenu ant-menu-submenu-horizontal"
class="ant-menu-submenu ant-menu-submenu-vertical"
role="none"
style="opacity:1;order:1"
style="background:rgba(255,255,255,0.3)"
>
<div
aria-expanded="false"
@ -967,64 +967,27 @@ Array [
</div>
</li>
<li
class="ant-menu-overflow-item ant-menu-item ant-menu-item-only-child"
class="ant-menu-item ant-menu-item-only-child"
role="menuitem"
style="opacity:1;order:2"
style="text-decoration:underline"
tabindex="-1"
>
<span
class="ant-menu-title-content"
>
Option 11
</span>
</li>
<li
class="ant-menu-overflow-item ant-menu-item ant-menu-item-only-child"
role="menuitem"
style="opacity:1;order:3"
tabindex="-1"
>
<span
class="ant-menu-title-content"
>
Option 12
</span>
</li>
<li
aria-hidden="true"
class="ant-menu-overflow-item ant-menu-overflow-item-rest ant-menu-submenu ant-menu-submenu-horizontal"
role="none"
style="opacity:0;height:0;overflow-y:hidden;order:9007199254740991;pointer-events:none;position:absolute"
>
<div
aria-expanded="false"
aria-haspopup="true"
class="ant-menu-submenu-title"
class="ant-menu-inline-collapsed-noicon"
>
O
</div>
</li>
<li
class="ant-menu-item ant-menu-item-only-child"
role="menuitem"
style="text-decoration:underline"
tabindex="-1"
>
<span
aria-label="ellipsis"
class="anticon anticon-ellipsis"
role="img"
<div
class="ant-menu-inline-collapsed-noicon"
>
<svg
aria-hidden="true"
data-icon="ellipsis"
fill="currentColor"
focusable="false"
height="1em"
viewBox="64 64 896 896"
width="1em"
>
<path
d="M176 511a56 56 0 10112 0 56 56 0 10-112 0zm280 0a56 56 0 10112 0 56 56 0 10-112 0zm280 0a56 56 0 10112 0 56 56 0 10-112 0z"
/>
</svg>
</span>
<i
class="ant-menu-submenu-arrow"
/>
O
</div>
</li>
</ul>,

View File

@ -14,25 +14,31 @@ buggy!
buggy!
```jsx
import { Menu, Switch } from 'antd';
```tsx
import * as React from 'react';
import { Menu, MenuProps, Switch } from 'antd';
import { MailOutlined, AppstoreOutlined } from '@ant-design/icons';
const { SubMenu } = Menu;
class Sider extends React.Component {
state = {
interface DemoState {
theme: 'light' | 'dark';
current: string;
}
class Demo extends React.Component<{}, DemoState> {
state: DemoState = {
theme: 'dark',
current: '1',
};
changeTheme = value => {
changeTheme = (value: boolean) => {
this.setState({
theme: value ? 'dark' : 'light',
});
};
handleClick = e => {
handleClick: MenuProps['onClick'] = e => {
console.log('click ', e);
this.setState({
current: e.key,
@ -54,7 +60,28 @@ class Sider extends React.Component {
theme={this.state.theme}
onClick={this.handleClick}
selectedKeys={[this.state.current]}
mode="horizontal"
mode="inline"
inlineCollapsed
// Test only. Remove in future.
_internalRenderMenuItem={node =>
React.cloneElement(node, {
style: {
...node.props.style,
textDecoration: 'underline',
},
})
}
// Test only. Remove in future.
_internalRenderSubMenuItem={node =>
React.cloneElement(node, {
style: {
...node.props.style,
background: 'rgba(255,255,255,0.3)',
},
})
}
// Test only. Remove in future.
_internalDisableMenuItemTitleTooltip
>
<SubMenu key="sub1" icon={<MailOutlined />} title="Navigation One Long Long Long Long">
<Menu.Item key="1">Option 1</Menu.Item>
@ -78,5 +105,5 @@ class Sider extends React.Component {
}
}
ReactDOM.render(<Sider />, mountNode);
ReactDOM.render(<Demo />, mountNode);
```

View File

@ -23,6 +23,13 @@ export type MenuMode = 'vertical' | 'vertical-left' | 'vertical-right' | 'horizo
export interface MenuProps extends RcMenuProps {
theme?: MenuTheme;
inlineIndent?: number;
// >>>>> Private
/**
* @private Internal Usage. Not promise crash if used in production. Connect with chenshuai2144
* for removing.
*/
_internalDisableMenuItemTitleTooltip?: boolean;
}
type InternalMenuProps = MenuProps &
@ -67,6 +74,7 @@ class InternalMenu extends React.Component<InternalMenuProps> {
className,
theme,
expandIcon,
_internalDisableMenuItemTitleTooltip,
...restProps
} = this.props;
@ -83,13 +91,14 @@ class InternalMenu extends React.Component<InternalMenuProps> {
const menuClassName = classNames(`${prefixCls}-${theme}`, className);
// TODO: refactor menu with function component
const contextValue = memoize((cls, collapsed, the, dir) => ({
const contextValue = memoize((cls, collapsed, the, dir, disableMenuItemTitleTooltip) => ({
prefixCls: cls,
inlineCollapsed: collapsed || false,
antdMenuTheme: the,
direction: dir,
firstLevel: true,
}))(prefixCls, inlineCollapsed, theme, direction);
disableMenuItemTitleTooltip,
}))(prefixCls, inlineCollapsed, theme, direction, _internalDisableMenuItemTitleTooltip);
return (
<MenuContext.Provider value={contextValue}>

View File

@ -131,7 +131,7 @@
"rc-image": "~5.2.5",
"rc-input-number": "~7.3.0",
"rc-mentions": "~1.6.1",
"rc-menu": "~9.0.12",
"rc-menu": "~9.1.1",
"rc-motion": "^2.4.4",
"rc-notification": "~4.5.7",
"rc-pagination": "~3.1.9",