choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
245 lines (207 loc) • 7.76 kB
JavaScript
import _extends from "@babel/runtime/helpers/extends";
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
import _createClass from "@babel/runtime/helpers/createClass";
import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized";
import _inherits from "@babel/runtime/helpers/inherits";
import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
import _defineProperty from "@babel/runtime/helpers/defineProperty";
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 = _getPrototypeOf(Derived),
result;
if (isNativeReflectConstruct()) {
var NewTarget = _getPrototypeOf(this).constructor;
result = Reflect.construct(Super, arguments, NewTarget);
} else {
result = Super.apply(this, arguments);
}
return _possibleConstructorReturn(this, result);
};
}
import React, { cloneElement, Component } from 'react';
import PropTypes from 'prop-types';
import ReactDOM from 'react-dom';
import Trigger from '../trigger';
import placements from './placements';
var Dropdown =
/*#__PURE__*/
function (_Component) {
_inherits(Dropdown, _Component);
var _super = _createSuper(Dropdown);
function Dropdown(_props) {
var _this;
_classCallCheck(this, Dropdown);
_this = _super.call(this, _props);
_defineProperty(_assertThisInitialized(_this), "onClick", function (e) {
var props = _this.props;
var overlay = props.overlay;
var element = typeof overlay === 'function' ? overlay() : overlay;
var overlayProps = element.props; // do no call onVisibleChange, if you need click to hide, use onClick and control visible
if (!('visible' in props)) {
_this.setState({
visible: false
});
}
if (props.onOverlayClick) {
props.onOverlayClick(e);
}
if (overlayProps.onClick) {
overlayProps.onClick(e);
}
});
_defineProperty(_assertThisInitialized(_this), "onVisibleChange", function (visible) {
var props = _this.props;
if (!('visible' in props)) {
_this.setState({
visible: visible
});
}
props.onVisibleChange(visible);
});
_defineProperty(_assertThisInitialized(_this), "getMenuElement", function () {
var _this$props = _this.props,
overlay = _this$props.overlay,
prefixCls = _this$props.prefixCls;
var element = typeof overlay === 'function' ? overlay() : overlay;
if (element) {
var extraOverlayProps = {
prefixCls: "".concat(prefixCls, "-menu"),
onClick: _this.onClick
};
if (typeof element.type === 'string') {
delete extraOverlayProps.prefixCls;
}
return cloneElement(element, extraOverlayProps);
}
});
_defineProperty(_assertThisInitialized(_this), "afterVisibleChange", function (visible) {
if (visible && _this.props.minOverlayWidthMatchTrigger) {
var overlayNode = _this.getPopupDomNode();
var rootNode = ReactDOM.findDOMNode(_assertThisInitialized(_this));
if (rootNode && overlayNode && rootNode.offsetWidth > overlayNode.offsetWidth) {
overlayNode.style.minWidth = "".concat(rootNode.offsetWidth, "px");
if (_this.trigger && _this.trigger._component && _this.trigger._component.alignInstance) {
_this.trigger._component.alignInstance.forceAlign();
}
}
}
});
_defineProperty(_assertThisInitialized(_this), "saveTrigger", function (node) {
_this.trigger = node;
});
if ('visible' in _props) {
_this.state = {
visible: _props.visible
};
} else {
_this.state = {
visible: _props.defaultVisible
};
}
return _this;
}
_createClass(Dropdown, [{
key: "componentWillReceiveProps",
value: function componentWillReceiveProps(_ref) {
var visible = _ref.visible;
if (visible !== undefined) {
this.setState({
visible: visible
});
}
}
}, {
key: "getPopupDomNode",
value: function getPopupDomNode() {
return this.trigger.getPopupDomNode();
}
}, {
key: "render",
value: function render() {
var _this$props2 = this.props,
prefixCls = _this$props2.prefixCls,
children = _this$props2.children,
transitionName = _this$props2.transitionName,
animation = _this$props2.animation,
align = _this$props2.align,
placement = _this$props2.placement,
getPopupContainer = _this$props2.getPopupContainer,
showAction = _this$props2.showAction,
hideAction = _this$props2.hideAction,
overlayClassName = _this$props2.overlayClassName,
overlayPlacements = _this$props2.overlayPlacements,
overlayStyle = _this$props2.overlayStyle,
trigger = _this$props2.trigger,
otherProps = _objectWithoutProperties(_this$props2, ["prefixCls", "children", "transitionName", "animation", "align", "placement", "getPopupContainer", "showAction", "hideAction", "overlayClassName", "overlayPlacements", "overlayStyle", "trigger"]);
var builtinPlacements = overlayPlacements || placements;
return React.createElement(Trigger, _extends({}, otherProps, {
prefixCls: prefixCls,
ref: this.saveTrigger,
popupClassName: overlayClassName,
popupStyle: overlayStyle,
builtinPlacements: builtinPlacements,
action: trigger,
showAction: showAction,
hideAction: hideAction,
popupPlacement: placement,
popupAlign: align,
popupTransitionName: transitionName,
popupAnimation: animation,
popupVisible: this.state.visible,
afterPopupVisibleChange: this.afterVisibleChange,
popup: this.getMenuElement,
onPopupVisibleChange: this.onVisibleChange,
getPopupContainer: getPopupContainer
}), children);
}
}]);
return Dropdown;
}(Component);
_defineProperty(Dropdown, "propTypes", {
minOverlayWidthMatchTrigger: PropTypes.bool,
onVisibleChange: PropTypes.func,
onOverlayClick: PropTypes.func,
prefixCls: PropTypes.string,
children: PropTypes.any,
transitionName: PropTypes.string,
overlayClassName: PropTypes.string,
animation: PropTypes.any,
align: PropTypes.object,
overlayStyle: PropTypes.object,
placement: PropTypes.string,
overlay: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),
trigger: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),
showAction: PropTypes.array,
hideAction: PropTypes.array,
getPopupContainer: PropTypes.func,
visible: PropTypes.bool,
defaultVisible: PropTypes.bool,
overlayPlacements: PropTypes.object
});
_defineProperty(Dropdown, "defaultProps", {
minOverlayWidthMatchTrigger: true,
prefixCls: 'rc-dropdown',
trigger: ['hover'],
showAction: [],
hideAction: [],
overlayClassName: '',
overlayStyle: {},
defaultVisible: false,
onVisibleChange: function onVisibleChange() {},
placement: 'bottomLeft'
});
export { Dropdown as default };
//# sourceMappingURL=Dropdown.js.map