diff --git a/src/modules/Dropdown/Dropdown.js b/src/modules/Dropdown/Dropdown.js
index e4cd7c628c..c3a39923b5 100644
--- a/src/modules/Dropdown/Dropdown.js
+++ b/src/modules/Dropdown/Dropdown.js
@@ -1,6 +1,7 @@
import _ from 'lodash'
import cx from 'classnames'
import React, { cloneElement, PropTypes } from 'react'
+import { findDOMNode } from 'react-dom'
import META from '../../utils/Meta'
import { customPropTypes, getUnhandledProps, useKeyOnly, useKeyOrValueAndKey } from '../../utils/propUtils'
@@ -460,9 +461,19 @@ export default class Dropdown extends Component {
// open search dropdown on search query
if (search && newQuery && !open) this.open()
+ // resize the search input, temporarily show the sizer so we can measure it
+ let searchWidth
+ if (newQuery) {
+ const sizer = findDOMNode(this.refs.sizer)
+ sizer.style.display = 'inline'
+ searchWidth = Math.ceil(sizer.getBoundingClientRect().width)
+ sizer.style.removeProperty('display')
+ }
+
this.setState({
selectedIndex: 0,
searchQuery: newQuery,
+ searchWidth,
})
}
@@ -667,7 +678,7 @@ export default class Dropdown extends Component {
renderSearchInput = () => {
const { search } = this.props
- const { searchQuery } = this.state
+ const { searchQuery, searchWidth } = this.state
return !search ? null : (
)
}
+ renderSearchSizer = () => {
+ const { search } = this.props
+ const { searchQuery } = this.state
+
+ return !search ? null : {searchQuery}
+ }
+
renderLabels = () => {
debug('renderLabels()')
const { multiple } = this.props
@@ -822,6 +841,7 @@ export default class Dropdown extends Component {
{this.renderHiddenInput()}
{this.renderLabels()}
{this.renderSearchInput()}
+ {this.renderSearchSizer()}
{this.renderText()}
{this.renderMenu()}