react-typeahead
Version:
React-based typeahead and typeahead-tokenizer
69 lines (58 loc) • 1.83 kB
JavaScript
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;