uxcore-menu
Version:
uxcore-menu component for uxcore.
82 lines (69 loc) • 1.71 kB
JSX
import React from 'react';
import PropTypes from 'prop-types';
import classnames from 'classnames';
import { SubMenu as RcSubMenu } from 'rc-menu';
import { getClampProps, IS_LET_REACT_16 } from './utils';
class SubMenu extends React.Component {
render() {
const { title, ...props } = this.props;
const {
mode,
level,
theme,
prefixCls,
lineClamp,
} = this.context;
const {
props: titleProps,
clamp,
} = getClampProps({
mode,
level: props.level || level,
className: `${prefixCls}-submenu-title-text ${prefixCls}-clamp-text`,
lineClamp,
});
if (typeof title === 'string') {
titleProps.title = title;
}
let titleJSX = title;
if (clamp) {
titleJSX = (
<span {...titleProps}>{title}</span>
);
} else {
titleJSX = (
<span {...titleProps} className={`${prefixCls}-submenu-title-text`}>{title}</span>
);
}
props.title = titleJSX;
if (clamp) {
props.className = classnames(props.className, `${prefixCls}-submenu-clamp`);
}
return (
<RcSubMenu
{...props}
ref={this.saveSubMenu}
popupClassName={classnames(`${prefixCls}-${theme}`, {
[`${prefixCls}-lte-react16`]: IS_LET_REACT_16,
})}
/>
);
}
}
SubMenu.propTypes = {
...RcSubMenu.propTypes,
title: PropTypes.node,
};
SubMenu.defaultProps = {
...RcSubMenu.defaultProps,
title: null,
};
SubMenu.contextTypes = {
mode: PropTypes.string,
level: PropTypes.number,
theme: PropTypes.string,
prefixCls: PropTypes.string,
lineClamp: PropTypes.number,
};
SubMenu.isSubMenu = true;
export default SubMenu;