zent
Version:
一套前端设计语言和基于React的实现
256 lines (209 loc) • 7.32 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _assign = require('lodash/assign');
var _assign2 = _interopRequireDefault(_assign);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _noop = require('lodash/noop');
var _noop2 = _interopRequireDefault(_noop);
var _TabPanel = require('./components/TabPanel');
var _TabPanel2 = _interopRequireDefault(_TabPanel);
var _LazyMount = require('./components/LazyMount');
var _LazyMount2 = _interopRequireDefault(_LazyMount);
var _Nav = require('./components/Nav');
var _Nav2 = _interopRequireDefault(_Nav);
var _tabUtil = require('./tabUtil');
var _tabUtil2 = _interopRequireDefault(_tabUtil);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var Tabs = function (_ref) {
(0, _inherits3['default'])(Tabs, _ref);
function Tabs(props) {
(0, _classCallCheck3['default'])(this, Tabs);
var _this = (0, _possibleConstructorReturn3['default'])(this, (Tabs.__proto__ || Object.getPrototypeOf(Tabs)).call(this, props));
Tabs.uniqueId++;
return _this;
}
// 选中tab
(0, _createClass3['default'])(Tabs, [{
key: 'onTabChange',
value: function onTabChange(selectKey) {
var onTabChange = this.props.onTabChange;
if (onTabChange) {
onTabChange(selectKey);
}
}
// 删除tab
}, {
key: 'onTabDel',
value: function onTabDel(tabKey) {
var onTabDel = this.props.onTabDel;
if (onTabDel) {
onTabDel(tabKey);
}
}
// 增加tab
}, {
key: 'onTabAdd',
value: function onTabAdd() {
var onTabAdd = this.props.onTabAdd;
if (onTabAdd) {
onTabAdd();
}
}
}, {
key: 'renderNav',
value: function renderNav(tabListData) {
var _props = this.props,
type = _props.type,
align = _props.align,
canadd = _props.canadd,
candel = _props.candel,
prefix = _props.prefix,
size = _props.size;
if (tabListData && tabListData.length) {
return _react2['default'].createElement(_Nav2['default'], {
onChange: this.onTabChange.bind(this),
tabListData: tabListData,
type: type,
align: align,
size: size,
onDelete: this.onTabDel.bind(this),
onTabAdd: this.onTabAdd.bind(this),
canadd: canadd,
candel: candel,
prefix: prefix,
uniqueId: Tabs.uniqueId
});
}
}
}, {
key: 'renderTabPanel',
value: function renderTabPanel(tabListData) {
var prefix = this.props.prefix;
var newChildren = [];
if (tabListData && tabListData.length) {
tabListData.forEach(function (tabItem) {
newChildren.push(_react2['default'].createElement(
_LazyMount2['default'],
{ mountTrigger: tabItem.actived, key: tabItem.key },
_react2['default'].createElement(
_TabPanel2['default'],
{
tab: tabItem.title,
actived: tabItem.actived,
onTabReady: tabItem.onTabReady,
prefix: prefix,
className: tabItem.panelClassName,
id: tabItem.key,
uniqueId: Tabs.uniqueId
},
tabItem.content
)
));
});
return newChildren;
}
return null;
}
}, {
key: 'renderWithPanel',
value: function renderWithPanel() {
var _props2 = this.props,
prefix = _props2.prefix,
className = _props2.className,
children = _props2.children,
activeKey = _props2.activeKey,
activeId = _props2.activeId;
// 向上兼容
// 因为defaultProps里面activeId和activeKey默认值为空,所以不应该用是否是undefined来处理
activeId = activeId === '' ? activeKey : activeId;
var tabListData = _tabUtil2['default'].getTabListData(children, activeId);
return _react2['default'].createElement(
'div',
{ className: prefix + '-tabs ' + className },
this.renderNav(tabListData),
_react2['default'].createElement(
'div',
{ className: prefix + '-tabs-panewrap' },
this.renderTabPanel(tabListData)
)
);
}
}, {
key: 'renderWithoutPanel',
value: function renderWithoutPanel() {
var _props3 = this.props,
tabs = _props3.tabs,
prefix = _props3.prefix,
className = _props3.className,
activeId = _props3.activeId;
return _react2['default'].createElement(
'div',
{ className: prefix + '-tabs ' + className },
this.renderNav(tabs.map(function (tab) {
return (0, _assign2['default'])({}, tab, { actived: tab.key === activeId });
}))
);
}
}, {
key: 'render',
value: function render() {
var tabs = this.props.tabs;
if (tabs) {
return this.renderWithoutPanel();
}
return this.renderWithPanel();
}
}]);
return Tabs;
}(_react.PureComponent || _react.Component);
Tabs.propTypes = {
className: _propTypes2['default'].string,
prefix: _propTypes2['default'].string,
type: _propTypes2['default'].oneOf(['normal', 'card', 'slider']),
activeKey: _propTypes2['default'].oneOfType([_propTypes2['default'].string, _propTypes2['default'].number]),
// 推荐使用activeId代替原来的activeKey
// 更直观
activeId: _propTypes2['default'].oneOfType([_propTypes2['default'].string, _propTypes2['default'].number]),
size: _propTypes2['default'].oneOf(['huge', 'normal']),
align: _propTypes2['default'].oneOf(['left', 'right', 'center']),
onTabChange: _propTypes2['default'].func,
onTabDel: _propTypes2['default'].func,
onTabAdd: _propTypes2['default'].func,
candel: _propTypes2['default'].bool,
canadd: _propTypes2['default'].bool,
tabs: _propTypes2['default'].arrayOf(_propTypes2['default'].shape({
key: _propTypes2['default'].oneOfType([_propTypes2['default'].string, _propTypes2['default'].number]).isRequired,
title: _propTypes2['default'].node.isRequired,
disabled: _propTypes2['default'].bool
}))
};
Tabs.defaultProps = {
prefix: 'zent',
className: '',
type: 'normal',
activeKey: '',
activeId: '',
size: 'normal',
align: 'left',
onTabChange: _noop2['default'],
onTabDel: _noop2['default'],
onTabAdd: _noop2['default'],
candel: false,
canadd: false
};
Tabs.uniqueId = 0;
Tabs.TabPanel = _TabPanel2['default'];
exports['default'] = Tabs;