UNPKG

react-typeahead

Version:

React-based typeahead and typeahead-tokenizer

69 lines (58 loc) 1.83 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({ displayName: 'TypeaheadOption', 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 React.createElement( 'li', { className: classList, onClick: this._onClick, onMouseDown: this._onClick }, React.createElement( 'a', { href: 'javascript: void 0;', className: this._getClasses(), ref: 'anchor' }, this.props.children ) ); }, _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;