UNPKG

react-select

Version:

A Select control built with and for ReactJS

111 lines (93 loc) 3.58 kB
'use strict'; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var Option = _react2['default'].createClass({ displayName: 'Option', propTypes: { children: _react2['default'].PropTypes.node, className: _react2['default'].PropTypes.string, // className (based on mouse position) instancePrefix: _react2['default'].PropTypes.string.isRequired, // unique prefix for the ids (used for aria) isDisabled: _react2['default'].PropTypes.bool, // the option is disabled isFocused: _react2['default'].PropTypes.bool, // the option is focused isSelected: _react2['default'].PropTypes.bool, // the option is selected onFocus: _react2['default'].PropTypes.func, // method to handle mouseEnter on option element onSelect: _react2['default'].PropTypes.func, // method to handle click on option element onUnfocus: _react2['default'].PropTypes.func, // method to handle mouseLeave on option element option: _react2['default'].PropTypes.object.isRequired, // object that is base for that option optionIndex: _react2['default'].PropTypes.number }, // index of the option, used to generate unique ids for aria blockEvent: function blockEvent(event) { event.preventDefault(); event.stopPropagation(); if (event.target.tagName !== 'A' || !('href' in event.target)) { return; } if (event.target.target) { window.open(event.target.href, event.target.target); } else { window.location.href = event.target.href; } }, handleMouseDown: function handleMouseDown(event) { event.preventDefault(); event.stopPropagation(); this.props.onSelect(this.props.option, event); }, handleMouseEnter: function handleMouseEnter(event) { this.onFocus(event); }, handleMouseMove: function handleMouseMove(event) { this.onFocus(event); }, handleTouchEnd: function handleTouchEnd(event) { // Check if the view is being dragged, In this case // we don't want to fire the click event (because the user only wants to scroll) if (this.dragging) return; this.handleMouseDown(event); }, handleTouchMove: function handleTouchMove(event) { // Set a flag that the view is being dragged this.dragging = true; }, handleTouchStart: function handleTouchStart(event) { // Set a flag that the view is not being dragged this.dragging = false; }, onFocus: function onFocus(event) { if (!this.props.isFocused) { this.props.onFocus(this.props.option, event); } }, render: function render() { var _props = this.props; var option = _props.option; var instancePrefix = _props.instancePrefix; var optionIndex = _props.optionIndex; var className = (0, _classnames2['default'])(this.props.className, option.className); return option.disabled ? _react2['default'].createElement( 'div', { className: className, onMouseDown: this.blockEvent, onClick: this.blockEvent }, this.props.children ) : _react2['default'].createElement( 'div', { className: className, style: option.style, role: 'option', onMouseDown: this.handleMouseDown, onMouseEnter: this.handleMouseEnter, onMouseMove: this.handleMouseMove, onTouchStart: this.handleTouchStart, onTouchMove: this.handleTouchMove, onTouchEnd: this.handleTouchEnd, id: instancePrefix + '-option-' + optionIndex, title: option.title }, this.props.children ); } }); module.exports = Option;