choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
270 lines (219 loc) • 9.02 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 _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _noop = _interopRequireDefault(require("lodash/noop"));
var _classnames2 = _interopRequireDefault(require("classnames"));
var _KeyCode = _interopRequireDefault(require("./KeyCode"));
var _TabPane = _interopRequireDefault(require("./TabPane"));
var _utils = require("./utils");
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);
};
}
function getDefaultActiveKey(props) {
var activeKey;
_react.Children.forEach(props.children, function (child, index) {
if (child && !activeKey && !child.props.disabled) {
activeKey = (0, _utils.generateKey)(child.key, index);
}
});
return activeKey;
}
function activeKeyIsValid(props, key) {
var keys = _react.Children.map(props.children, function (child, index) {
return child && (0, _utils.generateKey)(child.key, index);
});
return keys.indexOf(key) >= 0;
}
var Tabs =
/*#__PURE__*/
function (_Component) {
(0, _inherits2["default"])(Tabs, _Component);
var _super = _createSuper(Tabs);
function Tabs(props) {
var _this;
(0, _classCallCheck2["default"])(this, Tabs);
_this = _super.call(this, props);
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onTabClick", function (activeKey) {
if (_this.tabBar.props.onTabClick) {
_this.tabBar.props.onTabClick(activeKey);
}
_this.setActiveKey(activeKey);
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onNavKeyDown", function (e) {
var eventKeyCode = e.keyCode;
if (eventKeyCode === _KeyCode["default"].RIGHT || eventKeyCode === _KeyCode["default"].DOWN) {
e.preventDefault();
var nextKey = _this.getNextActiveKey(true);
_this.onTabClick(nextKey);
} else if (eventKeyCode === _KeyCode["default"].LEFT || eventKeyCode === _KeyCode["default"].UP) {
e.preventDefault();
var previousKey = _this.getNextActiveKey(false);
_this.onTabClick(previousKey);
}
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "setActiveKey", function (activeKey) {
if (_this.state.activeKey !== activeKey) {
if (!('activeKey' in _this.props)) {
_this.setState({
activeKey: activeKey
});
}
_this.props.onChange(activeKey);
}
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getNextActiveKey", function (next) {
var activeKey = _this.state.activeKey;
var children = [];
_react.Children.forEach(_this.props.children, function (c) {
if (c && !c.props.disabled) {
if (next) {
children.push(c);
} else {
children.unshift(c);
}
}
});
var length = children.length;
var ret = length && (0, _utils.generateKey)(children[0].key, 0);
children.forEach(function (child, i) {
if ((0, _utils.generateKey)(child.key, i) === activeKey) {
if (i === length - 1) {
ret = (0, _utils.generateKey)(children[0].key, 0);
} else {
ret = (0, _utils.generateKey)(children[i + 1].key, i + 1);
}
}
});
return ret;
});
var _activeKey;
if ('activeKey' in props) {
_activeKey = props.activeKey;
} else if ('defaultActiveKey' in props) {
_activeKey = props.defaultActiveKey;
} else {
_activeKey = getDefaultActiveKey(props);
}
_this.state = {
activeKey: _activeKey
};
return _this;
}
(0, _createClass2["default"])(Tabs, [{
key: "componentWillReceiveProps",
value: function componentWillReceiveProps(nextProps) {
if ('activeKey' in nextProps) {
this.setState({
activeKey: nextProps.activeKey
});
} else if (!activeKeyIsValid(nextProps, this.state.activeKey)) {
this.setState({
activeKey: getDefaultActiveKey(nextProps)
});
}
}
}, {
key: "render",
value: function render() {
var _classnames;
var props = this.props;
var prefixCls = props.prefixCls,
tabBarPosition = props.tabBarPosition,
className = props.className,
renderTabContent = props.renderTabContent,
renderTabBar = props.renderTabBar,
destroyInactiveTabPane = props.destroyInactiveTabPane,
keyboard = props.keyboard,
restProps = (0, _objectWithoutProperties2["default"])(props, ["prefixCls", "tabBarPosition", "className", "renderTabContent", "renderTabBar", "destroyInactiveTabPane", "keyboard"]);
var cls = (0, _classnames2["default"])((_classnames = {}, (0, _defineProperty2["default"])(_classnames, prefixCls, 1), (0, _defineProperty2["default"])(_classnames, "".concat(prefixCls, "-").concat(tabBarPosition), 1), (0, _defineProperty2["default"])(_classnames, className, !!className), _classnames));
var onKeyDown = keyboard === false ? _noop["default"] : this.onNavKeyDown;
this.tabBar = renderTabBar();
var contents = [(0, _react.cloneElement)(this.tabBar, {
prefixCls: prefixCls,
key: 'tabBar',
onKeyDown: onKeyDown,
tabBarPosition: tabBarPosition,
onTabClick: this.onTabClick,
panels: props.children,
activeKey: this.state.activeKey
}), (0, _react.cloneElement)(renderTabContent(), {
prefixCls: prefixCls,
tabBarPosition: tabBarPosition,
activeKey: this.state.activeKey,
destroyInactiveTabPane: destroyInactiveTabPane,
children: props.children,
onChange: this.setActiveKey,
key: 'tabContent'
})];
if (tabBarPosition === 'bottom') {
contents.reverse();
}
return _react["default"].createElement("div", (0, _extends2["default"])({
className: cls,
style: props.style
}, (0, _utils.getDataAttr)(restProps)), contents);
}
}]);
return Tabs;
}(_react.Component);
exports["default"] = Tabs;
(0, _defineProperty2["default"])(Tabs, "propTypes", {
destroyInactiveTabPane: _propTypes["default"].bool,
renderTabBar: _propTypes["default"].func.isRequired,
renderTabContent: _propTypes["default"].func.isRequired,
onChange: _propTypes["default"].func,
children: _propTypes["default"].any,
prefixCls: _propTypes["default"].string,
className: _propTypes["default"].string,
tabBarPosition: _propTypes["default"].string,
style: _propTypes["default"].object,
activeKey: _propTypes["default"].string,
defaultActiveKey: _propTypes["default"].string,
keyboard: _propTypes["default"].bool
});
(0, _defineProperty2["default"])(Tabs, "defaultProps", {
prefixCls: 'rc-tabs',
destroyInactiveTabPane: false,
onChange: _noop["default"],
keyboard: true,
tabBarPosition: 'top',
style: {}
});
(0, _defineProperty2["default"])(Tabs, "TabPane", _TabPane["default"]);
//# sourceMappingURL=Tabs.js.map