shineout
Version:
Shein 前端组件库
104 lines (79 loc) • 3.8 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = void 0;
var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _styles = require("./styles");
var _is = require("../utils/is");
var _shallowEqual = _interopRequireDefault(require("../utils/shallowEqual"));
var _icons = _interopRequireDefault(require("../icons"));
var _classname = require("../utils/classname");
var Option =
/*#__PURE__*/
function (_React$Component) {
(0, _inheritsLoose2.default)(Option, _React$Component);
function Option(props) {
var _this;
_this = _React$Component.call(this, props) || this;
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "locked", void 0);
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "handleEnter", void 0);
_this.handleClick = _this.handleClick.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
_this.handleEnter = _this.handleHover.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
return _this;
}
var _proto = Option.prototype;
_proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps, nextState) {
if (this.props.filterText) return true;
if (!(0, _shallowEqual.default)(nextProps, this.props) || !(0, _shallowEqual.default)(nextState, this.state)) return true;
return false;
};
_proto.handleClick = function handleClick() {
var _this2 = this;
var _this$props = this.props,
data = _this$props.data,
onClick = _this$props.onClick,
isActive = _this$props.isActive,
disabled = _this$props.disabled,
groupKey = _this$props.groupKey;
if (this.locked || disabled || data && data[groupKey]) return;
this.locked = true;
onClick(!isActive, data);
setTimeout(function () {
_this2.locked = false;
}, 200);
};
_proto.handleHover = function handleHover() {
this.props.onHover(this.props.index);
};
_proto.render = function render() {
var _this$props2 = this.props,
data = _this$props2.data,
isActive = _this$props2.isActive,
index = _this$props2.index,
renderItem = _this$props2.renderItem,
isHover = _this$props2.isHover,
disabled = _this$props2.disabled,
groupKey = _this$props2.groupKey;
var isGroupTitle = data && data[groupKey];
var className = (0, _classnames.default)((0, _styles.selectClass)((0, _classname.getDirectionClass)('option'), isActive && 'active', isHover && 'hover', disabled && (0, _classname.getDirectionClass)('disabled'), isGroupTitle && 'group'), "option-" + index);
var result = isGroupTitle ? data[groupKey] : renderItem(data, index);
var title = typeof result === 'string' ? result : '';
if ((0, _is.isObject)(data) && result === data) {
console.warn('renderItem is essential when data element is Object');
}
return _react.default.createElement("a", {
tabIndex: -1,
onClick: this.handleClick,
onMouseEnter: this.handleEnter,
className: className,
title: title
}, result, isActive && _icons.default.Check);
};
return Option;
}(_react.default.Component);
var _default = Option;
exports.default = _default;