UNPKG

ssc-refer

Version:
101 lines (75 loc) 3.4 kB
'use strict'; exports.__esModule = true; var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties'); var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _reactDom = require('react-dom'); var _getDisplayName = require('../refer/utils/getDisplayName'); var _getDisplayName2 = _interopRequireDefault(_getDisplayName); var _scrollIntoViewIfNeeded = require('../refer/utils/scrollIntoViewIfNeeded'); var _scrollIntoViewIfNeeded2 = _interopRequireDefault(_scrollIntoViewIfNeeded); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var renderContainer = function renderContainer(Component) { return _react2['default'].createClass({ displayName: 'renderContainer(' + (0, _getDisplayName2['default'])(Component) + ')', propTypes: { option: _react.PropTypes.oneOfType([_react.PropTypes.object, _react.PropTypes.string]).isRequired, position: _react.PropTypes.number }, contextTypes: { activeIndex: _react.PropTypes.number.isRequired, onActiveItemChange: _react.PropTypes.func.isRequired, onInitialItemChange: _react.PropTypes.func.isRequired, onMenuItemClick: _react.PropTypes.func.isRequired }, componentWillMount: function componentWillMount() { this._updateInitialItem(this.props); }, componentWillReceiveProps: function componentWillReceiveProps(nextProps, nextContext) { var currentlyActive = this.context.activeIndex === this.props.position; var option = nextProps.option, position = nextProps.position; var activeIndex = nextContext.activeIndex, onActiveItemChange = nextContext.onActiveItemChange; if (position == null) { return; } // The item will become active. if (activeIndex === position) { // Ensures that if the menu items exceed the bounds of the menu, the // menu will scroll up or down as the user hits the arrow keys. (0, _scrollIntoViewIfNeeded2['default'])((0, _reactDom.findDOMNode)(this)); // Fire the change handler when the menu item becomes active. !currentlyActive && onActiveItemChange(option); } this._updateInitialItem(nextProps); }, render: function render() { var _context = this.context, activeIndex = _context.activeIndex, onMenuItemClick = _context.onMenuItemClick; var _props = this.props, option = _props.option, position = _props.position, props = (0, _objectWithoutProperties3['default'])(_props, ['option', 'position']); return _react2['default'].createElement(Component, (0, _extends3['default'])({}, props, { active: activeIndex === position, onClick: function onClick() { return onMenuItemClick(option); } })); }, _updateInitialItem: function _updateInitialItem(props) { var option = props.option, position = props.position; if (position === 0) { this.context.onInitialItemChange(option); } } }); }; exports['default'] = renderContainer; module.exports = exports['default'];