acud
Version:
acg react 组件库
74 lines • 2.87 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import React, { useRef, useCallback, useState, useMemo } from 'react';
import Tooltip from '../tooltip';
import Checkbox from '../checkbox';
var MenuItem = function MenuItem(props) {
var _a;
var option = props.option,
label = props.label,
menuItemCls = props.menuItemCls,
expandProps = props.expandProps,
prefixCls = props.prefixCls,
isMulti = props.isMulti,
checked = props.checked,
indeterminate = props.indeterminate,
labelContent = props.labelContent,
expandIconNode = props.expandIconNode,
loadingIconNode = props.loadingIconNode,
handleMultiClick = props.handleMultiClick,
onMultiSelect = props.onMultiSelect,
onMouseEnter = props.onMouseEnter,
titlePlacement = props.titlePlacement;
var targetRef = useRef();
var _useState = useState(false),
_useState2 = _slicedToArray(_useState, 2),
overflow = _useState2[0],
setOverflow = _useState2[1];
var title = useMemo(function () {
if ('title' in option) {
return option.title;
}
if ((typeof label === 'string' || option.__IS_FILTERED_OPTION) && overflow) {
return label;
}
}, [label, option, overflow]);
var handleMouseEnter = useCallback(function (e) {
onMouseEnter === null || onMouseEnter === void 0 ? void 0 : onMouseEnter(e);
var ele = targetRef.current;
if (isMulti) {
ele = ele === null || ele === void 0 ? void 0 : ele.parentNode;
}
var overflow = (ele === null || ele === void 0 ? void 0 : ele.scrollWidth) > (ele === null || ele === void 0 ? void 0 : ele.clientWidth);
setOverflow(overflow);
}, [onMouseEnter]);
return /*#__PURE__*/React.createElement(Tooltip, {
title: title,
overlayClassName: "".concat(prefixCls, "-menu-item-tooltip"),
placement: (_a = option.titlePlacement) !== null && _a !== void 0 ? _a : titlePlacement
}, /*#__PURE__*/React.createElement("li", _extends({
className: menuItemCls
}, expandProps, {
role: "menuitem",
disabled: option.disabled,
onMouseDown: function onMouseDown(e) {
return e.preventDefault();
},
onMouseEnter: handleMouseEnter
}), /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-menu-item-content"),
"aria-disabled": option.disabled
}, isMulti ? /*#__PURE__*/React.createElement(Checkbox, {
className: "".concat(prefixCls, "-menu-item-checkbox"),
disabled: option.disabled,
checked: checked,
indeterminate: indeterminate,
onChange: onMultiSelect,
onClick: handleMultiClick
}, /*#__PURE__*/React.cloneElement(labelContent, {
ref: targetRef
})) : (/*#__PURE__*/React.cloneElement(labelContent, {
ref: targetRef
}))), expandIconNode, loadingIconNode));
};
export default MenuItem;