'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); var _defineProperty3 = _interopRequireDefault(_defineProperty2); 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 _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _classnames2 = require('classnames'); var _classnames3 = _interopRequireDefault(_classnames2); var _utils = require('./utils'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _componentDidUpdate(component, init) { var _component$props = component.props, styles = _component$props.styles, panels = _component$props.panels, activeKey = _component$props.activeKey, direction = _component$props.direction; var rootNode = component.props.getRef('root'); var wrapNode = component.props.getRef('nav') || rootNode; var inkBarNode = component.props.getRef('inkBar'); var activeTab = component.props.getRef('activeTab'); var inkBarNodeStyle = inkBarNode.style; var tabBarPosition = component.props.tabBarPosition; var activeIndex = (0, _utils.getActiveIndex)(panels, activeKey); if (init) { // prevent mount animation inkBarNodeStyle.display = 'none'; } if (activeTab) { var tabNode = activeTab; var transformSupported = (0, _utils.isTransform3dSupported)(inkBarNodeStyle); // Reset current style (0, _utils.setTransform)(inkBarNodeStyle, ''); inkBarNodeStyle.width = ''; inkBarNodeStyle.height = ''; inkBarNodeStyle.left = ''; inkBarNodeStyle.top = ''; inkBarNodeStyle.bottom = ''; inkBarNodeStyle.right = ''; if (tabBarPosition === 'top' || tabBarPosition === 'bottom') { var left = (0, _utils.getLeft)(tabNode, wrapNode); var width = tabNode.offsetWidth; // If tabNode'width width equal to wrapNode'width when tabBarPosition is top or bottom // It means no css working, then ink bar should not have width until css is loaded // Fix https://github.com/ant-design/ant-design/issues/7564 if (width === rootNode.offsetWidth) { width = 0; } else if (styles.inkBar && styles.inkBar.width !== undefined) { width = parseFloat(styles.inkBar.width, 10); if (width) { left += (tabNode.offsetWidth - width) / 2; } } if (direction === 'rtl') { left = (0, _utils.getStyle)(tabNode, 'margin-left') - left; } // use 3d gpu to optimize render if (transformSupported) { (0, _utils.setTransform)(inkBarNodeStyle, 'translate3d(' + left + 'px,0,0)'); } else { inkBarNodeStyle.left = left + 'px'; } inkBarNodeStyle.width = width + 'px'; } else { var top = (0, _utils.getTop)(tabNode, wrapNode, true); var height = tabNode.offsetHeight; if (styles.inkBar && styles.inkBar.height !== undefined) { height = parseFloat(styles.inkBar.height, 10); if (height) { top += (tabNode.offsetHeight - height) / 2; } } if (transformSupported) { (0, _utils.setTransform)(inkBarNodeStyle, 'translate3d(0,' + top + 'px,0)'); inkBarNodeStyle.top = '0'; } else { inkBarNodeStyle.top = top + 'px'; } inkBarNodeStyle.height = height + 'px'; } } inkBarNodeStyle.display = activeIndex !== -1 ? 'block' : 'none'; } var InkTabBarNode = function (_React$Component) { (0, _inherits3['default'])(InkTabBarNode, _React$Component); function InkTabBarNode() { (0, _classCallCheck3['default'])(this, InkTabBarNode); return (0, _possibleConstructorReturn3['default'])(this, (InkTabBarNode.__proto__ || Object.getPrototypeOf(InkTabBarNode)).apply(this, arguments)); } (0, _createClass3['default'])(InkTabBarNode, [{ key: 'componentDidMount', value: function componentDidMount() { var _this2 = this; // ref https://github.com/ant-design/ant-design/issues/8678 // ref https://github.com/react-component/tabs/issues/135 // InkTabBarNode need parent/root ref for calculating position // since parent componentDidMount triggered after child componentDidMount // we're doing a quick fix here to use setTimeout to calculate position // after parent/root component mounted this.timeout = setTimeout(function () { _componentDidUpdate(_this2, true); }, 0); } }, { key: 'componentDidUpdate', value: function componentDidUpdate() { _componentDidUpdate(this); } }, { key: 'componentWillUnmount', value: function componentWillUnmount() { clearTimeout(this.timeout); } }, { key: 'render', value: function render() { var _classnames; var _props = this.props, prefixCls = _props.prefixCls, styles = _props.styles, inkBarAnimated = _props.inkBarAnimated; var className = prefixCls + '-ink-bar'; var classes = (0, _classnames3['default'])((_classnames = {}, (0, _defineProperty3['default'])(_classnames, className, true), (0, _defineProperty3['default'])(_classnames, inkBarAnimated ? className + '-animated' : className + '-no-animated', true), _classnames)); return _react2['default'].createElement('div', { style: styles.inkBar, className: classes, key: 'inkBar', ref: this.props.saveRef('inkBar') }); } }]); return InkTabBarNode; }(_react2['default'].Component); exports['default'] = InkTabBarNode; InkTabBarNode.propTypes = { prefixCls: _propTypes2['default'].string, styles: _propTypes2['default'].object, inkBarAnimated: _propTypes2['default'].bool, saveRef: _propTypes2['default'].func, direction: _propTypes2['default'].string }; InkTabBarNode.defaultProps = { prefixCls: '', inkBarAnimated: true, styles: {}, saveRef: function saveRef() {} }; module.exports = exports['default'];