choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
283 lines (237 loc) • 8.36 kB
JavaScript
;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _tslib = require("tslib");
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _configure = require("../../../lib/configure");
var _Trigger = _interopRequireDefault(require("../../../lib/trigger/Trigger"));
var _enum = require("../../../lib/trigger/enum");
var _enum2 = require("./enum");
var _placements = _interopRequireDefault(require("./placements"));
var _autobind = _interopRequireDefault(require("../_util/autobind"));
function _createSuper(Derived) {
function isNativeReflectConstruct() {
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
if (Reflect.construct.sham) return false;
if (typeof Proxy === "function") return true;
try {
Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));
return true;
} catch (e) {
return false;
}
}
return function () {
var Super = (0, _getPrototypeOf2["default"])(Derived),
result;
if (isNativeReflectConstruct()) {
var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor;
result = Reflect.construct(Super, arguments, NewTarget);
} else {
result = Super.apply(this, arguments);
}
return (0, _possibleConstructorReturn2["default"])(this, result);
};
}
var popupStyle = {
whiteSpace: 'nowrap'
};
var Dropdown =
/*#__PURE__*/
function (_PureComponent) {
(0, _inherits2["default"])(Dropdown, _PureComponent);
var _super = _createSuper(Dropdown);
function Dropdown(props) {
var _this;
(0, _classCallCheck2["default"])(this, Dropdown);
_this = _super.call(this, props);
if ('hidden' in props) {
_this.state = {
hidden: props.hidden
};
} else if ('visible' in props) {
_this.state = {
hidden: !props.visible
};
} else if ('defaultHidden' in props) {
_this.state = {
hidden: props.defaultHidden
};
} else {
_this.state = {
hidden: !props.defaultVisible
};
}
return _this;
}
(0, _createClass2["default"])(Dropdown, [{
key: "handlePopupHiddenChange",
/**
* 调用传入的onHiddenChange方法
*
* @param {boolean} hidden
*/
value: function handlePopupHiddenChange(hidden) {
var _this$props = this.props,
onHiddenChange = _this$props.onHiddenChange,
onVisibleChange = _this$props.onVisibleChange,
propsHidden = _this$props.hidden,
propsVisible = _this$props.visible;
if (propsHidden === undefined && propsVisible === undefined) {
this.setState({
hidden: hidden
});
}
if (onHiddenChange) {
onHiddenChange(hidden);
}
if (onVisibleChange) {
onVisibleChange(!hidden);
}
}
}, {
key: "handleClick",
value: function handleClick(e) {
var _this$props2 = this.props,
onOverlayClick = _this$props2.onOverlayClick,
hidden = _this$props2.hidden,
visible = _this$props2.visible;
var _ref = this.renderedContentProps || {},
onClick = _ref.onClick;
if (onOverlayClick) {
onOverlayClick(e);
}
if (onClick) {
onClick(e);
}
if (hidden === undefined && visible === undefined) {
this.setState({
hidden: true
});
}
}
}, {
key: "getContent",
value: function getContent() {
var overlay = this.props.overlay;
if (typeof overlay === 'function') {
return overlay.apply(void 0, arguments);
}
return overlay;
}
}, {
key: "renderPopupContent",
value: function renderPopupContent() {
var content = this.getContent.apply(this, arguments);
if ((0, _react.isValidElement)(content)) {
this.renderedContentProps = content.props;
return (0, _react.cloneElement)(content, {
onClick: this.handleClick
});
}
}
}, {
key: "componentWillReceiveProps",
value: function componentWillReceiveProps(_ref2) {
var hidden = _ref2.hidden,
visible = _ref2.visible;
if (hidden !== undefined) {
this.setState({
hidden: hidden
});
} else if (visible !== undefined) {
this.setState({
hidden: !visible
});
}
}
}, {
key: "render",
value: function render() {
var prefixCls = this.prefixCls,
hidden = this.state.hidden,
_this$props3 = this.props,
children = _this$props3.children,
placement = _this$props3.placement,
popupClassName = _this$props3.popupClassName,
getPopupContainer = _this$props3.getPopupContainer,
onHiddenBeforeChange = _this$props3.onHiddenBeforeChange;
return _react["default"].createElement(_Trigger["default"], {
prefixCls: prefixCls,
action: this.triggerAction,
builtinPlacements: _placements["default"],
popupPlacement: placement,
popupContent: this.renderPopupContent,
popupStyle: popupStyle,
popupClassName: popupClassName,
onPopupHiddenChange: this.handlePopupHiddenChange,
onPopupHiddenBeforeChange: onHiddenBeforeChange,
popupHidden: hidden,
getPopupContainer: getPopupContainer
}, children);
}
}, {
key: "triggerAction",
get: function get() {
var trigger = this.props.trigger;
return trigger;
}
}, {
key: "transitionName",
get: function get() {
var placement = this.props.placement;
var result = 'slide-up';
if (placement && placement.startsWith('top')) {
result = 'slide-down';
}
return result;
}
}, {
key: "prefixCls",
get: function get() {
var _this$props4 = this.props,
suffixCls = _this$props4.suffixCls,
prefixCls = _this$props4.prefixCls;
return (0, _configure.getProPrefixCls)(suffixCls, prefixCls);
}
}]);
return Dropdown;
}(_react.PureComponent);
exports["default"] = Dropdown;
Dropdown.displayName = 'Dropdown';
Dropdown.propTypes = {
trigger: _propTypes["default"].arrayOf(_propTypes["default"].oneOf([_enum.Action.focus, _enum.Action.hover, _enum.Action.click, _enum.Action.contextMenu])),
overlay: _propTypes["default"].any,
placement: _propTypes["default"].oneOf([_enum2.Placements.bottomLeft, _enum2.Placements.bottomCenter, _enum2.Placements.bottomRight, _enum2.Placements.topLeft, _enum2.Placements.topCenter, _enum2.Placements.topRight]),
hidden: _propTypes["default"].bool,
visible: _propTypes["default"].bool,
onHiddenChange: _propTypes["default"].func,
onHiddenBeforeChange: _propTypes["default"].func,
onVisibleChange: _propTypes["default"].func,
onOverlayClick: _propTypes["default"].func,
suffixCls: _propTypes["default"].string,
prefixCls: _propTypes["default"].string,
defaultHidden: _propTypes["default"].bool,
defaultVisible: _propTypes["default"].bool,
popupClassName: _propTypes["default"].string
};
Dropdown.defaultProps = {
suffixCls: 'dropdown',
placement: _enum2.Placements.bottomLeft,
trigger: [_enum.Action.hover, _enum.Action.focus],
defaultHidden: true
};
(0, _tslib.__decorate)([_autobind["default"]], Dropdown.prototype, "handlePopupHiddenChange", null);
(0, _tslib.__decorate)([_autobind["default"]], Dropdown.prototype, "handleClick", null);
(0, _tslib.__decorate)([_autobind["default"]], Dropdown.prototype, "renderPopupContent", null);
//# sourceMappingURL=Dropdown.js.map