UNPKG

react-typeahead

Version:

React-based typeahead and typeahead-tokenizer

67 lines (55 loc) 1.75 kB
var React = require('react'); var classNames = require('classnames'); var createReactClass = require('create-react-class'); var PropTypes = require('prop-types'); /** * A single option within the TypeaheadSelector */ var TypeaheadOption = createReactClass({ propTypes: { customClasses: PropTypes.object, customValue: PropTypes.string, onClick: PropTypes.func, children: PropTypes.string, hover: PropTypes.bool }, getDefaultProps: function() { return { customClasses: {}, onClick: function(event) { event.preventDefault(); } }; }, render: function() { var classes = {}; classes[this.props.customClasses.hover || "hover"] = !!this.props.hover; classes[this.props.customClasses.listItem] = !!this.props.customClasses.listItem; if (this.props.customValue) { classes[this.props.customClasses.customAdd] = !!this.props.customClasses.customAdd; } var classList = classNames(classes); // For some reason onClick is not fired when clicked on an option // onMouseDown is used here as a workaround of #205 and other // related tickets return ( <li className={classList} onClick={this._onClick} onMouseDown={this._onClick}> <a href="javascript: void 0;" className={this._getClasses()} ref="anchor"> { this.props.children } </a> </li> ); }, _getClasses: function() { var classes = { "typeahead-option": true, }; classes[this.props.customClasses.listAnchor] = !!this.props.customClasses.listAnchor; return classNames(classes); }, _onClick: function(event) { event.preventDefault(); return this.props.onClick(event); } }); module.exports = TypeaheadOption;