diff --git a/dist/react-select.js b/dist/react-select.js index 0621bdea55..c4a59600e4 100644 --- a/dist/react-select.js +++ b/dist/react-select.js @@ -2,11 +2,23 @@ (function (global){ 'use strict'; +Object.defineProperty(exports, '__esModule', { + value: true +}); + 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; }; +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + +var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + +function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var _react = (typeof window !== "undefined" ? window['React'] : typeof global !== "undefined" ? global['React'] : null); @@ -20,187 +32,177 @@ var _utilsStripDiacritics = require('./utils/stripDiacritics'); var _utilsStripDiacritics2 = _interopRequireDefault(_utilsStripDiacritics); -var requestId = 0; - -function initCache(cache) { - if (cache && typeof cache !== 'object') { - cache = {}; - } - return cache ? cache : null; -} - -function updateCache(cache, input, data) { - if (!cache) return; - cache[input] = data; -} +var propTypes = { + autoload: _react2['default'].PropTypes.bool.isRequired, // automatically call the `loadOptions` prop on-mount; defaults to true + cache: _react2['default'].PropTypes.any, // object to use to cache results; set to null/false to disable caching + children: _react2['default'].PropTypes.func.isRequired, // Child function responsible for creating the inner Select component; (props: Object): PropTypes.element + ignoreAccents: _react2['default'].PropTypes.bool, // strip diacritics when filtering; defaults to true + ignoreCase: _react2['default'].PropTypes.bool, // perform case-insensitive filtering; defaults to true + loadingPlaceholder: _react.PropTypes.string.isRequired, // replaces the placeholder while options are loading + loadOptions: _react2['default'].PropTypes.func.isRequired, // callback to load options asynchronously; (inputValue: string, callback: Function): ?Promise + options: _react.PropTypes.array.isRequired, // array of options + placeholder: _react2['default'].PropTypes.oneOfType([// field placeholder, displayed when there's no value (shared with Select) + _react2['default'].PropTypes.string, _react2['default'].PropTypes.node]), + searchPromptText: _react2['default'].PropTypes.oneOfType([// label to prompt for search input + _react2['default'].PropTypes.string, _react2['default'].PropTypes.node]) +}; -function getFromCache(cache, input) { - if (!cache) return; - for (var i = input.length; i >= 0; --i) { - var cacheKey = input.slice(0, i); - if (cache[cacheKey] && (input === cacheKey || cache[cacheKey].complete)) { - return cache[cacheKey]; - } - } -} +var defaultProps = { + autoload: true, + cache: {}, + children: defaultChildren, + ignoreAccents: true, + ignoreCase: true, + loadingPlaceholder: 'Loading...', + options: [], + searchPromptText: 'Type to search' +}; -function thenPromise(promise, callback) { - if (!promise || typeof promise.then !== 'function') return; - return promise.then(function (data) { - callback(null, data); - }, function (err) { - callback(err); - }); -} +var Async = (function (_Component) { + _inherits(Async, _Component); -var stringOrNode = _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.string, _react2['default'].PropTypes.node]); + function Async(props, context) { + _classCallCheck(this, Async); -var Async = _react2['default'].createClass({ - displayName: 'Async', + _get(Object.getPrototypeOf(Async.prototype), 'constructor', this).call(this, props, context); - propTypes: { - cache: _react2['default'].PropTypes.any, // object to use to cache results, can be null to disable cache - children: _react2['default'].PropTypes.func, // Child function responsible for creating the inner Select component; (props: Object): PropTypes.element - ignoreAccents: _react2['default'].PropTypes.bool, // whether to strip diacritics when filtering (shared with Select) - ignoreCase: _react2['default'].PropTypes.bool, // whether to perform case-insensitive filtering (shared with Select) - isLoading: _react2['default'].PropTypes.bool, // overrides the isLoading state when set to true - loadOptions: _react2['default'].PropTypes.func.isRequired, // function to call to load options asynchronously - loadingPlaceholder: _react2['default'].PropTypes.string, // replaces the placeholder while options are loading - minimumInput: _react2['default'].PropTypes.number, // the minimum number of characters that trigger loadOptions - noResultsText: stringOrNode, // placeholder displayed when there are no matching search results (shared with Select) - onInputChange: _react2['default'].PropTypes.func, // onInputChange handler: function (inputValue) {} - placeholder: stringOrNode, // field placeholder, displayed when there's no value (shared with Select) - searchPromptText: stringOrNode, // label to prompt for search input - searchingText: _react2['default'].PropTypes.string }, - // message to display while options are loading - getDefaultProps: function getDefaultProps() { - return { - cache: true, - ignoreAccents: true, - ignoreCase: true, - loadingPlaceholder: 'Loading...', - minimumInput: 0, - searchingText: 'Searching...', - searchPromptText: 'Type to search' - }; - }, - getInitialState: function getInitialState() { - return { - cache: initCache(this.props.cache), + this.state = { isLoading: false, - options: [] + options: props.options }; - }, - componentWillMount: function componentWillMount() { - this._lastInput = ''; - }, - componentDidMount: function componentDidMount() { - this.loadOptions(''); - }, - componentWillReceiveProps: function componentWillReceiveProps(nextProps) { - if (nextProps.cache !== this.props.cache) { - this.setState({ - cache: initCache(nextProps.cache) - }); - } - }, - focus: function focus() { - this.select.focus(); - }, - resetState: function resetState() { - this._currentRequestId = -1; - this.setState({ - isLoading: false, - options: [] - }); - }, - getResponseHandler: function getResponseHandler(input) { - var _this = this; - var _requestId = this._currentRequestId = requestId++; - return function (err, data) { - if (err) throw err; - if (!_this.isMounted()) return; - updateCache(_this.state.cache, input, data); - if (_requestId !== _this._currentRequestId) return; - _this.setState({ - isLoading: false, - options: data && data.options || [] - }); - }; - }, - loadOptions: function loadOptions(input) { - if (this.props.onInputChange) { - var nextState = this.props.onInputChange(input); - // Note: != used deliberately here to catch undefined and null - if (nextState != null) { - input = '' + nextState; + this._onInputChange = this._onInputChange.bind(this); + } + + _createClass(Async, [{ + key: 'componentDidMount', + value: function componentDidMount() { + var autoload = this.props.autoload; + + if (autoload) { + this.loadOptions(''); } } - if (this.props.ignoreAccents) input = (0, _utilsStripDiacritics2['default'])(input); - if (this.props.ignoreCase) input = input.toLowerCase(); + }, { + key: 'componentWillUpdate', + value: function componentWillUpdate(nextProps, nextState) { + var _this = this; - this._lastInput = input; - if (input.length < this.props.minimumInput) { - return this.resetState(); - } - var cacheResult = getFromCache(this.state.cache, input); - if (cacheResult && Array.isArray(cacheResult.options)) { - return this.setState({ - options: cacheResult.options + var propertiesToSync = ['options']; + propertiesToSync.forEach(function (prop) { + if (_this.props[prop] !== nextProps[prop]) { + _this.setState(_defineProperty({}, prop, nextProps[prop])); + } }); } - this.setState({ - isLoading: true - }); - var responseHandler = this.getResponseHandler(input); - var inputPromise = thenPromise(this.props.loadOptions(input, responseHandler), responseHandler); - return inputPromise ? inputPromise.then(function () { - return input; - }) : input; - }, - render: function render() { - var _this2 = this; + }, { + key: 'loadOptions', + value: function loadOptions(inputValue) { + var _this2 = this; - var _props = this.props; - var _props$children = _props.children; - var children = _props$children === undefined ? defaultChildren : _props$children; - var noResultsText = _props.noResultsText; + var _props = this.props; + var cache = _props.cache; + var loadOptions = _props.loadOptions; + + if (cache && cache.hasOwnProperty(inputValue)) { + this.setState({ + options: cache[inputValue] + }); + + return; + } + + var callback = function callback(error, data) { + if (callback === _this2._callback) { + _this2._callback = null; + + var options = data && data.options || []; + + if (cache) { + cache[inputValue] = options; + } - var restProps = _objectWithoutProperties(_props, ['children', 'noResultsText']); + _this2.setState({ + isLoading: false, + options: options + }); + } + }; + + // Ignore all but the most recent request + this._callback = callback; - var _state = this.state; - var isLoading = _state.isLoading; - var options = _state.options; + var promise = loadOptions(inputValue, callback); + if (promise) { + promise.then(function (data) { + return callback(null, data); + }, function (error) { + return callback(error); + }); + } + + if (this._callback && !this.state.isLoading) { + this.setState({ + isLoading: true + }); + } - if (this.props.isLoading) isLoading = true; - var placeholder = isLoading ? this.props.loadingPlaceholder : this.props.placeholder; - if (isLoading) { - noResultsText = this.props.searchingText; - } else if (!options.length && this._lastInput.length < this.props.minimumInput) { - noResultsText = this.props.searchPromptText; + return inputValue; } + }, { + key: '_onInputChange', + value: function _onInputChange(inputValue) { + var _props2 = this.props; + var ignoreAccents = _props2.ignoreAccents; + var ignoreCase = _props2.ignoreCase; - var props = _extends({}, restProps, { - isLoading: isLoading, - noResultsText: noResultsText, - onInputChange: this.loadOptions, - options: options, - placeholder: placeholder, - ref: function ref(_ref) { - _this2.select = _ref; + if (ignoreAccents) { + inputValue = (0, _utilsStripDiacritics2['default'])(inputValue); } - }); - return children(props); - } -}); + if (ignoreCase) { + inputValue = inputValue.toLowerCase(); + } + + return this.loadOptions(inputValue); + } + }, { + key: 'render', + value: function render() { + var _props3 = this.props; + var children = _props3.children; + var loadingPlaceholder = _props3.loadingPlaceholder; + var placeholder = _props3.placeholder; + var searchPromptText = _props3.searchPromptText; + var _state = this.state; + var isLoading = _state.isLoading; + var options = _state.options; + + var props = { + noResultsText: isLoading ? loadingPlaceholder : searchPromptText, + placeholder: isLoading ? loadingPlaceholder : placeholder, + options: isLoading ? [] : options + }; + + return children(_extends({}, this.props, props, { + isLoading: isLoading, + onInputChange: this._onInputChange + })); + } + }]); + + return Async; +})(_react.Component); + +exports['default'] = Async; + +Async.propTypes = propTypes; +Async.defaultProps = defaultProps; function defaultChildren(props) { return _react2['default'].createElement(_Select2['default'], props); }; - -module.exports = Async; +module.exports = exports['default']; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{"./Select":5,"./utils/stripDiacritics":10}],2:[function(require,module,exports){ @@ -237,10 +239,6 @@ var AsyncCreatable = _react2['default'].createClass({ onInputChange: function (input) { creatableProps.onInputChange(input); return asyncProps.onInputChange(input); - }, - ref: function (ref) { - creatableProps.ref(ref); - asyncProps.ref(ref); } })); } diff --git a/dist/react-select.min.js b/dist/react-select.min.js index cca9ef6992..6e7e8ee34e 100644 --- a/dist/react-select.min.js +++ b/dist/react-select.min.js @@ -1,2 +1,2 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Select=e()}}(function(){return function e(t,u,n){function s(i,a){if(!u[i]){if(!t[i]){var r="function"==typeof require&&require;if(!a&&r)return r(i,!0);if(o)return o(i,!0);var l=new Error("Cannot find module '"+i+"'");throw l.code="MODULE_NOT_FOUND",l}var p=u[i]={exports:{}};t[i][0].call(p.exports,function(e){var u=t[i][1][e];return s(u?u:e)},p,p.exports,e,t,u,n)}return u[i].exports}for(var o="function"==typeof require&&require,i=0;i=0||Object.prototype.hasOwnProperty.call(e,n)&&(u[n]=e[n]);return u}function o(e){return e&&"object"!=typeof e&&(e={}),e?e:null}function i(e,t,u){e&&(e[t]=u)}function a(e,t){if(e)for(var u=t.length;u>=0;--u){var n=t.slice(0,u);if(e[n]&&(t===n||e[n].complete))return e[n]}}function r(e,t){if(e&&"function"==typeof e.then)return e.then(function(e){t(null,e)},function(e){t(e)})}function l(e){return c["default"].createElement(h["default"],e)}var p=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,n)&&(u[n]=e[n]);return u}function o(e){return f["default"].createElement(E["default"],e)}function i(e){var t=e.option,u=e.options,n=e.labelKey,s=e.valueKey;return 0===u.filter(function(e){return e[n]===t[n]||e[s]===t[s]}).length}function a(e){var t=e.label;return!!t}function r(e){var t=e.label,u=e.labelKey,n=e.valueKey,s={};return s[n]=t,s[u]=t,s.className="Select-create-option-placeholder",s}function l(e){return'Create option "'+e+'"'}function p(e){var t=e.keyCode;switch(t){case 9:case 13:case 188:return!0}return!1}var d=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,n)&&(u[n]=e[n]);return u}function i(e,t,u){return t in e?Object.defineProperty(e,t,{value:u,enumerable:!0,configurable:!0,writable:!0}):e[t]=u,e}function a(e){var t=typeof e;return"string"===t?e:"object"===t?JSON.stringify(e):"number"===t||"boolean"===t?String(e):""}Object.defineProperty(u,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=1;ta.bottom||i.topt.offsetHeight&&!(t.scrollHeight-t.offsetHeight-t.scrollTop)&&this.props.onMenuScrollToBottom()}},handleRequired:function(e,t){return!e||(t?0===e.length:0===Object.keys(e).length)},getOptionLabel:function(e){return e[this.props.labelKey]},getValueArray:function(e,t){var u=this,n="object"==typeof t?t:this.props;if(n.multi){if("string"==typeof e&&(e=e.split(n.delimiter)),!Array.isArray(e)){if(null===e||void 0===e)return[];e=[e]}return e.map(function(e){return u.expandValue(e,n)}).filter(function(e){return e})}var s=this.expandValue(e,n);return s?[s]:[]},expandValue:function(e,t){var u=typeof e;if("string"!==u&&"number"!==u&&"boolean"!==u)return e;var n=t.options,s=t.valueKey;if(n)for(var o=0;o0?u-=1:u=t.length-1;else if("start"===e)u=0;else if("end"===e)u=t.length-1;else if("page_up"===e){var s=u-this.props.pageSize;u=s<0?0:s}else if("page_down"===e){var s=u+this.props.pageSize;u=s>t.length-1?t.length-1:s}u===-1&&(u=0),this.setState({focusedIndex:t[u].index,focusedOption:t[u].option})}},getFocusedOption:function(){return this._focusedOption},getInputValue:function(){return this.state.inputValue},selectFocusedOption:function(){if(this._focusedOption)return this.selectValue(this._focusedOption)},renderLoading:function(){if(this.props.isLoading)return p["default"].createElement("span",{className:"Select-loading-zone","aria-hidden":"true"},p["default"].createElement("span",{className:"Select-loading"}))},renderValue:function(e,t){var u=this,n=this.props.valueRenderer||this.getOptionLabel,s=this.props.valueComponent;if(!e.length)return this.state.inputValue?null:p["default"].createElement("div",{className:"Select-placeholder"},this.props.placeholder);var o=this.props.onValueClick?this.handleValueClick:null;return this.props.multi?e.map(function(e,t){return p["default"].createElement(s,{id:u._instancePrefix+"-value-"+t,instancePrefix:u._instancePrefix,disabled:u.props.disabled||e.clearableValue===!1,key:"value-"+t+"-"+e[u.props.valueKey],onClick:o,onRemove:u.removeValue,value:e},n(e,t),p["default"].createElement("span",{className:"Select-aria-only"}," "))}):this.state.inputValue?void 0:(t&&(o=null),p["default"].createElement(s,{id:this._instancePrefix+"-value-item",disabled:this.props.disabled,instancePrefix:this._instancePrefix,onClick:o,value:e[0]},n(e[0])))},renderInput:function(e,t){var u=this;if(this.props.inputRenderer)return this.props.inputRenderer();var n,s=(0,g["default"])("Select-input",this.props.inputProps.className),a=!!this.state.isOpen,l=(0,g["default"])((n={},i(n,this._instancePrefix+"-list",a),i(n,this._instancePrefix+"-backspace-remove-message",this.props.multi&&!this.props.disabled&&this.state.isFocused&&!this.state.inputValue),n)),d=r({},this.props.inputProps,{role:"combobox","aria-expanded":""+a,"aria-owns":l,"aria-haspopup":""+a,"aria-activedescendant":a?this._instancePrefix+"-option-"+t:this._instancePrefix+"-value","aria-labelledby":this.props["aria-labelledby"],"aria-label":this.props["aria-label"],className:s,tabIndex:this.props.tabIndex,onBlur:this.handleInputBlur,onChange:this.handleInputChange,onFocus:this.handleInputFocus,ref:function(e){return u.input=e},required:this.state.required,value:this.state.inputValue});if(this.props.disabled||!this.props.searchable){var c=this.props.inputProps,f=(c.inputClassName,o(c,["inputClassName"]));return p["default"].createElement("div",r({},f,{role:"combobox","aria-expanded":a,"aria-owns":a?this._instancePrefix+"-list":this._instancePrefix+"-value","aria-activedescendant":a?this._instancePrefix+"-option-"+t:this._instancePrefix+"-value",className:s,tabIndex:this.props.tabIndex||0,onBlur:this.handleInputBlur,onFocus:this.handleInputFocus,ref:function(e){return u.input=e},"aria-readonly":""+!!this.props.disabled,style:{border:0,width:1,display:"inline-block"}}))}return this.props.autosize?p["default"].createElement(h["default"],r({},d,{minWidth:"5px"})):p["default"].createElement("div",{className:s},p["default"].createElement("input",d))},renderClear:function(){if(this.props.clearable&&this.props.value&&0!==this.props.value&&(!this.props.multi||this.props.value.length)&&!this.props.disabled&&!this.props.isLoading)return p["default"].createElement("span",{className:"Select-clear-zone",title:this.props.multi?this.props.clearAllText:this.props.clearValueText,"aria-label":this.props.multi?this.props.clearAllText:this.props.clearValueText,onMouseDown:this.clearValue,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove,onTouchEnd:this.handleTouchEndClearValue},p["default"].createElement("span",{className:"Select-clear",dangerouslySetInnerHTML:{__html:"×"}}))},renderArrow:function(){var e=this.handleMouseDownOnArrow,t=this.props.arrowRenderer({onMouseDown:e});return p["default"].createElement("span",{className:"Select-arrow-zone",onMouseDown:e},t)},filterOptions:function I(e){var t=this.state.inputValue,u=this.props.options||[];if(this.props.filterOptions){var I="function"==typeof this.props.filterOptions?this.props.filterOptions:m["default"];return I(u,t,e,{filterOption:this.props.filterOption,ignoreAccents:this.props.ignoreAccents,ignoreCase:this.props.ignoreCase,labelKey:this.props.labelKey,matchPos:this.props.matchPos,matchProp:this.props.matchProp,valueKey:this.props.valueKey})}return u},onOptionRef:function(e,t){t&&(this.focused=e)},renderMenu:function(e,t,u){return e&&e.length?this.props.menuRenderer({focusedOption:u,focusOption:this.focusOption,instancePrefix:this._instancePrefix,labelKey:this.props.labelKey,onFocus:this.focusOption,onSelect:this.selectValue,optionClassName:this.props.optionClassName,optionComponent:this.props.optionComponent,optionRenderer:this.props.optionRenderer||this.getOptionLabel,options:e,selectValue:this.selectValue,valueArray:t,valueKey:this.props.valueKey,onOptionRef:this.onOptionRef}):this.props.noResultsText?p["default"].createElement("div",{className:"Select-noresults"},this.props.noResultsText):null},renderHiddenField:function(e){var t=this;if(this.props.name){if(this.props.joinValues){var u=e.map(function(e){return a(e[t.props.valueKey])}).join(this.props.delimiter);return p["default"].createElement("input",{type:"hidden",ref:function(e){return t.value=e},name:this.props.name,value:u,disabled:this.props.disabled})}return e.map(function(e,u){return p["default"].createElement("input",{key:"hidden."+u,type:"hidden",ref:"value"+u,name:t.props.name,value:a(e[t.props.valueKey]),disabled:t.props.disabled})})}},getFocusableOptionIndex:function(e){var t=this._visibleOptions;if(!t.length)return null;var u=this.state.focusedOption||e;if(u&&!u.disabled){var n=t.indexOf(u);if(n!==-1)return n}for(var s=0;s-1)return!1;if(n.filterOption)return n.filterOption.call(s,e,t);if(!t)return!0;var o=String(e[n.valueKey]),a=String(e[n.labelKey]);return n.ignoreAccents&&("label"!==n.matchProp&&(o=(0,i["default"])(o)),"value"!==n.matchProp&&(a=(0,i["default"])(a))),n.ignoreCase&&("label"!==n.matchProp&&(o=o.toLowerCase()),"value"!==n.matchProp&&(a=a.toLowerCase())),"start"===n.matchPos?"label"!==n.matchProp&&o.substr(0,t.length)===t||"value"!==n.matchProp&&a.substr(0,t.length)===t:"label"!==n.matchProp&&o.indexOf(t)>=0||"value"!==n.matchProp&&a.indexOf(t)>=0})}var o=e("./stripDiacritics"),i=n(o);t.exports=s},{"./stripDiacritics":10}],9:[function(e,t,u){(function(e){"use strict";function u(e){return e&&e.__esModule?e:{"default":e}}function n(e){var t=e.focusedOption,u=e.instancePrefix,n=(e.labelKey,e.onFocus),s=e.onSelect,i=e.optionClassName,r=e.optionComponent,l=e.optionRenderer,p=e.options,d=e.valueArray,c=e.valueKey,f=e.onOptionRef,h=r;return p.map(function(e,r){var p=d&&d.indexOf(e)>-1,E=e===t,g=(0,o["default"])(i,{"Select-option":!0,"is-selected":p,"is-focused":E,"is-disabled":e.disabled});return a["default"].createElement(h,{className:g,instancePrefix:u,isDisabled:e.disabled,isFocused:E,isSelected:p,key:"option-"+r+"-"+e[c],onFocus:n,onSelect:s,option:e,optionIndex:r,ref:function(e){f(e,E)}},l(e,r))})}var s="undefined"!=typeof window?window.classNames:"undefined"!=typeof e?e.classNames:null,o=u(s),i="undefined"!=typeof window?window.React:"undefined"!=typeof e?e.React:null,a=u(i);t.exports=n}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],10:[function(e,t,u){"use strict";var n=[{base:"A",letters:/[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g},{base:"AA",letters:/[\uA732]/g},{base:"AE",letters:/[\u00C6\u01FC\u01E2]/g},{base:"AO",letters:/[\uA734]/g},{base:"AU",letters:/[\uA736]/g},{base:"AV",letters:/[\uA738\uA73A]/g},{base:"AY",letters:/[\uA73C]/g},{base:"B",letters:/[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g},{base:"C",letters:/[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g},{base:"D",letters:/[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g},{base:"DZ",letters:/[\u01F1\u01C4]/g},{base:"Dz",letters:/[\u01F2\u01C5]/g},{base:"E",letters:/[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g},{base:"F",letters:/[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g},{base:"G",letters:/[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g},{base:"H",letters:/[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g},{base:"I",letters:/[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g},{base:"J",letters:/[\u004A\u24BF\uFF2A\u0134\u0248]/g},{base:"K",letters:/[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g},{base:"L",letters:/[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g},{base:"LJ",letters:/[\u01C7]/g},{base:"Lj",letters:/[\u01C8]/g},{base:"M",letters:/[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g},{base:"N",letters:/[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g},{base:"NJ",letters:/[\u01CA]/g},{base:"Nj",letters:/[\u01CB]/g},{base:"O",letters:/[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g},{base:"OI",letters:/[\u01A2]/g},{base:"OO",letters:/[\uA74E]/g},{base:"OU",letters:/[\u0222]/g},{base:"P",letters:/[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g},{base:"Q",letters:/[\u0051\u24C6\uFF31\uA756\uA758\u024A]/g},{base:"R",letters:/[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g},{base:"S",letters:/[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g},{base:"T",letters:/[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g},{base:"TZ",letters:/[\uA728]/g},{base:"U",letters:/[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g},{base:"V",letters:/[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g},{base:"VY",letters:/[\uA760]/g},{base:"W",letters:/[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g},{base:"X",letters:/[\u0058\u24CD\uFF38\u1E8A\u1E8C]/g},{base:"Y",letters:/[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g},{base:"Z",letters:/[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g},{base:"a",letters:/[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g},{base:"aa",letters:/[\uA733]/g},{base:"ae",letters:/[\u00E6\u01FD\u01E3]/g},{base:"ao",letters:/[\uA735]/g},{base:"au",letters:/[\uA737]/g},{base:"av",letters:/[\uA739\uA73B]/g},{base:"ay",letters:/[\uA73D]/g},{base:"b",letters:/[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g},{base:"c",letters:/[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g},{base:"d",letters:/[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g},{base:"dz",letters:/[\u01F3\u01C6]/g},{base:"e",letters:/[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g},{base:"f",letters:/[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g},{base:"g",letters:/[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g},{base:"h",letters:/[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g},{base:"hv",letters:/[\u0195]/g},{base:"i",letters:/[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g},{base:"j",letters:/[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g},{base:"k",letters:/[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g},{base:"l",letters:/[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g},{base:"lj",letters:/[\u01C9]/g},{base:"m",letters:/[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g},{base:"n",letters:/[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g},{base:"nj",letters:/[\u01CC]/g},{base:"o",letters:/[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g},{base:"oi",letters:/[\u01A3]/g},{base:"ou",letters:/[\u0223]/g},{base:"oo",letters:/[\uA74F]/g},{base:"p",letters:/[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g},{base:"q",letters:/[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g},{base:"r",letters:/[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g},{base:"s",letters:/[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g},{base:"t",letters:/[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g},{base:"tz",letters:/[\uA729]/g},{base:"u",letters:/[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g},{base:"v",letters:/[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g},{base:"vy",letters:/[\uA761]/g},{base:"w",letters:/[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g},{base:"x",letters:/[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g},{base:"y",letters:/[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g},{base:"z",letters:/[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g}];t.exports=function(e){for(var t=0;t=0||Object.prototype.hasOwnProperty.call(e,n)&&(u[n]=e[n]);return u}function o(e){return f["default"].createElement(E["default"],e)}function i(e){var t=e.option,u=e.options,n=e.labelKey,s=e.valueKey;return 0===u.filter(function(e){return e[n]===t[n]||e[s]===t[s]}).length}function a(e){var t=e.label;return!!t}function r(e){var t=e.label,u=e.labelKey,n=e.valueKey,s={};return s[n]=t,s[u]=t,s.className="Select-create-option-placeholder",s}function l(e){return'Create option "'+e+'"'}function p(e){var t=e.keyCode;switch(t){case 9:case 13:case 188:return!0}return!1}var d=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,n)&&(u[n]=e[n]);return u}function i(e,t,u){return t in e?Object.defineProperty(e,t,{value:u,enumerable:!0,configurable:!0,writable:!0}):e[t]=u,e}function a(e){var t=typeof e;return"string"===t?e:"object"===t?JSON.stringify(e):"number"===t||"boolean"===t?String(e):""}Object.defineProperty(u,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=1;ta.bottom||i.topt.offsetHeight&&!(t.scrollHeight-t.offsetHeight-t.scrollTop)&&this.props.onMenuScrollToBottom()}},handleRequired:function(e,t){return!e||(t?0===e.length:0===Object.keys(e).length)},getOptionLabel:function(e){return e[this.props.labelKey]},getValueArray:function(e,t){var u=this,n="object"==typeof t?t:this.props;if(n.multi){if("string"==typeof e&&(e=e.split(n.delimiter)),!Array.isArray(e)){if(null===e||void 0===e)return[];e=[e]}return e.map(function(e){return u.expandValue(e,n)}).filter(function(e){return e})}var s=this.expandValue(e,n);return s?[s]:[]},expandValue:function(e,t){var u=typeof e;if("string"!==u&&"number"!==u&&"boolean"!==u)return e;var n=t.options,s=t.valueKey;if(n)for(var o=0;o0?u-=1:u=t.length-1;else if("start"===e)u=0;else if("end"===e)u=t.length-1;else if("page_up"===e){var s=u-this.props.pageSize;u=s<0?0:s}else if("page_down"===e){var s=u+this.props.pageSize;u=s>t.length-1?t.length-1:s}u===-1&&(u=0),this.setState({focusedIndex:t[u].index,focusedOption:t[u].option})}},getFocusedOption:function(){return this._focusedOption},getInputValue:function(){return this.state.inputValue},selectFocusedOption:function(){if(this._focusedOption)return this.selectValue(this._focusedOption)},renderLoading:function(){if(this.props.isLoading)return p["default"].createElement("span",{className:"Select-loading-zone","aria-hidden":"true"},p["default"].createElement("span",{className:"Select-loading"}))},renderValue:function(e,t){var u=this,n=this.props.valueRenderer||this.getOptionLabel,s=this.props.valueComponent;if(!e.length)return this.state.inputValue?null:p["default"].createElement("div",{className:"Select-placeholder"},this.props.placeholder);var o=this.props.onValueClick?this.handleValueClick:null;return this.props.multi?e.map(function(e,t){return p["default"].createElement(s,{id:u._instancePrefix+"-value-"+t,instancePrefix:u._instancePrefix,disabled:u.props.disabled||e.clearableValue===!1,key:"value-"+t+"-"+e[u.props.valueKey],onClick:o,onRemove:u.removeValue,value:e},n(e,t),p["default"].createElement("span",{className:"Select-aria-only"}," "))}):this.state.inputValue?void 0:(t&&(o=null),p["default"].createElement(s,{id:this._instancePrefix+"-value-item",disabled:this.props.disabled,instancePrefix:this._instancePrefix,onClick:o,value:e[0]},n(e[0])))},renderInput:function(e,t){var u=this;if(this.props.inputRenderer)return this.props.inputRenderer();var n,s=(0,y["default"])("Select-input",this.props.inputProps.className),a=!!this.state.isOpen,l=(0,y["default"])((n={},i(n,this._instancePrefix+"-list",a),i(n,this._instancePrefix+"-backspace-remove-message",this.props.multi&&!this.props.disabled&&this.state.isFocused&&!this.state.inputValue),n)),d=r({},this.props.inputProps,{role:"combobox","aria-expanded":""+a,"aria-owns":l,"aria-haspopup":""+a,"aria-activedescendant":a?this._instancePrefix+"-option-"+t:this._instancePrefix+"-value","aria-labelledby":this.props["aria-labelledby"],"aria-label":this.props["aria-label"],className:s,tabIndex:this.props.tabIndex,onBlur:this.handleInputBlur,onChange:this.handleInputChange,onFocus:this.handleInputFocus,ref:function(e){return u.input=e},required:this.state.required,value:this.state.inputValue});if(this.props.disabled||!this.props.searchable){var c=this.props.inputProps,f=(c.inputClassName,o(c,["inputClassName"]));return p["default"].createElement("div",r({},f,{role:"combobox","aria-expanded":a,"aria-owns":a?this._instancePrefix+"-list":this._instancePrefix+"-value","aria-activedescendant":a?this._instancePrefix+"-option-"+t:this._instancePrefix+"-value",className:s,tabIndex:this.props.tabIndex||0,onBlur:this.handleInputBlur,onFocus:this.handleInputFocus,ref:function(e){return u.input=e},"aria-readonly":""+!!this.props.disabled,style:{border:0,width:1,display:"inline-block"}}))}return this.props.autosize?p["default"].createElement(h["default"],r({},d,{minWidth:"5px"})):p["default"].createElement("div",{className:s},p["default"].createElement("input",d))},renderClear:function(){if(this.props.clearable&&this.props.value&&0!==this.props.value&&(!this.props.multi||this.props.value.length)&&!this.props.disabled&&!this.props.isLoading)return p["default"].createElement("span",{className:"Select-clear-zone",title:this.props.multi?this.props.clearAllText:this.props.clearValueText,"aria-label":this.props.multi?this.props.clearAllText:this.props.clearValueText,onMouseDown:this.clearValue,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove,onTouchEnd:this.handleTouchEndClearValue},p["default"].createElement("span",{className:"Select-clear",dangerouslySetInnerHTML:{__html:"×"}}))},renderArrow:function(){var e=this.handleMouseDownOnArrow,t=this.props.arrowRenderer({onMouseDown:e});return p["default"].createElement("span",{className:"Select-arrow-zone",onMouseDown:e},t)},filterOptions:function _(e){var t=this.state.inputValue,u=this.props.options||[];if(this.props.filterOptions){var _="function"==typeof this.props.filterOptions?this.props.filterOptions:m["default"];return _(u,t,e,{filterOption:this.props.filterOption,ignoreAccents:this.props.ignoreAccents,ignoreCase:this.props.ignoreCase,labelKey:this.props.labelKey,matchPos:this.props.matchPos,matchProp:this.props.matchProp,valueKey:this.props.valueKey})}return u},onOptionRef:function(e,t){t&&(this.focused=e)},renderMenu:function(e,t,u){return e&&e.length?this.props.menuRenderer({focusedOption:u,focusOption:this.focusOption,instancePrefix:this._instancePrefix,labelKey:this.props.labelKey,onFocus:this.focusOption,onSelect:this.selectValue,optionClassName:this.props.optionClassName,optionComponent:this.props.optionComponent,optionRenderer:this.props.optionRenderer||this.getOptionLabel,options:e,selectValue:this.selectValue,valueArray:t,valueKey:this.props.valueKey,onOptionRef:this.onOptionRef}):this.props.noResultsText?p["default"].createElement("div",{className:"Select-noresults"},this.props.noResultsText):null},renderHiddenField:function(e){var t=this;if(this.props.name){if(this.props.joinValues){var u=e.map(function(e){return a(e[t.props.valueKey])}).join(this.props.delimiter);return p["default"].createElement("input",{type:"hidden",ref:function(e){return t.value=e},name:this.props.name,value:u,disabled:this.props.disabled})}return e.map(function(e,u){return p["default"].createElement("input",{key:"hidden."+u,type:"hidden",ref:"value"+u,name:t.props.name,value:a(e[t.props.valueKey]),disabled:t.props.disabled})})}},getFocusableOptionIndex:function(e){var t=this._visibleOptions;if(!t.length)return null;var u=this.state.focusedOption||e;if(u&&!u.disabled){var n=t.indexOf(u);if(n!==-1)return n}for(var s=0;s-1)return!1;if(n.filterOption)return n.filterOption.call(s,e,t);if(!t)return!0;var o=String(e[n.valueKey]),a=String(e[n.labelKey]);return n.ignoreAccents&&("label"!==n.matchProp&&(o=(0,i["default"])(o)),"value"!==n.matchProp&&(a=(0,i["default"])(a))),n.ignoreCase&&("label"!==n.matchProp&&(o=o.toLowerCase()),"value"!==n.matchProp&&(a=a.toLowerCase())),"start"===n.matchPos?"label"!==n.matchProp&&o.substr(0,t.length)===t||"value"!==n.matchProp&&a.substr(0,t.length)===t:"label"!==n.matchProp&&o.indexOf(t)>=0||"value"!==n.matchProp&&a.indexOf(t)>=0})}var o=e("./stripDiacritics"),i=n(o);t.exports=s},{"./stripDiacritics":10}],9:[function(e,t,u){(function(e){"use strict";function u(e){return e&&e.__esModule?e:{"default":e}}function n(e){var t=e.focusedOption,u=e.instancePrefix,n=(e.labelKey,e.onFocus),s=e.onSelect,i=e.optionClassName,r=e.optionComponent,l=e.optionRenderer,p=e.options,d=e.valueArray,c=e.valueKey,f=e.onOptionRef,h=r;return p.map(function(e,r){var p=d&&d.indexOf(e)>-1,E=e===t,y=(0,o["default"])(i,{"Select-option":!0,"is-selected":p,"is-focused":E,"is-disabled":e.disabled});return a["default"].createElement(h,{className:y,instancePrefix:u,isDisabled:e.disabled,isFocused:E,isSelected:p,key:"option-"+r+"-"+e[c],onFocus:n,onSelect:s,option:e,optionIndex:r,ref:function(e){f(e,E)}},l(e,r))})}var s="undefined"!=typeof window?window.classNames:"undefined"!=typeof e?e.classNames:null,o=u(s),i="undefined"!=typeof window?window.React:"undefined"!=typeof e?e.React:null,a=u(i);t.exports=n}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],10:[function(e,t,u){"use strict";var n=[{base:"A",letters:/[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g},{base:"AA",letters:/[\uA732]/g},{base:"AE",letters:/[\u00C6\u01FC\u01E2]/g},{base:"AO",letters:/[\uA734]/g},{base:"AU",letters:/[\uA736]/g},{base:"AV",letters:/[\uA738\uA73A]/g},{base:"AY",letters:/[\uA73C]/g},{base:"B",letters:/[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g},{base:"C",letters:/[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g},{base:"D",letters:/[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g},{base:"DZ",letters:/[\u01F1\u01C4]/g},{base:"Dz",letters:/[\u01F2\u01C5]/g},{base:"E",letters:/[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g},{base:"F",letters:/[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g},{base:"G",letters:/[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g},{base:"H",letters:/[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g},{base:"I",letters:/[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g},{base:"J",letters:/[\u004A\u24BF\uFF2A\u0134\u0248]/g},{base:"K",letters:/[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g},{base:"L",letters:/[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g},{base:"LJ",letters:/[\u01C7]/g},{base:"Lj",letters:/[\u01C8]/g},{base:"M",letters:/[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g},{base:"N",letters:/[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g},{base:"NJ",letters:/[\u01CA]/g},{base:"Nj",letters:/[\u01CB]/g},{base:"O",letters:/[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g},{base:"OI",letters:/[\u01A2]/g},{base:"OO",letters:/[\uA74E]/g},{base:"OU",letters:/[\u0222]/g},{base:"P",letters:/[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g},{base:"Q",letters:/[\u0051\u24C6\uFF31\uA756\uA758\u024A]/g},{base:"R",letters:/[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g},{base:"S",letters:/[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g},{base:"T",letters:/[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g},{base:"TZ",letters:/[\uA728]/g},{base:"U",letters:/[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g},{base:"V",letters:/[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g},{base:"VY",letters:/[\uA760]/g},{base:"W",letters:/[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g},{base:"X",letters:/[\u0058\u24CD\uFF38\u1E8A\u1E8C]/g},{base:"Y",letters:/[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g},{base:"Z",letters:/[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g},{base:"a",letters:/[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g},{base:"aa",letters:/[\uA733]/g},{base:"ae",letters:/[\u00E6\u01FD\u01E3]/g},{base:"ao",letters:/[\uA735]/g},{base:"au",letters:/[\uA737]/g},{base:"av",letters:/[\uA739\uA73B]/g},{base:"ay",letters:/[\uA73D]/g},{base:"b",letters:/[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g},{base:"c",letters:/[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g},{base:"d",letters:/[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g},{base:"dz",letters:/[\u01F3\u01C6]/g},{base:"e",letters:/[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g},{base:"f",letters:/[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g},{base:"g",letters:/[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g},{base:"h",letters:/[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g},{base:"hv",letters:/[\u0195]/g},{base:"i",letters:/[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g},{base:"j",letters:/[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g},{base:"k",letters:/[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g},{base:"l",letters:/[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g},{base:"lj",letters:/[\u01C9]/g},{base:"m",letters:/[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g},{base:"n",letters:/[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g},{base:"nj",letters:/[\u01CC]/g},{base:"o",letters:/[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g},{base:"oi",letters:/[\u01A3]/g},{base:"ou",letters:/[\u0223]/g},{base:"oo",letters:/[\uA74F]/g},{base:"p",letters:/[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g},{base:"q",letters:/[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g},{base:"r",letters:/[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g},{base:"s",letters:/[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g},{base:"t",letters:/[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g},{base:"tz",letters:/[\uA729]/g},{base:"u",letters:/[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g},{base:"v",letters:/[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g},{base:"vy",letters:/[\uA761]/g},{base:"w",letters:/[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g},{base:"x",letters:/[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g},{base:"y",letters:/[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g},{base:"z",letters:/[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g}];t.exports=function(e){for(var t=0;t= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + +function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var _react = require('react'); @@ -19,187 +31,177 @@ var _utilsStripDiacritics = require('./utils/stripDiacritics'); var _utilsStripDiacritics2 = _interopRequireDefault(_utilsStripDiacritics); -var requestId = 0; - -function initCache(cache) { - if (cache && typeof cache !== 'object') { - cache = {}; - } - return cache ? cache : null; -} - -function updateCache(cache, input, data) { - if (!cache) return; - cache[input] = data; -} +var propTypes = { + autoload: _react2['default'].PropTypes.bool.isRequired, // automatically call the `loadOptions` prop on-mount; defaults to true + cache: _react2['default'].PropTypes.any, // object to use to cache results; set to null/false to disable caching + children: _react2['default'].PropTypes.func.isRequired, // Child function responsible for creating the inner Select component; (props: Object): PropTypes.element + ignoreAccents: _react2['default'].PropTypes.bool, // strip diacritics when filtering; defaults to true + ignoreCase: _react2['default'].PropTypes.bool, // perform case-insensitive filtering; defaults to true + loadingPlaceholder: _react.PropTypes.string.isRequired, // replaces the placeholder while options are loading + loadOptions: _react2['default'].PropTypes.func.isRequired, // callback to load options asynchronously; (inputValue: string, callback: Function): ?Promise + options: _react.PropTypes.array.isRequired, // array of options + placeholder: _react2['default'].PropTypes.oneOfType([// field placeholder, displayed when there's no value (shared with Select) + _react2['default'].PropTypes.string, _react2['default'].PropTypes.node]), + searchPromptText: _react2['default'].PropTypes.oneOfType([// label to prompt for search input + _react2['default'].PropTypes.string, _react2['default'].PropTypes.node]) +}; -function getFromCache(cache, input) { - if (!cache) return; - for (var i = input.length; i >= 0; --i) { - var cacheKey = input.slice(0, i); - if (cache[cacheKey] && (input === cacheKey || cache[cacheKey].complete)) { - return cache[cacheKey]; - } - } -} +var defaultProps = { + autoload: true, + cache: {}, + children: defaultChildren, + ignoreAccents: true, + ignoreCase: true, + loadingPlaceholder: 'Loading...', + options: [], + searchPromptText: 'Type to search' +}; -function thenPromise(promise, callback) { - if (!promise || typeof promise.then !== 'function') return; - return promise.then(function (data) { - callback(null, data); - }, function (err) { - callback(err); - }); -} +var Async = (function (_Component) { + _inherits(Async, _Component); -var stringOrNode = _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.string, _react2['default'].PropTypes.node]); + function Async(props, context) { + _classCallCheck(this, Async); -var Async = _react2['default'].createClass({ - displayName: 'Async', + _get(Object.getPrototypeOf(Async.prototype), 'constructor', this).call(this, props, context); - propTypes: { - cache: _react2['default'].PropTypes.any, // object to use to cache results, can be null to disable cache - children: _react2['default'].PropTypes.func, // Child function responsible for creating the inner Select component; (props: Object): PropTypes.element - ignoreAccents: _react2['default'].PropTypes.bool, // whether to strip diacritics when filtering (shared with Select) - ignoreCase: _react2['default'].PropTypes.bool, // whether to perform case-insensitive filtering (shared with Select) - isLoading: _react2['default'].PropTypes.bool, // overrides the isLoading state when set to true - loadOptions: _react2['default'].PropTypes.func.isRequired, // function to call to load options asynchronously - loadingPlaceholder: _react2['default'].PropTypes.string, // replaces the placeholder while options are loading - minimumInput: _react2['default'].PropTypes.number, // the minimum number of characters that trigger loadOptions - noResultsText: stringOrNode, // placeholder displayed when there are no matching search results (shared with Select) - onInputChange: _react2['default'].PropTypes.func, // onInputChange handler: function (inputValue) {} - placeholder: stringOrNode, // field placeholder, displayed when there's no value (shared with Select) - searchPromptText: stringOrNode, // label to prompt for search input - searchingText: _react2['default'].PropTypes.string }, - // message to display while options are loading - getDefaultProps: function getDefaultProps() { - return { - cache: true, - ignoreAccents: true, - ignoreCase: true, - loadingPlaceholder: 'Loading...', - minimumInput: 0, - searchingText: 'Searching...', - searchPromptText: 'Type to search' - }; - }, - getInitialState: function getInitialState() { - return { - cache: initCache(this.props.cache), + this.state = { isLoading: false, - options: [] + options: props.options }; - }, - componentWillMount: function componentWillMount() { - this._lastInput = ''; - }, - componentDidMount: function componentDidMount() { - this.loadOptions(''); - }, - componentWillReceiveProps: function componentWillReceiveProps(nextProps) { - if (nextProps.cache !== this.props.cache) { - this.setState({ - cache: initCache(nextProps.cache) - }); - } - }, - focus: function focus() { - this.select.focus(); - }, - resetState: function resetState() { - this._currentRequestId = -1; - this.setState({ - isLoading: false, - options: [] - }); - }, - getResponseHandler: function getResponseHandler(input) { - var _this = this; - var _requestId = this._currentRequestId = requestId++; - return function (err, data) { - if (err) throw err; - if (!_this.isMounted()) return; - updateCache(_this.state.cache, input, data); - if (_requestId !== _this._currentRequestId) return; - _this.setState({ - isLoading: false, - options: data && data.options || [] - }); - }; - }, - loadOptions: function loadOptions(input) { - if (this.props.onInputChange) { - var nextState = this.props.onInputChange(input); - // Note: != used deliberately here to catch undefined and null - if (nextState != null) { - input = '' + nextState; + this._onInputChange = this._onInputChange.bind(this); + } + + _createClass(Async, [{ + key: 'componentDidMount', + value: function componentDidMount() { + var autoload = this.props.autoload; + + if (autoload) { + this.loadOptions(''); } } - if (this.props.ignoreAccents) input = (0, _utilsStripDiacritics2['default'])(input); - if (this.props.ignoreCase) input = input.toLowerCase(); + }, { + key: 'componentWillUpdate', + value: function componentWillUpdate(nextProps, nextState) { + var _this = this; - this._lastInput = input; - if (input.length < this.props.minimumInput) { - return this.resetState(); - } - var cacheResult = getFromCache(this.state.cache, input); - if (cacheResult && Array.isArray(cacheResult.options)) { - return this.setState({ - options: cacheResult.options + var propertiesToSync = ['options']; + propertiesToSync.forEach(function (prop) { + if (_this.props[prop] !== nextProps[prop]) { + _this.setState(_defineProperty({}, prop, nextProps[prop])); + } }); } - this.setState({ - isLoading: true - }); - var responseHandler = this.getResponseHandler(input); - var inputPromise = thenPromise(this.props.loadOptions(input, responseHandler), responseHandler); - return inputPromise ? inputPromise.then(function () { - return input; - }) : input; - }, - render: function render() { - var _this2 = this; + }, { + key: 'loadOptions', + value: function loadOptions(inputValue) { + var _this2 = this; - var _props = this.props; - var _props$children = _props.children; - var children = _props$children === undefined ? defaultChildren : _props$children; - var noResultsText = _props.noResultsText; + var _props = this.props; + var cache = _props.cache; + var loadOptions = _props.loadOptions; + + if (cache && cache.hasOwnProperty(inputValue)) { + this.setState({ + options: cache[inputValue] + }); + + return; + } + + var callback = function callback(error, data) { + if (callback === _this2._callback) { + _this2._callback = null; + + var options = data && data.options || []; + + if (cache) { + cache[inputValue] = options; + } - var restProps = _objectWithoutProperties(_props, ['children', 'noResultsText']); + _this2.setState({ + isLoading: false, + options: options + }); + } + }; + + // Ignore all but the most recent request + this._callback = callback; - var _state = this.state; - var isLoading = _state.isLoading; - var options = _state.options; + var promise = loadOptions(inputValue, callback); + if (promise) { + promise.then(function (data) { + return callback(null, data); + }, function (error) { + return callback(error); + }); + } + + if (this._callback && !this.state.isLoading) { + this.setState({ + isLoading: true + }); + } - if (this.props.isLoading) isLoading = true; - var placeholder = isLoading ? this.props.loadingPlaceholder : this.props.placeholder; - if (isLoading) { - noResultsText = this.props.searchingText; - } else if (!options.length && this._lastInput.length < this.props.minimumInput) { - noResultsText = this.props.searchPromptText; + return inputValue; } + }, { + key: '_onInputChange', + value: function _onInputChange(inputValue) { + var _props2 = this.props; + var ignoreAccents = _props2.ignoreAccents; + var ignoreCase = _props2.ignoreCase; - var props = _extends({}, restProps, { - isLoading: isLoading, - noResultsText: noResultsText, - onInputChange: this.loadOptions, - options: options, - placeholder: placeholder, - ref: function ref(_ref) { - _this2.select = _ref; + if (ignoreAccents) { + inputValue = (0, _utilsStripDiacritics2['default'])(inputValue); } - }); - return children(props); - } -}); + if (ignoreCase) { + inputValue = inputValue.toLowerCase(); + } + + return this.loadOptions(inputValue); + } + }, { + key: 'render', + value: function render() { + var _props3 = this.props; + var children = _props3.children; + var loadingPlaceholder = _props3.loadingPlaceholder; + var placeholder = _props3.placeholder; + var searchPromptText = _props3.searchPromptText; + var _state = this.state; + var isLoading = _state.isLoading; + var options = _state.options; + + var props = { + noResultsText: isLoading ? loadingPlaceholder : searchPromptText, + placeholder: isLoading ? loadingPlaceholder : placeholder, + options: isLoading ? [] : options + }; + + return children(_extends({}, this.props, props, { + isLoading: isLoading, + onInputChange: this._onInputChange + })); + } + }]); + + return Async; +})(_react.Component); + +exports['default'] = Async; + +Async.propTypes = propTypes; +Async.defaultProps = defaultProps; function defaultChildren(props) { return _react2['default'].createElement(_Select2['default'], props); }; - -module.exports = Async; +module.exports = exports['default']; },{"./Select":"react-select","./utils/stripDiacritics":9,"react":undefined}],2:[function(require,module,exports){ 'use strict'; @@ -234,10 +236,6 @@ var AsyncCreatable = _react2['default'].createClass({ onInputChange: function (input) { creatableProps.onInputChange(input); return asyncProps.onInputChange(input); - }, - ref: function (ref) { - creatableProps.ref(ref); - asyncProps.ref(ref); } })); } diff --git a/examples/dist/standalone.js b/examples/dist/standalone.js index 0621bdea55..c4a59600e4 100644 --- a/examples/dist/standalone.js +++ b/examples/dist/standalone.js @@ -2,11 +2,23 @@ (function (global){ 'use strict'; +Object.defineProperty(exports, '__esModule', { + value: true +}); + 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; }; +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + +var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + +function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var _react = (typeof window !== "undefined" ? window['React'] : typeof global !== "undefined" ? global['React'] : null); @@ -20,187 +32,177 @@ var _utilsStripDiacritics = require('./utils/stripDiacritics'); var _utilsStripDiacritics2 = _interopRequireDefault(_utilsStripDiacritics); -var requestId = 0; - -function initCache(cache) { - if (cache && typeof cache !== 'object') { - cache = {}; - } - return cache ? cache : null; -} - -function updateCache(cache, input, data) { - if (!cache) return; - cache[input] = data; -} +var propTypes = { + autoload: _react2['default'].PropTypes.bool.isRequired, // automatically call the `loadOptions` prop on-mount; defaults to true + cache: _react2['default'].PropTypes.any, // object to use to cache results; set to null/false to disable caching + children: _react2['default'].PropTypes.func.isRequired, // Child function responsible for creating the inner Select component; (props: Object): PropTypes.element + ignoreAccents: _react2['default'].PropTypes.bool, // strip diacritics when filtering; defaults to true + ignoreCase: _react2['default'].PropTypes.bool, // perform case-insensitive filtering; defaults to true + loadingPlaceholder: _react.PropTypes.string.isRequired, // replaces the placeholder while options are loading + loadOptions: _react2['default'].PropTypes.func.isRequired, // callback to load options asynchronously; (inputValue: string, callback: Function): ?Promise + options: _react.PropTypes.array.isRequired, // array of options + placeholder: _react2['default'].PropTypes.oneOfType([// field placeholder, displayed when there's no value (shared with Select) + _react2['default'].PropTypes.string, _react2['default'].PropTypes.node]), + searchPromptText: _react2['default'].PropTypes.oneOfType([// label to prompt for search input + _react2['default'].PropTypes.string, _react2['default'].PropTypes.node]) +}; -function getFromCache(cache, input) { - if (!cache) return; - for (var i = input.length; i >= 0; --i) { - var cacheKey = input.slice(0, i); - if (cache[cacheKey] && (input === cacheKey || cache[cacheKey].complete)) { - return cache[cacheKey]; - } - } -} +var defaultProps = { + autoload: true, + cache: {}, + children: defaultChildren, + ignoreAccents: true, + ignoreCase: true, + loadingPlaceholder: 'Loading...', + options: [], + searchPromptText: 'Type to search' +}; -function thenPromise(promise, callback) { - if (!promise || typeof promise.then !== 'function') return; - return promise.then(function (data) { - callback(null, data); - }, function (err) { - callback(err); - }); -} +var Async = (function (_Component) { + _inherits(Async, _Component); -var stringOrNode = _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.string, _react2['default'].PropTypes.node]); + function Async(props, context) { + _classCallCheck(this, Async); -var Async = _react2['default'].createClass({ - displayName: 'Async', + _get(Object.getPrototypeOf(Async.prototype), 'constructor', this).call(this, props, context); - propTypes: { - cache: _react2['default'].PropTypes.any, // object to use to cache results, can be null to disable cache - children: _react2['default'].PropTypes.func, // Child function responsible for creating the inner Select component; (props: Object): PropTypes.element - ignoreAccents: _react2['default'].PropTypes.bool, // whether to strip diacritics when filtering (shared with Select) - ignoreCase: _react2['default'].PropTypes.bool, // whether to perform case-insensitive filtering (shared with Select) - isLoading: _react2['default'].PropTypes.bool, // overrides the isLoading state when set to true - loadOptions: _react2['default'].PropTypes.func.isRequired, // function to call to load options asynchronously - loadingPlaceholder: _react2['default'].PropTypes.string, // replaces the placeholder while options are loading - minimumInput: _react2['default'].PropTypes.number, // the minimum number of characters that trigger loadOptions - noResultsText: stringOrNode, // placeholder displayed when there are no matching search results (shared with Select) - onInputChange: _react2['default'].PropTypes.func, // onInputChange handler: function (inputValue) {} - placeholder: stringOrNode, // field placeholder, displayed when there's no value (shared with Select) - searchPromptText: stringOrNode, // label to prompt for search input - searchingText: _react2['default'].PropTypes.string }, - // message to display while options are loading - getDefaultProps: function getDefaultProps() { - return { - cache: true, - ignoreAccents: true, - ignoreCase: true, - loadingPlaceholder: 'Loading...', - minimumInput: 0, - searchingText: 'Searching...', - searchPromptText: 'Type to search' - }; - }, - getInitialState: function getInitialState() { - return { - cache: initCache(this.props.cache), + this.state = { isLoading: false, - options: [] + options: props.options }; - }, - componentWillMount: function componentWillMount() { - this._lastInput = ''; - }, - componentDidMount: function componentDidMount() { - this.loadOptions(''); - }, - componentWillReceiveProps: function componentWillReceiveProps(nextProps) { - if (nextProps.cache !== this.props.cache) { - this.setState({ - cache: initCache(nextProps.cache) - }); - } - }, - focus: function focus() { - this.select.focus(); - }, - resetState: function resetState() { - this._currentRequestId = -1; - this.setState({ - isLoading: false, - options: [] - }); - }, - getResponseHandler: function getResponseHandler(input) { - var _this = this; - var _requestId = this._currentRequestId = requestId++; - return function (err, data) { - if (err) throw err; - if (!_this.isMounted()) return; - updateCache(_this.state.cache, input, data); - if (_requestId !== _this._currentRequestId) return; - _this.setState({ - isLoading: false, - options: data && data.options || [] - }); - }; - }, - loadOptions: function loadOptions(input) { - if (this.props.onInputChange) { - var nextState = this.props.onInputChange(input); - // Note: != used deliberately here to catch undefined and null - if (nextState != null) { - input = '' + nextState; + this._onInputChange = this._onInputChange.bind(this); + } + + _createClass(Async, [{ + key: 'componentDidMount', + value: function componentDidMount() { + var autoload = this.props.autoload; + + if (autoload) { + this.loadOptions(''); } } - if (this.props.ignoreAccents) input = (0, _utilsStripDiacritics2['default'])(input); - if (this.props.ignoreCase) input = input.toLowerCase(); + }, { + key: 'componentWillUpdate', + value: function componentWillUpdate(nextProps, nextState) { + var _this = this; - this._lastInput = input; - if (input.length < this.props.minimumInput) { - return this.resetState(); - } - var cacheResult = getFromCache(this.state.cache, input); - if (cacheResult && Array.isArray(cacheResult.options)) { - return this.setState({ - options: cacheResult.options + var propertiesToSync = ['options']; + propertiesToSync.forEach(function (prop) { + if (_this.props[prop] !== nextProps[prop]) { + _this.setState(_defineProperty({}, prop, nextProps[prop])); + } }); } - this.setState({ - isLoading: true - }); - var responseHandler = this.getResponseHandler(input); - var inputPromise = thenPromise(this.props.loadOptions(input, responseHandler), responseHandler); - return inputPromise ? inputPromise.then(function () { - return input; - }) : input; - }, - render: function render() { - var _this2 = this; + }, { + key: 'loadOptions', + value: function loadOptions(inputValue) { + var _this2 = this; - var _props = this.props; - var _props$children = _props.children; - var children = _props$children === undefined ? defaultChildren : _props$children; - var noResultsText = _props.noResultsText; + var _props = this.props; + var cache = _props.cache; + var loadOptions = _props.loadOptions; + + if (cache && cache.hasOwnProperty(inputValue)) { + this.setState({ + options: cache[inputValue] + }); + + return; + } + + var callback = function callback(error, data) { + if (callback === _this2._callback) { + _this2._callback = null; + + var options = data && data.options || []; + + if (cache) { + cache[inputValue] = options; + } - var restProps = _objectWithoutProperties(_props, ['children', 'noResultsText']); + _this2.setState({ + isLoading: false, + options: options + }); + } + }; + + // Ignore all but the most recent request + this._callback = callback; - var _state = this.state; - var isLoading = _state.isLoading; - var options = _state.options; + var promise = loadOptions(inputValue, callback); + if (promise) { + promise.then(function (data) { + return callback(null, data); + }, function (error) { + return callback(error); + }); + } + + if (this._callback && !this.state.isLoading) { + this.setState({ + isLoading: true + }); + } - if (this.props.isLoading) isLoading = true; - var placeholder = isLoading ? this.props.loadingPlaceholder : this.props.placeholder; - if (isLoading) { - noResultsText = this.props.searchingText; - } else if (!options.length && this._lastInput.length < this.props.minimumInput) { - noResultsText = this.props.searchPromptText; + return inputValue; } + }, { + key: '_onInputChange', + value: function _onInputChange(inputValue) { + var _props2 = this.props; + var ignoreAccents = _props2.ignoreAccents; + var ignoreCase = _props2.ignoreCase; - var props = _extends({}, restProps, { - isLoading: isLoading, - noResultsText: noResultsText, - onInputChange: this.loadOptions, - options: options, - placeholder: placeholder, - ref: function ref(_ref) { - _this2.select = _ref; + if (ignoreAccents) { + inputValue = (0, _utilsStripDiacritics2['default'])(inputValue); } - }); - return children(props); - } -}); + if (ignoreCase) { + inputValue = inputValue.toLowerCase(); + } + + return this.loadOptions(inputValue); + } + }, { + key: 'render', + value: function render() { + var _props3 = this.props; + var children = _props3.children; + var loadingPlaceholder = _props3.loadingPlaceholder; + var placeholder = _props3.placeholder; + var searchPromptText = _props3.searchPromptText; + var _state = this.state; + var isLoading = _state.isLoading; + var options = _state.options; + + var props = { + noResultsText: isLoading ? loadingPlaceholder : searchPromptText, + placeholder: isLoading ? loadingPlaceholder : placeholder, + options: isLoading ? [] : options + }; + + return children(_extends({}, this.props, props, { + isLoading: isLoading, + onInputChange: this._onInputChange + })); + } + }]); + + return Async; +})(_react.Component); + +exports['default'] = Async; + +Async.propTypes = propTypes; +Async.defaultProps = defaultProps; function defaultChildren(props) { return _react2['default'].createElement(_Select2['default'], props); }; - -module.exports = Async; +module.exports = exports['default']; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{"./Select":5,"./utils/stripDiacritics":10}],2:[function(require,module,exports){ @@ -237,10 +239,6 @@ var AsyncCreatable = _react2['default'].createClass({ onInputChange: function (input) { creatableProps.onInputChange(input); return asyncProps.onInputChange(input); - }, - ref: function (ref) { - creatableProps.ref(ref); - asyncProps.ref(ref); } })); } diff --git a/lib/Async.js b/lib/Async.js index 7dbae82be6..772e074cf5 100644 --- a/lib/Async.js +++ b/lib/Async.js @@ -1,10 +1,22 @@ 'use strict'; +Object.defineProperty(exports, '__esModule', { + value: true +}); + 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; }; +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + +var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + +function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var _react = require('react'); @@ -18,184 +30,174 @@ var _utilsStripDiacritics = require('./utils/stripDiacritics'); var _utilsStripDiacritics2 = _interopRequireDefault(_utilsStripDiacritics); -var requestId = 0; +var propTypes = { + autoload: _react2['default'].PropTypes.bool.isRequired, // automatically call the `loadOptions` prop on-mount; defaults to true + cache: _react2['default'].PropTypes.any, // object to use to cache results; set to null/false to disable caching + children: _react2['default'].PropTypes.func.isRequired, // Child function responsible for creating the inner Select component; (props: Object): PropTypes.element + ignoreAccents: _react2['default'].PropTypes.bool, // strip diacritics when filtering; defaults to true + ignoreCase: _react2['default'].PropTypes.bool, // perform case-insensitive filtering; defaults to true + loadingPlaceholder: _react.PropTypes.string.isRequired, // replaces the placeholder while options are loading + loadOptions: _react2['default'].PropTypes.func.isRequired, // callback to load options asynchronously; (inputValue: string, callback: Function): ?Promise + options: _react.PropTypes.array.isRequired, // array of options + placeholder: _react2['default'].PropTypes.oneOfType([// field placeholder, displayed when there's no value (shared with Select) + _react2['default'].PropTypes.string, _react2['default'].PropTypes.node]), + searchPromptText: _react2['default'].PropTypes.oneOfType([// label to prompt for search input + _react2['default'].PropTypes.string, _react2['default'].PropTypes.node]) +}; -function initCache(cache) { - if (cache && typeof cache !== 'object') { - cache = {}; - } - return cache ? cache : null; -} - -function updateCache(cache, input, data) { - if (!cache) return; - cache[input] = data; -} - -function getFromCache(cache, input) { - if (!cache) return; - for (var i = input.length; i >= 0; --i) { - var cacheKey = input.slice(0, i); - if (cache[cacheKey] && (input === cacheKey || cache[cacheKey].complete)) { - return cache[cacheKey]; - } - } -} - -function thenPromise(promise, callback) { - if (!promise || typeof promise.then !== 'function') return; - return promise.then(function (data) { - callback(null, data); - }, function (err) { - callback(err); - }); -} - -var stringOrNode = _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.string, _react2['default'].PropTypes.node]); - -var Async = _react2['default'].createClass({ - displayName: 'Async', - - propTypes: { - cache: _react2['default'].PropTypes.any, // object to use to cache results, can be null to disable cache - children: _react2['default'].PropTypes.func, // Child function responsible for creating the inner Select component; (props: Object): PropTypes.element - ignoreAccents: _react2['default'].PropTypes.bool, // whether to strip diacritics when filtering (shared with Select) - ignoreCase: _react2['default'].PropTypes.bool, // whether to perform case-insensitive filtering (shared with Select) - isLoading: _react2['default'].PropTypes.bool, // overrides the isLoading state when set to true - loadOptions: _react2['default'].PropTypes.func.isRequired, // function to call to load options asynchronously - loadingPlaceholder: _react2['default'].PropTypes.string, // replaces the placeholder while options are loading - minimumInput: _react2['default'].PropTypes.number, // the minimum number of characters that trigger loadOptions - noResultsText: stringOrNode, // placeholder displayed when there are no matching search results (shared with Select) - onInputChange: _react2['default'].PropTypes.func, // onInputChange handler: function (inputValue) {} - placeholder: stringOrNode, // field placeholder, displayed when there's no value (shared with Select) - searchPromptText: stringOrNode, // label to prompt for search input - searchingText: _react2['default'].PropTypes.string }, - // message to display while options are loading - getDefaultProps: function getDefaultProps() { - return { - cache: true, - ignoreAccents: true, - ignoreCase: true, - loadingPlaceholder: 'Loading...', - minimumInput: 0, - searchingText: 'Searching...', - searchPromptText: 'Type to search' - }; - }, - getInitialState: function getInitialState() { - return { - cache: initCache(this.props.cache), +var defaultProps = { + autoload: true, + cache: {}, + children: defaultChildren, + ignoreAccents: true, + ignoreCase: true, + loadingPlaceholder: 'Loading...', + options: [], + searchPromptText: 'Type to search' +}; + +var Async = (function (_Component) { + _inherits(Async, _Component); + + function Async(props, context) { + _classCallCheck(this, Async); + + _get(Object.getPrototypeOf(Async.prototype), 'constructor', this).call(this, props, context); + + this.state = { isLoading: false, - options: [] + options: props.options }; - }, - componentWillMount: function componentWillMount() { - this._lastInput = ''; - }, - componentDidMount: function componentDidMount() { - this.loadOptions(''); - }, - componentWillReceiveProps: function componentWillReceiveProps(nextProps) { - if (nextProps.cache !== this.props.cache) { - this.setState({ - cache: initCache(nextProps.cache) - }); + + this._onInputChange = this._onInputChange.bind(this); + } + + _createClass(Async, [{ + key: 'componentDidMount', + value: function componentDidMount() { + var autoload = this.props.autoload; + + if (autoload) { + this.loadOptions(''); + } } - }, - focus: function focus() { - this.select.focus(); - }, - resetState: function resetState() { - this._currentRequestId = -1; - this.setState({ - isLoading: false, - options: [] - }); - }, - getResponseHandler: function getResponseHandler(input) { - var _this = this; - - var _requestId = this._currentRequestId = requestId++; - return function (err, data) { - if (err) throw err; - if (!_this.isMounted()) return; - updateCache(_this.state.cache, input, data); - if (_requestId !== _this._currentRequestId) return; - _this.setState({ - isLoading: false, - options: data && data.options || [] + }, { + key: 'componentWillUpdate', + value: function componentWillUpdate(nextProps, nextState) { + var _this = this; + + var propertiesToSync = ['options']; + propertiesToSync.forEach(function (prop) { + if (_this.props[prop] !== nextProps[prop]) { + _this.setState(_defineProperty({}, prop, nextProps[prop])); + } }); - }; - }, - loadOptions: function loadOptions(input) { - if (this.props.onInputChange) { - var nextState = this.props.onInputChange(input); - // Note: != used deliberately here to catch undefined and null - if (nextState != null) { - input = '' + nextState; - } } - if (this.props.ignoreAccents) input = (0, _utilsStripDiacritics2['default'])(input); - if (this.props.ignoreCase) input = input.toLowerCase(); + }, { + key: 'loadOptions', + value: function loadOptions(inputValue) { + var _this2 = this; + + var _props = this.props; + var cache = _props.cache; + var loadOptions = _props.loadOptions; + + if (cache && cache.hasOwnProperty(inputValue)) { + this.setState({ + options: cache[inputValue] + }); + + return; + } + + var callback = function callback(error, data) { + if (callback === _this2._callback) { + _this2._callback = null; + + var options = data && data.options || []; + + if (cache) { + cache[inputValue] = options; + } + + _this2.setState({ + isLoading: false, + options: options + }); + } + }; + + // Ignore all but the most recent request + this._callback = callback; + + var promise = loadOptions(inputValue, callback); + if (promise) { + promise.then(function (data) { + return callback(null, data); + }, function (error) { + return callback(error); + }); + } + + if (this._callback && !this.state.isLoading) { + this.setState({ + isLoading: true + }); + } - this._lastInput = input; - if (input.length < this.props.minimumInput) { - return this.resetState(); + return inputValue; } - var cacheResult = getFromCache(this.state.cache, input); - if (cacheResult && Array.isArray(cacheResult.options)) { - return this.setState({ - options: cacheResult.options - }); + }, { + key: '_onInputChange', + value: function _onInputChange(inputValue) { + var _props2 = this.props; + var ignoreAccents = _props2.ignoreAccents; + var ignoreCase = _props2.ignoreCase; + + if (ignoreAccents) { + inputValue = (0, _utilsStripDiacritics2['default'])(inputValue); + } + + if (ignoreCase) { + inputValue = inputValue.toLowerCase(); + } + + return this.loadOptions(inputValue); } - this.setState({ - isLoading: true - }); - var responseHandler = this.getResponseHandler(input); - var inputPromise = thenPromise(this.props.loadOptions(input, responseHandler), responseHandler); - return inputPromise ? inputPromise.then(function () { - return input; - }) : input; - }, - render: function render() { - var _this2 = this; - - var _props = this.props; - var _props$children = _props.children; - var children = _props$children === undefined ? defaultChildren : _props$children; - var noResultsText = _props.noResultsText; - - var restProps = _objectWithoutProperties(_props, ['children', 'noResultsText']); - - var _state = this.state; - var isLoading = _state.isLoading; - var options = _state.options; - - if (this.props.isLoading) isLoading = true; - var placeholder = isLoading ? this.props.loadingPlaceholder : this.props.placeholder; - if (isLoading) { - noResultsText = this.props.searchingText; - } else if (!options.length && this._lastInput.length < this.props.minimumInput) { - noResultsText = this.props.searchPromptText; + }, { + key: 'render', + value: function render() { + var _props3 = this.props; + var children = _props3.children; + var loadingPlaceholder = _props3.loadingPlaceholder; + var placeholder = _props3.placeholder; + var searchPromptText = _props3.searchPromptText; + var _state = this.state; + var isLoading = _state.isLoading; + var options = _state.options; + + var props = { + noResultsText: isLoading ? loadingPlaceholder : searchPromptText, + placeholder: isLoading ? loadingPlaceholder : placeholder, + options: isLoading ? [] : options + }; + + return children(_extends({}, this.props, props, { + isLoading: isLoading, + onInputChange: this._onInputChange + })); } + }]); - var props = _extends({}, restProps, { - isLoading: isLoading, - noResultsText: noResultsText, - onInputChange: this.loadOptions, - options: options, - placeholder: placeholder, - ref: function ref(_ref) { - _this2.select = _ref; - } - }); + return Async; +})(_react.Component); - return children(props); - } -}); +exports['default'] = Async; + +Async.propTypes = propTypes; +Async.defaultProps = defaultProps; function defaultChildren(props) { return _react2['default'].createElement(_Select2['default'], props); }; - -module.exports = Async; \ No newline at end of file +module.exports = exports['default']; \ No newline at end of file diff --git a/lib/AsyncCreatable.js b/lib/AsyncCreatable.js index 1ae4ffe5fe..9db11e1530 100644 --- a/lib/AsyncCreatable.js +++ b/lib/AsyncCreatable.js @@ -30,10 +30,6 @@ var AsyncCreatable = _react2['default'].createClass({ onInputChange: function (input) { creatableProps.onInputChange(input); return asyncProps.onInputChange(input); - }, - ref: function (ref) { - creatableProps.ref(ref); - asyncProps.ref(ref); } })); }