Skip to content

Commit 131bd61

Browse files
committed
Update to v0.1.5
1 parent 7eb9d62 commit 131bd61

11 files changed

+24272
-24288
lines changed

build/react-bootstrap-typeahead.js

Lines changed: 82 additions & 90 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build/react-bootstrap-typeahead.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build/react-bootstrap-typeahead.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build/react-bootstrap-typeahead.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/index.js

Lines changed: 24102 additions & 24102 deletions
Large diffs are not rendered by default.

lib/Token.react.js

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
'use strict';
22

3+
Object.defineProperty(exports, "__esModule", {
4+
value: true
5+
});
6+
37
var _react = require('react');
48

59
var _react2 = _interopRequireDefault(_react);
@@ -46,11 +50,9 @@ var Token = _react2.default.createClass({
4650
selected: false
4751
};
4852
},
49-
5053
render: function render() {
5154
return this.props.onRemove ? this._renderRemoveableToken() : this._renderToken();
5255
},
53-
5456
_renderRemoveableToken: function _renderRemoveableToken() {
5557
return _react2.default.createElement(
5658
'button',
@@ -71,7 +73,6 @@ var Token = _react2.default.createClass({
7173
)
7274
);
7375
},
74-
7576
_renderToken: function _renderToken() {
7677
var classnames = (0, _classnames2.default)('token', this.props.className);
7778

@@ -89,12 +90,10 @@ var Token = _react2.default.createClass({
8990
this.props.children
9091
);
9192
},
92-
9393
_handleBlur: function _handleBlur(e) {
9494
(0, _reactDom.findDOMNode)(this).blur();
9595
this.setState({ selected: false });
9696
},
97-
9897
_handleKeyDown: function _handleKeyDown(e) {
9998
switch (e.keyCode) {
10099
case _keyCode2.default.BACKSPACE:
@@ -114,15 +113,13 @@ var Token = _react2.default.createClass({
114113
handleClickOutside: function handleClickOutside(e) {
115114
this._handleBlur();
116115
},
117-
118116
_handleRemove: function _handleRemove(e) {
119117
this.props.onRemove && this.props.onRemove();
120118
},
121-
122119
_handleSelect: function _handleSelect(e) {
123120
e.stopPropagation();
124121
this.setState({ selected: true });
125122
}
126123
});
127124

128-
module.exports = Token;
125+
exports.default = Token;

lib/TokenizerInput.react.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
44

5+
Object.defineProperty(exports, "__esModule", {
6+
value: true
7+
});
8+
59
var _reactInputAutosize = require('react-input-autosize');
610

711
var _reactInputAutosize2 = _interopRequireDefault(_reactInputAutosize);
@@ -79,7 +83,6 @@ var TokenizerInput = _react2.default.createClass({
7983
}))
8084
);
8185
},
82-
8386
_renderToken: function _renderToken(option, idx) {
8487
var _props2 = this.props;
8588
var onRemove = _props2.onRemove;
@@ -122,4 +125,4 @@ var TokenizerInput = _react2.default.createClass({
122125
}
123126
});
124127

125-
module.exports = TokenizerInput;
128+
exports.default = TokenizerInput;

lib/Typeahead.react.js

Lines changed: 43 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
'use strict';
22

3+
Object.defineProperty(exports, "__esModule", {
4+
value: true
5+
});
6+
37
var _react = require('react');
48

59
var _react2 = _interopRequireDefault(_react);
@@ -16,14 +20,10 @@ var _TypeaheadMenu = require('./TypeaheadMenu.react');
1620

1721
var _TypeaheadMenu2 = _interopRequireDefault(_TypeaheadMenu);
1822

19-
var _reactDom = require('react-dom');
20-
2123
var _lodash = require('lodash');
2224

2325
var _keyCode = require('./keyCode');
2426

25-
var _keyCode2 = _interopRequireDefault(_keyCode);
26-
2727
var _reactOnclickoutside = require('react-onclickoutside');
2828

2929
var _reactOnclickoutside2 = _interopRequireDefault(_reactOnclickoutside);
@@ -74,20 +74,18 @@ var Typeahead = _react2.default.createClass({
7474
selected: []
7575
};
7676
},
77-
7877
getInitialState: function getInitialState() {
7978
var _props = this.props;
8079
var defaultSelected = _props.defaultSelected;
8180
var selected = _props.selected;
8281

8382
return {
84-
focusedMenuItem: null,
83+
activeIndex: 0,
8584
selected: !(0, _lodash.isEmpty)(defaultSelected) ? defaultSelected : selected,
8685
showMenu: false,
8786
text: ''
8887
};
8988
},
90-
9189
componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
9290
if (!(0, _lodash.isEqual)(this.props.selected, nextProps.selected)) {
9391
// If new selections are passed in via props, treat the component as a
@@ -99,13 +97,13 @@ var Typeahead = _react2.default.createClass({
9997
this.setState({ text: '' });
10098
}
10199
},
102-
103100
render: function render() {
104101
var _props2 = this.props;
105102
var labelKey = _props2.labelKey;
106103
var multiple = _props2.multiple;
107104
var options = _props2.options;
108105
var _state = this.state;
106+
var activeIndex = _state.activeIndex;
109107
var selected = _state.selected;
110108
var text = _state.text;
111109

@@ -116,16 +114,15 @@ var Typeahead = _react2.default.createClass({
116114
return !(option[labelKey].toLowerCase().indexOf(text.toLowerCase()) === -1 || multiple && (0, _lodash.find)(selected, option));
117115
});
118116

119-
var menu;
117+
var menu = undefined;
120118
if (this.state.showMenu) {
121119
menu = _react2.default.createElement(_TypeaheadMenu2.default, {
120+
activeIndex: activeIndex,
122121
emptyLabel: this.props.emptyLabel,
123122
labelKey: labelKey,
124123
maxHeight: this.props.maxHeight,
125124
onClick: this._handleAddOption,
126-
onKeyDown: this._handleKeydown,
127-
options: filteredOptions,
128-
ref: 'menu'
125+
options: filteredOptions
129126
});
130127
}
131128

@@ -148,7 +145,7 @@ var Typeahead = _react2.default.createClass({
148145
onAdd: this._handleAddOption,
149146
onChange: this._handleTextChange,
150147
onFocus: this._handleFocus,
151-
onKeyDown: this._handleKeydown,
148+
onKeyDown: this._handleKeydown.bind(null, filteredOptions),
152149
onRemove: this._handleRemoveOption,
153150
placeholder: this.props.placeholder,
154151
ref: 'input',
@@ -158,87 +155,64 @@ var Typeahead = _react2.default.createClass({
158155
menu
159156
);
160157
},
161-
162158
_handleFocus: function _handleFocus() {
163159
this.setState({ showMenu: true });
164160
},
165-
166161
_handleTextChange: function _handleTextChange(e) {
167162
this.setState({
163+
activeIndex: 0,
168164
showMenu: true,
169165
text: e.target.value
170166
});
171167
},
172-
173-
_handleKeydown: function _handleKeydown(e) {
174-
var focusedMenuItem = (0, _lodash.clone)(this.state.focusedMenuItem);
168+
_handleKeydown: function _handleKeydown(options, e) {
169+
var activeIndex = this.state.activeIndex;
175170

176171
switch (e.keyCode) {
177-
case _keyCode2.default.UP:
178-
case _keyCode2.default.DOWN:
179-
case _keyCode2.default.TAB:
180-
// Prevent page from scrolling when pressing up or down.
172+
case _keyCode.BACKSPACE:
173+
// Don't let the browser go back.
174+
e.stopPropagation();
175+
break;
176+
case _keyCode.UP:
177+
// Prevent page from scrolling.
181178
e.preventDefault();
182179

183-
// Look for the menu. It won't be there if there are no results.
184-
var menu = this.refs.menu && (0, _reactDom.findDOMNode)(this.refs.menu);
185-
if (!menu) {
186-
return;
187-
}
188-
189-
if (e.keyCode === _keyCode2.default.UP) {
190-
if (!focusedMenuItem) {
191-
// The input is focused and the user pressed the down key; select
192-
// the first menu item.
193-
focusedMenuItem = menu.lastChild;
194-
} else {
195-
focusedMenuItem = focusedMenuItem.previousSibling || null;
196-
}
197-
} else {
198-
// keyCode.DOWN
199-
if (!focusedMenuItem) {
200-
// The input is focused and the user pressed the down key; select
201-
// the first menu item.
202-
focusedMenuItem = menu.firstChild;
203-
} else {
204-
focusedMenuItem = focusedMenuItem.nextSibling || null;
205-
}
180+
activeIndex--;
181+
if (activeIndex < 0) {
182+
activeIndex = options.length - 1;
206183
}
184+
this.setState({ activeIndex: activeIndex });
185+
break;
186+
case _keyCode.DOWN:
187+
case _keyCode.TAB:
188+
// Prevent page from scrolling.
189+
e.preventDefault();
207190

208-
if (focusedMenuItem) {
209-
// Select the link in the menu item.
210-
focusedMenuItem.firstChild.focus();
211-
} else {
212-
// If there's no focused item, it means we're at the beginning or the
213-
// end of the menu. Focus the input.
214-
(0, _reactDom.findDOMNode)(this.refs.input).focus();
191+
activeIndex++;
192+
if (activeIndex === options.length) {
193+
activeIndex = 0;
215194
}
216-
217-
this.setState({ focusedMenuItem: focusedMenuItem });
195+
this.setState({ activeIndex: activeIndex });
218196
break;
219-
case _keyCode2.default.ESC:
197+
case _keyCode.ESC:
220198
// Prevent things like unintentionally closing dialogs.
221199
e.stopPropagation();
222200
this._hideDropdown();
223201
break;
224-
case _keyCode2.default.RETURN:
225-
if (focusedMenuItem) {
226-
// Simulate clicking on the anchor.
227-
focusedMenuItem.firstChild.click();
228-
this._hideDropdown();
229-
}
202+
case _keyCode.RETURN:
203+
var selected = options[activeIndex];
204+
selected && this._handleAddOption(selected);
230205
break;
231206
}
232207
},
233-
234208
_handleAddOption: function _handleAddOption(selectedOption) {
235209
var _props3 = this.props;
236210
var multiple = _props3.multiple;
237211
var labelKey = _props3.labelKey;
238212
var onChange = _props3.onChange;
239213

240-
var selected;
241-
var text;
214+
var selected = undefined;
215+
var text = undefined;
242216

243217
if (multiple) {
244218
// If multiple selections are allowed, add the new selection to the
@@ -253,21 +227,22 @@ var Typeahead = _react2.default.createClass({
253227
}
254228

255229
this.setState({
230+
activeIndex: 0,
256231
selected: selected,
257232
showMenu: false,
258233
text: text
259234
});
260235

261236
onChange && onChange(selected);
262237
},
263-
264238
_handleRemoveOption: function _handleRemoveOption(removedOption) {
265239
var selected = this.state.selected.slice();
266240
selected = selected.filter(function (option) {
267241
return !(0, _lodash.isEqual)(option, removedOption);
268242
});
269243

270244
this.setState({
245+
activeIndex: 0,
271246
selected: selected,
272247
showMenu: false
273248
});
@@ -281,13 +256,12 @@ var Typeahead = _react2.default.createClass({
281256
handleClickOutside: function handleClickOutside(e) {
282257
this._hideDropdown();
283258
},
284-
285259
_hideDropdown: function _hideDropdown() {
286260
this.setState({
287-
showMenu: false,
288-
focusedMenuItem: null
261+
activeIndex: 0,
262+
showMenu: false
289263
});
290264
}
291265
});
292266

293-
module.exports = Typeahead;
267+
exports.default = Typeahead;

lib/TypeaheadInput.react.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
44

5+
Object.defineProperty(exports, "__esModule", {
6+
value: true
7+
});
8+
59
var _react = require('react');
610

711
var _react2 = _interopRequireDefault(_react);
@@ -82,7 +86,6 @@ var TypeaheadInput = _react2.default.createClass({
8286
})
8387
);
8488
},
85-
8689
_getInputValue: function _getInputValue() {
8790
var _props = this.props;
8891
var labelKey = _props.labelKey;
@@ -91,7 +94,6 @@ var TypeaheadInput = _react2.default.createClass({
9194

9295
return selected ? selected[labelKey] : text;
9396
},
94-
9597
_getHintText: function _getHintText() {
9698
var _props2 = this.props;
9799
var filteredOptions = _props2.filteredOptions;
@@ -152,4 +154,4 @@ var TypeaheadInput = _react2.default.createClass({
152154
}
153155
});
154156

155-
module.exports = TypeaheadInput;
157+
exports.default = TypeaheadInput;

0 commit comments

Comments
 (0)