@cainiaofe/cn-ui-m
Version:
47 lines (46 loc) • 2.27 kB
JavaScript
import React, { useCallback } from 'react';
import cx from 'classnames';
export var MenuActionSheet = function (props) {
var clsPrefix = props.clsPrefix, options = props.options, onClick = props.onClick, onClose = props.onClose, disabledIndexes = props.disabledIndexes;
var len = options ? options.length : 0;
var disabled = disabledIndexes;
var handleOptionClick = useCallback(function (option, index, e) {
if (onClick) {
onClick(option, index, e);
}
if (onClose) {
onClose(index, e);
}
}, [onClick, onClose]);
// 渲染单个按钮
var renderButton = function (button, index) {
var _a;
return (React.createElement("div", { key: "".concat(clsPrefix, "-option-").concat(index), onClick: function (e) {
if (!disabled) {
handleOptionClick(button, index, e);
}
}, className: cx("".concat(clsPrefix, "-option"), (_a = {},
_a["".concat(clsPrefix, "-option--last")] = index === len - 1,
_a["".concat(clsPrefix, "-option--disabled")] = disabled,
_a)) },
React.createElement("div", { className: cx("".concat(clsPrefix, "-option-text"), "".concat(clsPrefix, "-option--left")) }, button)));
};
// 渲染分组
var renderLabel = function (label) { return (React.createElement("div", { className: cx("".concat(clsPrefix, "-option"), "".concat(clsPrefix, "-option--no-line")) },
React.createElement("div", { className: cx("".concat(clsPrefix, "-option-text"), "".concat(clsPrefix, "-option-label")) }, label))); };
var renderMenus = function () {
var preLabel = '';
return options.map(function (option, index) {
if (option.props.label && preLabel !== option.props.label) {
preLabel = option.props.label;
return (React.createElement(React.Fragment, null,
renderLabel(option.props.label),
renderButton(option.props.children, index)));
}
else {
return renderButton(option.props.children, index);
}
});
};
return React.createElement(React.Fragment, null, renderMenus());
};