UNPKG

4.42 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _extends2 = require('babel-runtime/helpers/extends');
8
9var _extends3 = _interopRequireDefault(_extends2);
10
11var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
12
13var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
14
15var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
16
17var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
18
19var _createClass2 = require('babel-runtime/helpers/createClass');
20
21var _createClass3 = _interopRequireDefault(_createClass2);
22
23var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
24
25var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
26
27var _inherits2 = require('babel-runtime/helpers/inherits');
28
29var _inherits3 = _interopRequireDefault(_inherits2);
30
31var _react = require('react');
32
33var _react2 = _interopRequireDefault(_react);
34
35var _propTypes = require('prop-types');
36
37var _propTypes2 = _interopRequireDefault(_propTypes);
38
39var _substyle = require('substyle');
40
41var _omit = require('lodash/omit');
42
43var _omit2 = _interopRequireDefault(_omit);
44
45var _keys = require('lodash/keys');
46
47var _keys2 = _interopRequireDefault(_keys);
48
49function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
50
51var Suggestion = function (_Component) {
52 (0, _inherits3.default)(Suggestion, _Component);
53
54 function Suggestion() {
55 (0, _classCallCheck3.default)(this, Suggestion);
56 return (0, _possibleConstructorReturn3.default)(this, (Suggestion.__proto__ || (0, _getPrototypeOf2.default)(Suggestion)).apply(this, arguments));
57 }
58
59 (0, _createClass3.default)(Suggestion, [{
60 key: 'render',
61 value: function render() {
62 var rest = (0, _omit2.default)(this.props, 'style', (0, _keys2.default)(Suggestion.propTypes));
63
64 return _react2.default.createElement(
65 'li',
66 (0, _extends3.default)({}, rest, this.props.style),
67 this.renderContent()
68 );
69 }
70 }, {
71 key: 'renderContent',
72 value: function renderContent() {
73 var _props = this.props,
74 id = _props.id,
75 query = _props.query,
76 descriptor = _props.descriptor,
77 suggestion = _props.suggestion,
78 index = _props.index;
79
80
81 var display = this.getDisplay();
82 var highlightedDisplay = this.renderHighlightedDisplay(display, query);
83
84 if (descriptor.props.renderSuggestion) {
85 return descriptor.props.renderSuggestion(suggestion, query, highlightedDisplay, index);
86 }
87
88 return highlightedDisplay;
89 }
90 }, {
91 key: 'getDisplay',
92 value: function getDisplay() {
93 var suggestion = this.props.suggestion;
94
95
96 if (suggestion instanceof String) {
97 return suggestion;
98 }
99
100 var id = suggestion.id,
101 display = suggestion.display;
102
103
104 if (!id || !display) {
105 return id;
106 }
107
108 return display;
109 }
110 }, {
111 key: 'renderHighlightedDisplay',
112 value: function renderHighlightedDisplay(display) {
113 var _props2 = this.props,
114 query = _props2.query,
115 style = _props2.style;
116
117
118 var i = display.toLowerCase().indexOf(query.toLowerCase());
119
120 if (i === -1) {
121 return _react2.default.createElement(
122 'span',
123 style("display"),
124 display
125 );
126 }
127
128 return _react2.default.createElement(
129 'span',
130 style("display"),
131 display.substring(0, i),
132 _react2.default.createElement(
133 'b',
134 style("highlight"),
135 display.substring(i, i + query.length)
136 ),
137 display.substring(i + query.length)
138 );
139 }
140 }]);
141 return Suggestion;
142}(_react.Component);
143
144Suggestion.propTypes = {
145 id: _propTypes2.default.string.isRequired,
146 query: _propTypes2.default.string.isRequired,
147 index: _propTypes2.default.number.isRequired,
148
149 suggestion: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.shape({
150 id: _propTypes2.default.string.isRequired,
151 display: _propTypes2.default.string
152 })]).isRequired,
153 descriptor: _propTypes2.default.object.isRequired,
154
155 focused: _propTypes2.default.bool
156};
157
158
159var styled = (0, _substyle.defaultStyle)({
160 cursor: "pointer"
161}, function (props) {
162 return { "&focused": props.focused };
163});
164
165exports.default = styled(Suggestion);
\No newline at end of file