bonree-cascader
Version:
cascade select ui component for react
172 lines (138 loc) • 6.33 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = Column;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var React = _interopRequireWildcard(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _Cascader = require("../Cascader");
var _util = require("../util");
var _context = _interopRequireDefault(require("../context"));
var _Checkbox = _interopRequireDefault(require("./Checkbox"));
function Column(_ref) {
var prefixCls = _ref.prefixCls,
index = _ref.index,
multiple = _ref.multiple,
options = _ref.options,
openKey = _ref.openKey,
onSelect = _ref.onSelect,
onOpen = _ref.onOpen,
onToggleOpen = _ref.onToggleOpen,
checkedSet = _ref.checkedSet,
halfCheckedSet = _ref.halfCheckedSet,
openFinalValue = _ref.openFinalValue;
var menuPrefixCls = "".concat(prefixCls, "-menu");
var menuItemPrefixCls = "".concat(prefixCls, "-menu-item");
var _React$useContext = React.useContext(_context.default),
changeOnSelect = _React$useContext.changeOnSelect,
expandTrigger = _React$useContext.expandTrigger,
expandIcon = _React$useContext.expandIcon,
loadingIcon = _React$useContext.loadingIcon,
dropdownMenuColumnStyle = _React$useContext.dropdownMenuColumnStyle,
requestFailureIcon = _React$useContext.requestFailureIcon,
requestFailureText = _React$useContext.requestFailureText,
refreshText = _React$useContext.refreshText,
empty = _React$useContext.empty;
var hoverOpen = expandTrigger === 'hover'; // ============================ Render ============================
return /*#__PURE__*/React.createElement("ul", {
className: menuPrefixCls,
role: "menu"
}, options.map(function (option) {
var _classNames;
var disabled = option.disabled,
value = option.value,
node = option.node;
var isMergedLeaf = (0, _util.isLeaf)(option); // const isLoading = loadingKeys.includes(value);
// 加载中
var isLoading = value === (0, _util.connectValue)([openFinalValue, _Cascader.LOAD_STATUS.LOADING]) || value === _Cascader.LOAD_STATUS.LOADING;
if (isLoading) {
return /*#__PURE__*/React.createElement("li", {
key: value,
className: (0, _classnames.default)(menuItemPrefixCls, "".concat(menuItemPrefixCls, "-loading")),
style: dropdownMenuColumnStyle
}, loadingIcon);
} // 加载数据失败
var isLoadFailed = value === (0, _util.connectValue)([openFinalValue, _Cascader.LOAD_STATUS.FAILED]) || value === _Cascader.LOAD_STATUS.FAILED;
if (isLoadFailed) {
return /*#__PURE__*/React.createElement("li", {
key: value,
className: (0, _classnames.default)(menuItemPrefixCls, "".concat(menuItemPrefixCls, "-failed")),
style: dropdownMenuColumnStyle
}, /*#__PURE__*/React.createElement("div", {
className: "".concat(menuItemPrefixCls, "-failed-content")
}, requestFailureIcon, requestFailureText, /*#__PURE__*/React.createElement("span", {
className: "".concat(menuItemPrefixCls, "-failed-content-refresh"),
onClick: function onClick() {
onOpen(index, openFinalValue);
}
}, refreshText)));
} // 无数据
var isNoData = value === (0, _util.connectValue)([openFinalValue, _Cascader.LOAD_STATUS.EMPTY]) || value === _Cascader.LOAD_STATUS.EMPTY;
if (isNoData) {
return /*#__PURE__*/React.createElement("li", {
key: value,
className: (0, _classnames.default)(menuItemPrefixCls, "".concat(menuItemPrefixCls, "-empty")),
style: dropdownMenuColumnStyle
}, empty);
} // >>>>> checked
var checked = checkedSet.has(value); // >>>>> Open
var triggerOpenPath = function triggerOpenPath() {
// if (!disabled && hoverOpen) {
if (!disabled && (!hoverOpen || !isMergedLeaf)) {
onOpen(index, value);
}
}; // >>>>> Selection
var triggerSelect = function triggerSelect() {
if (!disabled && (isMergedLeaf || changeOnSelect || multiple)) {
onSelect(value, isMergedLeaf);
}
}; // >>>>> Title
var title;
if (typeof (node === null || node === void 0 ? void 0 : node.title) === 'string') {
title = node.title;
} else if (typeof option.title === 'string') {
title = option.title;
} // >>>>> Render
return /*#__PURE__*/React.createElement("li", {
key: value,
className: (0, _classnames.default)(menuItemPrefixCls, (_classNames = {}, (0, _defineProperty2.default)(_classNames, "".concat(menuItemPrefixCls, "-expand"), !isMergedLeaf), (0, _defineProperty2.default)(_classNames, "".concat(menuItemPrefixCls, "-active"), openKey === value), (0, _defineProperty2.default)(_classNames, "".concat(menuItemPrefixCls, "-disabled"), disabled), _classNames)),
style: dropdownMenuColumnStyle,
role: "menuitemcheckbox",
title: title,
"aria-checked": checked,
"data-value": value,
onClick: function onClick() {
triggerOpenPath();
if (!multiple || isMergedLeaf) {
triggerSelect();
}
},
onDoubleClick: function onDoubleClick() {
if (changeOnSelect) {
onToggleOpen(false);
}
},
onMouseEnter: function onMouseEnter() {
if (!disabled && hoverOpen) {
onOpen(index, value);
}
}
}, multiple && value !== '__EMPTY__' && !isLoading && /*#__PURE__*/React.createElement(_Checkbox.default, {
prefixCls: "".concat(prefixCls, "-checkbox"),
checked: checked,
halfChecked: halfCheckedSet.has(value),
disabled: disabled,
onClick: function onClick(e) {
e.stopPropagation();
triggerSelect();
}
}), /*#__PURE__*/React.createElement("div", {
className: "".concat(menuItemPrefixCls, "-content")
}, option.title), expandIcon && !isMergedLeaf && /*#__PURE__*/React.createElement("div", {
className: "".concat(menuItemPrefixCls, "-expand-icon")
}, expandIcon));
}));
}