UNPKG

zent

Version:

一套前端设计语言和基于React的实现

253 lines (216 loc) 7.34 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); 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 _reactDom = require('react-dom'); var _reactDom2 = _interopRequireDefault(_reactDom); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _noop = require('lodash/noop'); var _noop2 = _interopRequireDefault(_noop); var _Tab = require('./Tab'); var _Tab2 = _interopRequireDefault(_Tab); var _navUtil = require('./navUtil'); var _navUtil2 = _interopRequireDefault(_navUtil); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _ref2 = _react2['default'].createElement( 'span', null, '+' ); var Nav = function (_ref) { (0, _inherits3['default'])(Nav, _ref); function Nav() { (0, _classCallCheck3['default'])(this, Nav); return (0, _possibleConstructorReturn3['default'])(this, (Nav.__proto__ || Object.getPrototypeOf(Nav)).apply(this, arguments)); } (0, _createClass3['default'])(Nav, [{ key: 'componentDidMount', value: function componentDidMount() { this.componentDidUpdate(); } }, { key: 'componentDidUpdate', value: function componentDidUpdate() { // 设置navContent的宽度 this.positionInkBar(); } }, { key: 'positionInkBar', value: function positionInkBar() { var type = this.props.type; if (type === 'slider') { var activeTabDom = _reactDom2['default'].findDOMNode(this.activeTab); if (activeTabDom) { var activeTabInner = activeTabDom.children[0]; var activeTabInnerContentDom = activeTabInner.children[0]; var targetDom = activeTabInnerContentDom || activeTabInner; var tWidth = _navUtil2['default'].getOffsetWH(targetDom); var tLeft = _navUtil2['default'].getOffsetLT(targetDom); var wrapLeft = _navUtil2['default'].getOffsetLT(this.tabwrapDom); if (!activeTabInnerContentDom) { var cssStyle = window.getComputedStyle(activeTabInner); var paddingLeft = window.parseInt(cssStyle.paddingLeft); var paddingRight = window.parseInt(cssStyle.paddingRight); tWidth = tWidth - paddingLeft - paddingRight; wrapLeft -= paddingLeft; } this.inkBarDom.style.width = tWidth + 'px'; this.inkBarDom.style.left = tLeft - wrapLeft + 'px'; } } } }, { key: 'renderTabs', value: function renderTabs() { var _this2 = this; var renderData = _navUtil2['default'].modifyTabListData(this.props); var TabList = []; renderData.forEach(function (renderDataItem) { var refParam = {}; if (renderDataItem.actived) { refParam.ref = function (c) { _this2.activeTab = c; }; } TabList.push(_react2['default'].createElement( _Tab2['default'], (0, _extends3['default'])({ prefix: _this2.props.prefix, onSelected: _this2.onTabSelected.bind(_this2), onDelete: _this2.onTabDel.bind(_this2), uniqueId: _this2.props.uniqueId }, renderDataItem, { id: renderDataItem.key }, refParam), renderDataItem.title )); }); return TabList; } }, { key: 'onTabSelected', value: function onTabSelected(id) { var onChange = this.props.onChange; // change onChange(id); } }, { key: 'onTabDel', value: function onTabDel(id) { var onDelete = this.props.onDelete; onDelete(id); } }, { key: 'onTabAdd', value: function onTabAdd() { var onTabAdd = this.props.onTabAdd; onTabAdd(); } }, { key: 'render', value: function render() { var _this3 = this; var _props = this.props, prefix = _props.prefix, align = _props.align, canadd = _props.canadd, size = _props.size, type = _props.type; var classes = prefix + '-tabs-size-' + size + ' ' + prefix + '-tabs-type-' + type + ' ' + prefix + '-tabs-align-' + align; if (type === 'slider' && size === 'normal') { classes += ' ' + prefix + '-tabs-third-level'; } var addOperation = ''; if (canadd && align !== 'center') { addOperation = _react2['default'].createElement( 'div', { className: prefix + '-tabs-nav-add', onClick: this.onTabAdd.bind(this) }, _ref2 ); } return _react2['default'].createElement( 'div', { className: prefix + '-tabs-nav ' + classes }, _react2['default'].createElement( 'div', { className: prefix + '-tabs-nav-content', ref: function ref(r) { _this3.navContentDom = _reactDom2['default'].findDOMNode(r); } }, addOperation, _react2['default'].createElement( 'div', { className: prefix + '-tabs-scroll' }, _react2['default'].createElement( 'div', { className: prefix + '-tabs-tabwrap', role: 'tablist', ref: function ref(c) { _this3.tabwrapDom = c; } }, _react2['default'].createElement('span', { className: prefix + '-tabs-nav-ink-bar', ref: function ref(c) { _this3.inkBarDom = c; } }), _react2['default'].createElement( 'div', null, this.renderTabs() ) ) ) ) ); } }]); return Nav; }(_react.PureComponent || _react.Component); Nav.propTypes = { prefix: _propTypes2['default'].string, tabListData: _propTypes2['default'].array, onChange: _propTypes2['default'].func, type: _propTypes2['default'].string, align: _propTypes2['default'].string, size: _propTypes2['default'].string, onDelete: _propTypes2['default'].func, onTabAdd: _propTypes2['default'].func, candel: _propTypes2['default'].bool, canadd: _propTypes2['default'].bool, uniqueId: _propTypes2['default'].number }; Nav.defaultProps = { prefix: 'zent', onChange: _noop2['default'], tabListData: [], type: 'normal', align: 'left', size: 'normal', onDelete: _noop2['default'], candel: false, canadd: false, onTabAdd: _noop2['default'], uniqueId: 0 }; exports['default'] = Nav;