diff --git a/.nvmrc b/.nvmrc index a2f28f43be..559d6961d5 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -8.4.0 +8.16.1 diff --git a/HISTORY.md b/HISTORY.md index 9cd628841b..ad76cb30e2 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,4 +1,6 @@ # React-Select +## v1.4.0 / 2019-09-27 +* support duplicate for multiselect by passing `duplicate` prop to Select component ## v1.3.0 / 2018-06-23 * [#2777](https://github.com/JedWatson/react-select/pull/2777) pass entire event to `shouldKeyDownEventCreateNewOption` diff --git a/dist/react-select.es.js b/dist/react-select.es.js index c198956c8e..f8a322897c 100644 --- a/dist/react-select.es.js +++ b/dist/react-select.es.js @@ -407,6 +407,34 @@ var possibleConstructorReturn = function (self, call) { return call && (typeof call === "object" || typeof call === "function") ? call : self; }; + + + + + + + + + + + + + + + + + + +var toConsumableArray = function (arr) { + if (Array.isArray(arr)) { + for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; + + return arr2; + } else { + return Array.from(arr); + } +}; + var Option = function (_React$Component) { inherits(Option, _React$Component); @@ -1285,13 +1313,17 @@ var Select$1 = function (_React$Component) { inputValue: this.handleInputValueChange(updatedValue), isOpen: !this.props.closeOnSelect }, function () { - var valueArray = _this3.getValueArray(_this3.props.value); - if (valueArray.some(function (i) { - return i[_this3.props.valueKey] === value[_this3.props.valueKey]; - })) { - _this3.removeValue(value); - } else { + if (_this3.props.duplicate) { _this3.addValue(value); + } else { + var valueArray = _this3.getValueArray(_this3.props.value); + if (valueArray.some(function (i) { + return i[_this3.props.valueKey] === value[_this3.props.valueKey]; + })) { + _this3.removeValue(value); + } else { + _this3.addValue(value); + } } }); } else { @@ -1338,9 +1370,24 @@ var Select$1 = function (_React$Component) { var _this4 = this; var valueArray = this.getValueArray(this.props.value); - this.setValue(valueArray.filter(function (i) { - return i[_this4.props.valueKey] !== value[_this4.props.valueKey]; - })); + + if (this.props.duplicate) { + valueArray = [].concat(toConsumableArray(valueArray)); + valueArray.reverse(); + var index = valueArray.findIndex(function (i) { + return i[_this4.props.valueKey] === value[_this4.props.valueKey]; + }); + if (index > -1) { + valueArray.splice(index, 1); + } + valueArray.reverse(); + this.setValue(valueArray); + } else { + this.setValue(valueArray.filter(function (i) { + return i[_this4.props.valueKey] !== value[_this4.props.valueKey]; + })); + } + this.focus(); } }, { @@ -1922,6 +1969,7 @@ Select$1.propTypes = { deleteRemoves: PropTypes.bool, // whether delete removes an item if there is no text input delimiter: PropTypes.string, // delimiter to use to join multiple values for the hidden field value disabled: PropTypes.bool, // whether the Select is disabled or not + duplicate: PropTypes.bool, // whether the Select allows the same option to be selected multiple times escapeClearsValue: PropTypes.bool, // whether escape clears the value when the menu is closed filterOption: PropTypes.func, // method to filter a single option (option, filterString) filterOptions: PropTypes.any, // boolean to enable default filtering or function to filter the options array ([options], filterString, [values]) @@ -1994,6 +2042,7 @@ Select$1.defaultProps = { deleteRemoves: true, delimiter: ',', disabled: false, + duplicate: false, escapeClearsValue: true, filterOptions: filterOptions, ignoreAccents: true, diff --git a/dist/react-select.js b/dist/react-select.js index a76dcfc364..26ea4d734e 100644 --- a/dist/react-select.js +++ b/dist/react-select.js @@ -412,6 +412,34 @@ var possibleConstructorReturn = function (self, call) { return call && (typeof call === "object" || typeof call === "function") ? call : self; }; + + + + + + + + + + + + + + + + + + +var toConsumableArray = function (arr) { + if (Array.isArray(arr)) { + for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; + + return arr2; + } else { + return Array.from(arr); + } +}; + var Option = function (_React$Component) { inherits(Option, _React$Component); @@ -1290,13 +1318,17 @@ var Select$1 = function (_React$Component) { inputValue: this.handleInputValueChange(updatedValue), isOpen: !this.props.closeOnSelect }, function () { - var valueArray = _this3.getValueArray(_this3.props.value); - if (valueArray.some(function (i) { - return i[_this3.props.valueKey] === value[_this3.props.valueKey]; - })) { - _this3.removeValue(value); - } else { + if (_this3.props.duplicate) { _this3.addValue(value); + } else { + var valueArray = _this3.getValueArray(_this3.props.value); + if (valueArray.some(function (i) { + return i[_this3.props.valueKey] === value[_this3.props.valueKey]; + })) { + _this3.removeValue(value); + } else { + _this3.addValue(value); + } } }); } else { @@ -1343,9 +1375,24 @@ var Select$1 = function (_React$Component) { var _this4 = this; var valueArray = this.getValueArray(this.props.value); - this.setValue(valueArray.filter(function (i) { - return i[_this4.props.valueKey] !== value[_this4.props.valueKey]; - })); + + if (this.props.duplicate) { + valueArray = [].concat(toConsumableArray(valueArray)); + valueArray.reverse(); + var index = valueArray.findIndex(function (i) { + return i[_this4.props.valueKey] === value[_this4.props.valueKey]; + }); + if (index > -1) { + valueArray.splice(index, 1); + } + valueArray.reverse(); + this.setValue(valueArray); + } else { + this.setValue(valueArray.filter(function (i) { + return i[_this4.props.valueKey] !== value[_this4.props.valueKey]; + })); + } + this.focus(); } }, { @@ -1927,6 +1974,7 @@ Select$1.propTypes = { deleteRemoves: PropTypes.bool, // whether delete removes an item if there is no text input delimiter: PropTypes.string, // delimiter to use to join multiple values for the hidden field value disabled: PropTypes.bool, // whether the Select is disabled or not + duplicate: PropTypes.bool, // whether the Select allows the same option to be selected multiple times escapeClearsValue: PropTypes.bool, // whether escape clears the value when the menu is closed filterOption: PropTypes.func, // method to filter a single option (option, filterString) filterOptions: PropTypes.any, // boolean to enable default filtering or function to filter the options array ([options], filterString, [values]) @@ -1999,6 +2047,7 @@ Select$1.defaultProps = { deleteRemoves: true, delimiter: ',', disabled: false, + duplicate: false, escapeClearsValue: true, filterOptions: filterOptions, ignoreAccents: true, diff --git a/dist/react-select.min.js b/dist/react-select.min.js index 7ce8b7f14f..4cb7d89f4e 100644 --- a/dist/react-select.min.js +++ b/dist/react-select.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("react-input-autosize"),require("classnames"),require("prop-types"),require("react"),require("react-dom")):"function"==typeof define&&define.amd?define(["react-input-autosize","classnames","prop-types","react","react-dom"],t):e.Select=t(e.AutosizeInput,e.classNames,e.PropTypes,e.React,e.ReactDOM)}(this,function(e,t,u,n,s){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e,t=t&&t.hasOwnProperty("default")?t.default:t,u=u&&u.hasOwnProperty("default")?u.default:u;var o="default"in n?n.default:n,i=[{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}],a=function(e){for(var t=0;t-1)return!1;if(n.filterOption)return n.filterOption.call(void 0,e,t);if(!t)return!0;var s=e[n.valueKey],o=e[n.labelKey],i=r(s),l=r(o);if(!i&&!l)return!1;var p=i?String(s):null,h=l?String(o):null;return n.ignoreAccents&&(p&&"label"!==n.matchProp&&(p=a(p)),h&&"value"!==n.matchProp&&(h=a(h))),n.ignoreCase&&(p&&"label"!==n.matchProp&&(p=p.toLowerCase()),h&&"value"!==n.matchProp&&(h=h.toLowerCase())),"start"===n.matchPos?p&&"label"!==n.matchProp&&p.substr(0,t.length)===t||h&&"value"!==n.matchProp&&h.substr(0,t.length)===t:p&&"label"!==n.matchProp&&p.indexOf(t)>=0||h&&"value"!==n.matchProp&&h.indexOf(t)>=0})},p=function(e){var u=e.focusedOption,n=e.focusOption,s=e.inputValue,i=e.instancePrefix,a=e.onFocus,r=e.onOptionRef,l=e.onSelect,p=e.optionClassName,h=e.optionComponent,c=e.optionRenderer,d=e.options,f=e.removeValue,v=e.selectValue,E=e.valueArray,b=e.valueKey,g=h;return d.map(function(e,h){var d=E&&E.some(function(t){return t[b]===e[b]}),y=e===u,m=t(p,{"Select-option":!0,"is-selected":d,"is-focused":y,"is-disabled":e.disabled});return o.createElement(g,{className:m,focusOption:n,inputValue:s,instancePrefix:i,isDisabled:e.disabled,isFocused:y,isSelected:d,key:"option-"+h+"-"+e[b],onFocus:a,onSelect:l,option:e,optionIndex:h,ref:function(e){r(e,y)},removeValue:f,selectValue:v},c(e,h,s))})},h=function(e){e.preventDefault(),e.stopPropagation(),"A"===e.target.tagName&&"href"in e.target&&(e.target.target?window.open(e.target.href,e.target.target):window.location.href=e.target.href)},c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},d=(function(){function e(e){this.value=e}function t(t){var u,n;function s(u,n){try{var i=t[u](n),a=i.value;a instanceof e?Promise.resolve(a.value).then(function(e){s("next",e)},function(e){s("throw",e)}):o(i.done?"return":"normal",i.value)}catch(e){o("throw",e)}}function o(e,t){switch(e){case"return":u.resolve({value:t,done:!0});break;case"throw":u.reject(t);break;default:u.resolve({value:t,done:!1})}(u=u.next)?s(u.key,u.arg):n=null}this._invoke=function(e,t){return new Promise(function(o,i){var a={key:e,arg:t,resolve:o,reject:i,next:null};n?n=n.next=a:(u=n=a,s(e,t))})},"function"!=typeof t.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(t.prototype[Symbol.asyncIterator]=function(){return this}),t.prototype.next=function(e){return this._invoke("next",e)},t.prototype.throw=function(e){return this._invoke("throw",e)},t.prototype.return=function(e){return this._invoke("return",e)}}(),function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}),f=function(){function e(e,t){for(var u=0;u=0||Object.prototype.hasOwnProperty.call(e,n)&&(u[n]=e[n]);return u},y=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},m=function(e){function u(e){d(this,u);var t=y(this,(u.__proto__||Object.getPrototypeOf(u)).call(this,e));return t.handleMouseDown=t.handleMouseDown.bind(t),t.handleMouseEnter=t.handleMouseEnter.bind(t),t.handleMouseMove=t.handleMouseMove.bind(t),t.handleTouchStart=t.handleTouchStart.bind(t),t.handleTouchEnd=t.handleTouchEnd.bind(t),t.handleTouchMove=t.handleTouchMove.bind(t),t.onFocus=t.onFocus.bind(t),t}return b(u,e),f(u,[{key:"handleMouseDown",value:function(e){e.preventDefault(),e.stopPropagation(),this.props.onSelect(this.props.option,e)}},{key:"handleMouseEnter",value:function(e){this.onFocus(e)}},{key:"handleMouseMove",value:function(e){this.onFocus(e)}},{key:"handleTouchEnd",value:function(e){this.dragging||this.handleMouseDown(e)}},{key:"handleTouchMove",value:function(){this.dragging=!0}},{key:"handleTouchStart",value:function(){this.dragging=!1}},{key:"onFocus",value:function(e){this.props.isFocused||this.props.onFocus(this.props.option,e)}},{key:"render",value:function(){var e=this.props,u=e.option,n=e.instancePrefix,s=e.optionIndex,i=t(this.props.className,u.className);return u.disabled?o.createElement("div",{className:i,onMouseDown:h,onClick:h},this.props.children):o.createElement("div",{className:i,style:u.style,role:"option","aria-label":u.label,onMouseDown:this.handleMouseDown,onMouseEnter:this.handleMouseEnter,onMouseMove:this.handleMouseMove,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove,onTouchEnd:this.handleTouchEnd,id:n+"-option-"+s,title:u.title},this.props.children)}}]),u}(o.Component),F=function(e){function u(e){d(this,u);var t=y(this,(u.__proto__||Object.getPrototypeOf(u)).call(this,e));return t.handleMouseDown=t.handleMouseDown.bind(t),t.onRemove=t.onRemove.bind(t),t.handleTouchEndRemove=t.handleTouchEndRemove.bind(t),t.handleTouchMove=t.handleTouchMove.bind(t),t.handleTouchStart=t.handleTouchStart.bind(t),t}return b(u,e),f(u,[{key:"handleMouseDown",value:function(e){if("mousedown"!==e.type||0===e.button)return this.props.onClick?(e.stopPropagation(),void this.props.onClick(this.props.value,e)):void(this.props.value.href&&e.stopPropagation())}},{key:"onRemove",value:function(e){e.preventDefault(),e.stopPropagation(),this.props.onRemove(this.props.value)}},{key:"handleTouchEndRemove",value:function(e){this.dragging||this.onRemove(e)}},{key:"handleTouchMove",value:function(){this.dragging=!0}},{key:"handleTouchStart",value:function(){this.dragging=!1}},{key:"renderRemoveIcon",value:function(){if(!this.props.disabled&&this.props.onRemove)return o.createElement("span",{className:"Select-value-icon","aria-hidden":"true",onMouseDown:this.onRemove,onTouchEnd:this.handleTouchEndRemove,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove},"×")}},{key:"renderLabel",value:function(){return this.props.onClick||this.props.value.href?o.createElement("a",{className:"Select-value-label",href:this.props.value.href,target:this.props.value.target,onMouseDown:this.handleMouseDown,onTouchEnd:this.handleMouseDown},this.props.children):o.createElement("span",{className:"Select-value-label",role:"option","aria-selected":"true",id:this.props.id},this.props.children)}},{key:"render",value:function(){return o.createElement("div",{className:t("Select-value",this.props.value.disabled?"Select-value-disabled":"",this.props.value.className),style:this.props.value.style,title:this.props.value.title},this.renderRemoveIcon(),this.renderLabel())}}]),u}(o.Component),C=function(e){return"string"==typeof e?e:null!==e&&JSON.stringify(e)||""},O=(u.oneOfType([u.string,u.node]),u.oneOfType([u.string,u.number]),1),A=function(e,t){var u=void 0===e?"undefined":c(e);if("string"!==u&&"number"!==u&&"boolean"!==u)return e;var n=t.options,s=t.valueKey;if(n)for(var o=0;oa||ic.bottom?p.scrollTop=l.offsetTop+l.clientHeight-p.offsetHeight:h.topt.offsetHeight&&t.scrollHeight-t.offsetHeight-t.scrollTop<=0&&this.props.onMenuScrollToBottom()}}},{key:"getOptionLabel",value:function(e){return e[this.props.labelKey]}},{key:"getValueArray",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,u="object"===(void 0===t?"undefined":c(t))?t:this.props;if(u.multi){if("string"==typeof e&&(e=e.split(u.delimiter)),!Array.isArray(e)){if(null===e||void 0===e)return[];e=[e]}return e.map(function(e){return A(e,u)}).filter(function(e){return e})}var n=A(e,u);return n?[n]:[]}},{key:"setValue",value:function(e){var t=this;if(this.props.autoBlur&&this.blurInput(),this.props.required){var u=D(e,this.props.multi);this.setState({required:u})}this.props.simpleValue&&e&&(e=this.props.multi?e.map(function(e){return e[t.props.valueKey]}).join(this.props.delimiter):e[this.props.valueKey]),this.props.onChange&&this.props.onChange(e)}},{key:"selectValue",value:function(e){var t=this;this.props.closeOnSelect&&(this.hasScrolledToOption=!1);var u=this.props.onSelectResetsInput?"":this.state.inputValue;this.props.multi?this.setState({focusedIndex:null,inputValue:this.handleInputValueChange(u),isOpen:!this.props.closeOnSelect},function(){t.getValueArray(t.props.value).some(function(u){return u[t.props.valueKey]===e[t.props.valueKey]})?t.removeValue(e):t.addValue(e)}):this.setState({inputValue:this.handleInputValueChange(u),isOpen:!this.props.closeOnSelect,isPseudoFocused:this.state.isFocused},function(){t.setValue(e)})}},{key:"addValue",value:function(e){var t=this.getValueArray(this.props.value),u=this._visibleOptions.filter(function(e){return!e.disabled}),n=u.indexOf(e);this.setValue(t.concat(e)),this.props.closeOnSelect&&(u.length-1===n?this.focusOption(u[n-1]):u.length>n&&this.focusOption(u[n+1]))}},{key:"popValue",value:function(){var e=this.getValueArray(this.props.value);e.length&&!1!==e[e.length-1].clearableValue&&this.setValue(this.props.multi?e.slice(0,e.length-1):null)}},{key:"removeValue",value:function(e){var t=this,u=this.getValueArray(this.props.value);this.setValue(u.filter(function(u){return u[t.props.valueKey]!==e[t.props.valueKey]})),this.focus()}},{key:"clearValue",value:function(e){e&&"mousedown"===e.type&&0!==e.button||(e.preventDefault(),this.setValue(this.getResetValue()),this.setState({inputValue:this.handleInputValueChange(""),isOpen:!1},this.focus),this._focusAfterClear=!0)}},{key:"getResetValue",value:function(){return void 0!==this.props.resetValue?this.props.resetValue:this.props.multi?[]:null}},{key:"focusOption",value:function(e){this.setState({focusedOption:e})}},{key:"focusNextOption",value:function(){this.focusAdjacentOption("next")}},{key:"focusPreviousOption",value:function(){this.focusAdjacentOption("previous")}},{key:"focusPageUpOption",value:function(){this.focusAdjacentOption("page_up")}},{key:"focusPageDownOption",value:function(){this.focusAdjacentOption("page_down")}},{key:"focusStartOption",value:function(){this.focusAdjacentOption("start")}},{key:"focusEndOption",value:function(){this.focusAdjacentOption("end")}},{key:"focusAdjacentOption",value:function(e){var t=this._visibleOptions.map(function(e,t){return{option:e,index:t}}).filter(function(e){return!e.option.disabled});if(this._scrollToFocusedOptionOnUpdate=!0,!this.state.isOpen){var u={focusedOption:this._focusedOption||(t.length?t["next"===e?0:t.length-1].option:null),isOpen:!0};return this.props.onSelectResetsInput&&(u.inputValue=""),void this.setState(u)}if(t.length){for(var n=-1,s=0;s0?n-=1:n=t.length-1;else if("start"===e)n=0;else if("end"===e)n=t.length-1;else if("page_up"===e){var o=n-this.props.pageSize;n=o<0?0:o}else if("page_down"===e){var i=n+this.props.pageSize;n=i>t.length-1?t.length-1:i}-1===n&&(n=0),this.setState({focusedIndex:t[n].index,focusedOption:t[n].option})}}},{key:"getFocusedOption",value:function(){return this._focusedOption}},{key:"selectFocusedOption",value:function(){if(this._focusedOption)return this.selectValue(this._focusedOption)}},{key:"renderLoading",value:function(){if(this.props.isLoading)return o.createElement("span",{className:"Select-loading-zone","aria-hidden":"true"},o.createElement("span",{className:"Select-loading"}))}},{key:"renderValue",value:function(e,t){var u=this,n=this.props.valueRenderer||this.getOptionLabel,s=this.props.valueComponent;if(!e.length)return function(e,t,u){var n=e.inputValue,s=e.isPseudoFocused,o=e.isFocused,i=t.onSelectResetsInput;return!n||!i&&!u&&!s&&!o}(this.state,this.props,t)?o.createElement("div",{className:"Select-placeholder"},this.props.placeholder):null;var i,a,r,l,p,h,c=this.props.onValueClick?this.handleValueClick:null;return this.props.multi?e.map(function(t,i){return o.createElement(s,{disabled:u.props.disabled||!1===t.clearableValue,id:u._instancePrefix+"-value-"+i,instancePrefix:u._instancePrefix,key:"value-"+i+"-"+t[u.props.valueKey],onClick:c,onRemove:u.removeValue,placeholder:u.props.placeholder,value:t,values:e},n(t,i),o.createElement("span",{className:"Select-aria-only"}," "))}):(i=this.state,a=this.props,r=i.inputValue,l=i.isPseudoFocused,p=i.isFocused,h=a.onSelectResetsInput,r&&(h||!p&&l||p&&!l)?void 0:(t&&(c=null),o.createElement(s,{disabled:this.props.disabled,id:this._instancePrefix+"-value-item",instancePrefix:this._instancePrefix,onClick:c,placeholder:this.props.placeholder,value:e[0]},n(e[0]))))}},{key:"renderInput",value:function(u,n){var s,i=this,a=t("Select-input",this.props.inputProps.className),r=this.state.isOpen,l=t((v(s={},this._instancePrefix+"-list",r),v(s,this._instancePrefix+"-backspace-remove-message",this.props.multi&&!this.props.disabled&&this.state.isFocused&&!this.state.inputValue),s)),p=this.state.inputValue;!p||this.props.onSelectResetsInput||this.state.isFocused||(p="");var h=E({},this.props.inputProps,{"aria-activedescendant":r?this._instancePrefix+"-option-"+n:this._instancePrefix+"-value","aria-describedby":this.props["aria-describedby"],"aria-expanded":""+r,"aria-haspopup":""+r,"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],"aria-owns":l,onBlur:this.handleInputBlur,onChange:this.handleInputChange,onFocus:this.handleInputFocus,ref:function(e){return i.input=e},role:"combobox",required:this.state.required,tabIndex:this.props.tabIndex,value:p});if(this.props.inputRenderer)return this.props.inputRenderer(h);if(this.props.disabled||!this.props.searchable){var c=g(this.props.inputProps,[]),d=t(v({},this._instancePrefix+"-list",r));return o.createElement("div",E({},c,{"aria-expanded":r,"aria-owns":d,"aria-activedescendant":r?this._instancePrefix+"-option-"+n:this._instancePrefix+"-value","aria-disabled":""+this.props.disabled,"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],className:a,onBlur:this.handleInputBlur,onFocus:this.handleInputFocus,ref:function(e){return i.input=e},role:"combobox",style:{border:0,width:1,display:"inline-block"},tabIndex:this.props.tabIndex||0}))}return this.props.autosize?o.createElement(e,E({id:this.props.id},h,{className:a,minWidth:"5"})):o.createElement("div",{className:a,key:"input-wrap",style:{display:"inline-block"}},o.createElement("input",E({id:this.props.id},h)))}},{key:"renderClear",value:function(){var e=this.getValueArray(this.props.value);if(this.props.clearable&&e.length&&!this.props.disabled&&!this.props.isLoading){var t=this.props.multi?this.props.clearAllText:this.props.clearValueText,u=this.props.clearRenderer();return o.createElement("span",{"aria-label":t,className:"Select-clear-zone",onMouseDown:this.clearValue,onTouchEnd:this.handleTouchEndClearValue,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,title:t},u)}}},{key:"renderArrow",value:function(){if(this.props.arrowRenderer){var e=this.handleMouseDownOnArrow,t=this.state.isOpen,u=this.props.arrowRenderer({onMouseDown:e,isOpen:t});return u?o.createElement("span",{className:"Select-arrow-zone",onMouseDown:e},u):null}}},{key:"filterOptions",value:function(e){var t=this.state.inputValue,u=this.props.options||[];if(this.props.filterOptions){var n="function"==typeof this.props.filterOptions?this.props.filterOptions:l;return n(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,trimFilter:this.props.trimFilter,valueKey:this.props.valueKey})}return u}},{key:"onOptionRef",value:function(e,t){t&&(this.focused=e)}},{key:"renderMenu",value:function(e,t,u){return e&&e.length?this.props.menuRenderer({focusedOption:u,focusOption:this.focusOption,inputValue:this.state.inputValue,instancePrefix:this._instancePrefix,labelKey:this.props.labelKey,onFocus:this.focusOption,onOptionRef:this.onOptionRef,onSelect:this.selectValue,optionClassName:this.props.optionClassName,optionComponent:this.props.optionComponent,optionRenderer:this.props.optionRenderer||this.getOptionLabel,options:e,removeValue:this.removeValue,selectValue:this.selectValue,valueArray:t,valueKey:this.props.valueKey}):this.props.noResultsText?o.createElement("div",{className:"Select-noresults"},this.props.noResultsText):null}},{key:"renderHiddenField",value:function(e){var t=this;if(this.props.name){if(this.props.joinValues){var u=e.map(function(e){return C(e[t.props.valueKey])}).join(this.props.delimiter);return o.createElement("input",{disabled:this.props.disabled,name:this.props.name,ref:function(e){return t.value=e},type:"hidden",value:u})}return e.map(function(e,u){return o.createElement("input",{disabled:t.props.disabled,key:"hidden."+u,name:t.props.name,ref:"value"+u,type:"hidden",value:C(e[t.props.valueKey])})})}}},{key:"getFocusableOptionIndex",value:function(e){var t=this._visibleOptions;if(!t.length)return null;var u=this.props.valueKey,n=this.state.focusedOption||e;if(n&&!n.disabled){var s=-1;if(t.some(function(e,t){var o=e[u]===n[u];return o&&(s=t),o}),-1!==s)return s}for(var o=0;o-1)return!1;if(n.filterOption)return n.filterOption.call(void 0,e,t);if(!t)return!0;var s=e[n.valueKey],o=e[n.labelKey],i=r(s),l=r(o);if(!i&&!l)return!1;var p=i?String(s):null,h=l?String(o):null;return n.ignoreAccents&&(p&&"label"!==n.matchProp&&(p=a(p)),h&&"value"!==n.matchProp&&(h=a(h))),n.ignoreCase&&(p&&"label"!==n.matchProp&&(p=p.toLowerCase()),h&&"value"!==n.matchProp&&(h=h.toLowerCase())),"start"===n.matchPos?p&&"label"!==n.matchProp&&p.substr(0,t.length)===t||h&&"value"!==n.matchProp&&h.substr(0,t.length)===t:p&&"label"!==n.matchProp&&p.indexOf(t)>=0||h&&"value"!==n.matchProp&&h.indexOf(t)>=0})},p=function(e){var u=e.focusedOption,n=e.focusOption,s=e.inputValue,i=e.instancePrefix,a=e.onFocus,r=e.onOptionRef,l=e.onSelect,p=e.optionClassName,h=e.optionComponent,c=e.optionRenderer,d=e.options,f=e.removeValue,v=e.selectValue,E=e.valueArray,b=e.valueKey,g=h;return d.map(function(e,h){var d=E&&E.some(function(t){return t[b]===e[b]}),y=e===u,m=t(p,{"Select-option":!0,"is-selected":d,"is-focused":y,"is-disabled":e.disabled});return o.createElement(g,{className:m,focusOption:n,inputValue:s,instancePrefix:i,isDisabled:e.disabled,isFocused:y,isSelected:d,key:"option-"+h+"-"+e[b],onFocus:a,onSelect:l,option:e,optionIndex:h,ref:function(e){r(e,y)},removeValue:f,selectValue:v},c(e,h,s))})},h=function(e){e.preventDefault(),e.stopPropagation(),"A"===e.target.tagName&&"href"in e.target&&(e.target.target?window.open(e.target.href,e.target.target):window.location.href=e.target.href)},c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},d=(function(){function e(e){this.value=e}function t(t){var u,n;function s(u,n){try{var i=t[u](n),a=i.value;a instanceof e?Promise.resolve(a.value).then(function(e){s("next",e)},function(e){s("throw",e)}):o(i.done?"return":"normal",i.value)}catch(e){o("throw",e)}}function o(e,t){switch(e){case"return":u.resolve({value:t,done:!0});break;case"throw":u.reject(t);break;default:u.resolve({value:t,done:!1})}(u=u.next)?s(u.key,u.arg):n=null}this._invoke=function(e,t){return new Promise(function(o,i){var a={key:e,arg:t,resolve:o,reject:i,next:null};n?n=n.next=a:(u=n=a,s(e,t))})},"function"!=typeof t.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(t.prototype[Symbol.asyncIterator]=function(){return this}),t.prototype.next=function(e){return this._invoke("next",e)},t.prototype.throw=function(e){return this._invoke("throw",e)},t.prototype.return=function(e){return this._invoke("return",e)}}(),function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}),f=function(){function e(e,t){for(var u=0;u=0||Object.prototype.hasOwnProperty.call(e,n)&&(u[n]=e[n]);return u},y=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},m=function(e){function u(e){d(this,u);var t=y(this,(u.__proto__||Object.getPrototypeOf(u)).call(this,e));return t.handleMouseDown=t.handleMouseDown.bind(t),t.handleMouseEnter=t.handleMouseEnter.bind(t),t.handleMouseMove=t.handleMouseMove.bind(t),t.handleTouchStart=t.handleTouchStart.bind(t),t.handleTouchEnd=t.handleTouchEnd.bind(t),t.handleTouchMove=t.handleTouchMove.bind(t),t.onFocus=t.onFocus.bind(t),t}return b(u,e),f(u,[{key:"handleMouseDown",value:function(e){e.preventDefault(),e.stopPropagation(),this.props.onSelect(this.props.option,e)}},{key:"handleMouseEnter",value:function(e){this.onFocus(e)}},{key:"handleMouseMove",value:function(e){this.onFocus(e)}},{key:"handleTouchEnd",value:function(e){this.dragging||this.handleMouseDown(e)}},{key:"handleTouchMove",value:function(){this.dragging=!0}},{key:"handleTouchStart",value:function(){this.dragging=!1}},{key:"onFocus",value:function(e){this.props.isFocused||this.props.onFocus(this.props.option,e)}},{key:"render",value:function(){var e=this.props,u=e.option,n=e.instancePrefix,s=e.optionIndex,i=t(this.props.className,u.className);return u.disabled?o.createElement("div",{className:i,onMouseDown:h,onClick:h},this.props.children):o.createElement("div",{className:i,style:u.style,role:"option","aria-label":u.label,onMouseDown:this.handleMouseDown,onMouseEnter:this.handleMouseEnter,onMouseMove:this.handleMouseMove,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove,onTouchEnd:this.handleTouchEnd,id:n+"-option-"+s,title:u.title},this.props.children)}}]),u}(o.Component),F=function(e){function u(e){d(this,u);var t=y(this,(u.__proto__||Object.getPrototypeOf(u)).call(this,e));return t.handleMouseDown=t.handleMouseDown.bind(t),t.onRemove=t.onRemove.bind(t),t.handleTouchEndRemove=t.handleTouchEndRemove.bind(t),t.handleTouchMove=t.handleTouchMove.bind(t),t.handleTouchStart=t.handleTouchStart.bind(t),t}return b(u,e),f(u,[{key:"handleMouseDown",value:function(e){if("mousedown"!==e.type||0===e.button)return this.props.onClick?(e.stopPropagation(),void this.props.onClick(this.props.value,e)):void(this.props.value.href&&e.stopPropagation())}},{key:"onRemove",value:function(e){e.preventDefault(),e.stopPropagation(),this.props.onRemove(this.props.value)}},{key:"handleTouchEndRemove",value:function(e){this.dragging||this.onRemove(e)}},{key:"handleTouchMove",value:function(){this.dragging=!0}},{key:"handleTouchStart",value:function(){this.dragging=!1}},{key:"renderRemoveIcon",value:function(){if(!this.props.disabled&&this.props.onRemove)return o.createElement("span",{className:"Select-value-icon","aria-hidden":"true",onMouseDown:this.onRemove,onTouchEnd:this.handleTouchEndRemove,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove},"×")}},{key:"renderLabel",value:function(){return this.props.onClick||this.props.value.href?o.createElement("a",{className:"Select-value-label",href:this.props.value.href,target:this.props.value.target,onMouseDown:this.handleMouseDown,onTouchEnd:this.handleMouseDown},this.props.children):o.createElement("span",{className:"Select-value-label",role:"option","aria-selected":"true",id:this.props.id},this.props.children)}},{key:"render",value:function(){return o.createElement("div",{className:t("Select-value",this.props.value.disabled?"Select-value-disabled":"",this.props.value.className),style:this.props.value.style,title:this.props.value.title},this.renderRemoveIcon(),this.renderLabel())}}]),u}(o.Component),C=function(e){return"string"==typeof e?e:null!==e&&JSON.stringify(e)||""},O=1,A=function(e,t){var u=void 0===e?"undefined":c(e);if("string"!==u&&"number"!==u&&"boolean"!==u)return e;var n=t.options,s=t.valueKey;if(n)for(var o=0;oa||ic.bottom?p.scrollTop=l.offsetTop+l.clientHeight-p.offsetHeight:h.topt.offsetHeight&&t.scrollHeight-t.offsetHeight-t.scrollTop<=0&&this.props.onMenuScrollToBottom()}}},{key:"getOptionLabel",value:function(e){return e[this.props.labelKey]}},{key:"getValueArray",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,u="object"===(void 0===t?"undefined":c(t))?t:this.props;if(u.multi){if("string"==typeof e&&(e=e.split(u.delimiter)),!Array.isArray(e)){if(null===e||void 0===e)return[];e=[e]}return e.map(function(e){return A(e,u)}).filter(function(e){return e})}var n=A(e,u);return n?[n]:[]}},{key:"setValue",value:function(e){var t=this;if(this.props.autoBlur&&this.blurInput(),this.props.required){var u=D(e,this.props.multi);this.setState({required:u})}this.props.simpleValue&&e&&(e=this.props.multi?e.map(function(e){return e[t.props.valueKey]}).join(this.props.delimiter):e[this.props.valueKey]),this.props.onChange&&this.props.onChange(e)}},{key:"selectValue",value:function(e){var t=this;this.props.closeOnSelect&&(this.hasScrolledToOption=!1);var u=this.props.onSelectResetsInput?"":this.state.inputValue;this.props.multi?this.setState({focusedIndex:null,inputValue:this.handleInputValueChange(u),isOpen:!this.props.closeOnSelect},function(){t.props.duplicate?t.addValue(e):t.getValueArray(t.props.value).some(function(u){return u[t.props.valueKey]===e[t.props.valueKey]})?t.removeValue(e):t.addValue(e)}):this.setState({inputValue:this.handleInputValueChange(u),isOpen:!this.props.closeOnSelect,isPseudoFocused:this.state.isFocused},function(){t.setValue(e)})}},{key:"addValue",value:function(e){var t=this.getValueArray(this.props.value),u=this._visibleOptions.filter(function(e){return!e.disabled}),n=u.indexOf(e);this.setValue(t.concat(e)),this.props.closeOnSelect&&(u.length-1===n?this.focusOption(u[n-1]):u.length>n&&this.focusOption(u[n+1]))}},{key:"popValue",value:function(){var e=this.getValueArray(this.props.value);e.length&&!1!==e[e.length-1].clearableValue&&this.setValue(this.props.multi?e.slice(0,e.length-1):null)}},{key:"removeValue",value:function(e){var t=this,u=this.getValueArray(this.props.value);if(this.props.duplicate){(u=[].concat(function(e){if(Array.isArray(e)){for(var t=0,u=Array(e.length);t-1&&u.splice(n,1),u.reverse(),this.setValue(u)}else this.setValue(u.filter(function(u){return u[t.props.valueKey]!==e[t.props.valueKey]}));this.focus()}},{key:"clearValue",value:function(e){e&&"mousedown"===e.type&&0!==e.button||(e.preventDefault(),this.setValue(this.getResetValue()),this.setState({inputValue:this.handleInputValueChange(""),isOpen:!1},this.focus),this._focusAfterClear=!0)}},{key:"getResetValue",value:function(){return void 0!==this.props.resetValue?this.props.resetValue:this.props.multi?[]:null}},{key:"focusOption",value:function(e){this.setState({focusedOption:e})}},{key:"focusNextOption",value:function(){this.focusAdjacentOption("next")}},{key:"focusPreviousOption",value:function(){this.focusAdjacentOption("previous")}},{key:"focusPageUpOption",value:function(){this.focusAdjacentOption("page_up")}},{key:"focusPageDownOption",value:function(){this.focusAdjacentOption("page_down")}},{key:"focusStartOption",value:function(){this.focusAdjacentOption("start")}},{key:"focusEndOption",value:function(){this.focusAdjacentOption("end")}},{key:"focusAdjacentOption",value:function(e){var t=this._visibleOptions.map(function(e,t){return{option:e,index:t}}).filter(function(e){return!e.option.disabled});if(this._scrollToFocusedOptionOnUpdate=!0,!this.state.isOpen){var u={focusedOption:this._focusedOption||(t.length?t["next"===e?0:t.length-1].option:null),isOpen:!0};return this.props.onSelectResetsInput&&(u.inputValue=""),void this.setState(u)}if(t.length){for(var n=-1,s=0;s0?n-=1:n=t.length-1;else if("start"===e)n=0;else if("end"===e)n=t.length-1;else if("page_up"===e){var o=n-this.props.pageSize;n=o<0?0:o}else if("page_down"===e){var i=n+this.props.pageSize;n=i>t.length-1?t.length-1:i}-1===n&&(n=0),this.setState({focusedIndex:t[n].index,focusedOption:t[n].option})}}},{key:"getFocusedOption",value:function(){return this._focusedOption}},{key:"selectFocusedOption",value:function(){if(this._focusedOption)return this.selectValue(this._focusedOption)}},{key:"renderLoading",value:function(){if(this.props.isLoading)return o.createElement("span",{className:"Select-loading-zone","aria-hidden":"true"},o.createElement("span",{className:"Select-loading"}))}},{key:"renderValue",value:function(e,t){var u=this,n=this.props.valueRenderer||this.getOptionLabel,s=this.props.valueComponent;if(!e.length)return function(e,t,u){var n=e.inputValue,s=e.isPseudoFocused,o=e.isFocused,i=t.onSelectResetsInput;return!n||!i&&!u&&!s&&!o}(this.state,this.props,t)?o.createElement("div",{className:"Select-placeholder"},this.props.placeholder):null;var i,a,r,l,p,h,c=this.props.onValueClick?this.handleValueClick:null;return this.props.multi?e.map(function(t,i){return o.createElement(s,{disabled:u.props.disabled||!1===t.clearableValue,id:u._instancePrefix+"-value-"+i,instancePrefix:u._instancePrefix,key:"value-"+i+"-"+t[u.props.valueKey],onClick:c,onRemove:u.removeValue,placeholder:u.props.placeholder,value:t,values:e},n(t,i),o.createElement("span",{className:"Select-aria-only"}," "))}):(i=this.state,a=this.props,r=i.inputValue,l=i.isPseudoFocused,p=i.isFocused,h=a.onSelectResetsInput,r&&(h||!p&&l||p&&!l)?void 0:(t&&(c=null),o.createElement(s,{disabled:this.props.disabled,id:this._instancePrefix+"-value-item",instancePrefix:this._instancePrefix,onClick:c,placeholder:this.props.placeholder,value:e[0]},n(e[0]))))}},{key:"renderInput",value:function(u,n){var s,i=this,a=t("Select-input",this.props.inputProps.className),r=this.state.isOpen,l=t((v(s={},this._instancePrefix+"-list",r),v(s,this._instancePrefix+"-backspace-remove-message",this.props.multi&&!this.props.disabled&&this.state.isFocused&&!this.state.inputValue),s)),p=this.state.inputValue;!p||this.props.onSelectResetsInput||this.state.isFocused||(p="");var h=E({},this.props.inputProps,{"aria-activedescendant":r?this._instancePrefix+"-option-"+n:this._instancePrefix+"-value","aria-describedby":this.props["aria-describedby"],"aria-expanded":""+r,"aria-haspopup":""+r,"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],"aria-owns":l,onBlur:this.handleInputBlur,onChange:this.handleInputChange,onFocus:this.handleInputFocus,ref:function(e){return i.input=e},role:"combobox",required:this.state.required,tabIndex:this.props.tabIndex,value:p});if(this.props.inputRenderer)return this.props.inputRenderer(h);if(this.props.disabled||!this.props.searchable){var c=g(this.props.inputProps,[]),d=t(v({},this._instancePrefix+"-list",r));return o.createElement("div",E({},c,{"aria-expanded":r,"aria-owns":d,"aria-activedescendant":r?this._instancePrefix+"-option-"+n:this._instancePrefix+"-value","aria-disabled":""+this.props.disabled,"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],className:a,onBlur:this.handleInputBlur,onFocus:this.handleInputFocus,ref:function(e){return i.input=e},role:"combobox",style:{border:0,width:1,display:"inline-block"},tabIndex:this.props.tabIndex||0}))}return this.props.autosize?o.createElement(e,E({id:this.props.id},h,{className:a,minWidth:"5"})):o.createElement("div",{className:a,key:"input-wrap",style:{display:"inline-block"}},o.createElement("input",E({id:this.props.id},h)))}},{key:"renderClear",value:function(){var e=this.getValueArray(this.props.value);if(this.props.clearable&&e.length&&!this.props.disabled&&!this.props.isLoading){var t=this.props.multi?this.props.clearAllText:this.props.clearValueText,u=this.props.clearRenderer();return o.createElement("span",{"aria-label":t,className:"Select-clear-zone",onMouseDown:this.clearValue,onTouchEnd:this.handleTouchEndClearValue,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,title:t},u)}}},{key:"renderArrow",value:function(){if(this.props.arrowRenderer){var e=this.handleMouseDownOnArrow,t=this.state.isOpen,u=this.props.arrowRenderer({onMouseDown:e,isOpen:t});return u?o.createElement("span",{className:"Select-arrow-zone",onMouseDown:e},u):null}}},{key:"filterOptions",value:function(e){var t=this.state.inputValue,u=this.props.options||[];if(this.props.filterOptions){var n="function"==typeof this.props.filterOptions?this.props.filterOptions:l;return n(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,trimFilter:this.props.trimFilter,valueKey:this.props.valueKey})}return u}},{key:"onOptionRef",value:function(e,t){t&&(this.focused=e)}},{key:"renderMenu",value:function(e,t,u){return e&&e.length?this.props.menuRenderer({focusedOption:u,focusOption:this.focusOption,inputValue:this.state.inputValue,instancePrefix:this._instancePrefix,labelKey:this.props.labelKey,onFocus:this.focusOption,onOptionRef:this.onOptionRef,onSelect:this.selectValue,optionClassName:this.props.optionClassName,optionComponent:this.props.optionComponent,optionRenderer:this.props.optionRenderer||this.getOptionLabel,options:e,removeValue:this.removeValue,selectValue:this.selectValue,valueArray:t,valueKey:this.props.valueKey}):this.props.noResultsText?o.createElement("div",{className:"Select-noresults"},this.props.noResultsText):null}},{key:"renderHiddenField",value:function(e){var t=this;if(this.props.name){if(this.props.joinValues){var u=e.map(function(e){return C(e[t.props.valueKey])}).join(this.props.delimiter);return o.createElement("input",{disabled:this.props.disabled,name:this.props.name,ref:function(e){return t.value=e},type:"hidden",value:u})}return e.map(function(e,u){return o.createElement("input",{disabled:t.props.disabled,key:"hidden."+u,name:t.props.name,ref:"value"+u,type:"hidden",value:C(e[t.props.valueKey])})})}}},{key:"getFocusableOptionIndex",value:function(e){var t=this._visibleOptions;if(!t.length)return null;var u=this.props.valueKey,n=this.state.focusedOption||e;if(n&&!n.disabled){var s=-1;if(t.some(function(e,t){var o=e[u]===n[u];return o&&(s=t),o}),-1!==s)return s}for(var o=0;o -1) { + valueArray.splice(index, 1); + } + valueArray.reverse(); + this.setValue(valueArray); + } else { + this.setValue(valueArray.filter(function (i) { + return i[_this4.props.valueKey] !== value[_this4.props.valueKey]; + })); + } + this.focus(); } }, { @@ -1350,6 +1371,7 @@ Select.propTypes = { deleteRemoves: _propTypes2.default.bool, // whether delete removes an item if there is no text input delimiter: _propTypes2.default.string, // delimiter to use to join multiple values for the hidden field value disabled: _propTypes2.default.bool, // whether the Select is disabled or not + duplicate: _propTypes2.default.bool, // whether the Select allows the same option to be selected multiple times escapeClearsValue: _propTypes2.default.bool, // whether escape clears the value when the menu is closed filterOption: _propTypes2.default.func, // method to filter a single option (option, filterString) filterOptions: _propTypes2.default.any, // boolean to enable default filtering or function to filter the options array ([options], filterString, [values]) @@ -1422,6 +1444,7 @@ Select.defaultProps = { deleteRemoves: true, delimiter: ',', disabled: false, + duplicate: false, escapeClearsValue: true, filterOptions: _defaultFilterOptions2.default, ignoreAccents: true, diff --git a/package.json b/package.json index 91d72a9b5e..d2723e4ce3 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,18 @@ { "name": "react-select", - "version": "1.3.0", + "version": "1.4.0", "description": "A Select control built with and for ReactJS", "main": "lib/index.js", "jsnext:main": "dist/react-select.es.js", "module": "dist/react-select.es.js", "style": "dist/react-select.min.css", "author": "Jed Watson", + "contributors": [ + { + "name": "Kim Yu Ng", + "email": "kimyu92@outlook.com" + } + ], "license": "MIT", "repository": { "type": "git", @@ -58,7 +64,7 @@ "react-highlight-words": "^0.8.1", "react-test-renderer": "^15.6.1", "react-virtualized": "^9.9.0", - "react-virtualized-select": "^3.1.0", + "react-virtualized-select": "^3.1.3", "rollup": "^0.49.2", "rollup-plugin-babel": "^3.0.2", "rollup-plugin-commonjs": "^8.2.0", @@ -88,7 +94,12 @@ "test": "cross-env NODE_ENV=test mocha --compilers js:babel-core/register", "precommit": "lint-staged && yarn run test" }, - "files": ["dist", "less", "lib", "scss"], + "files": [ + "dist", + "less", + "lib", + "scss" + ], "keywords": [ "combobox", "form", diff --git a/src/Select.js b/src/Select.js index fbf84ea2d6..46dfdf8d7a 100644 --- a/src/Select.js +++ b/src/Select.js @@ -619,11 +619,15 @@ class Select extends React.Component { inputValue: this.handleInputValueChange(updatedValue), isOpen: !this.props.closeOnSelect, }, () => { - const valueArray = this.getValueArray(this.props.value); - if (valueArray.some(i => i[this.props.valueKey] === value[this.props.valueKey])) { - this.removeValue(value); - } else { + if (this.props.duplicate) { this.addValue(value); + } else { + const valueArray = this.getValueArray(this.props.value); + if (valueArray.some(i => i[this.props.valueKey] === value[this.props.valueKey])) { + this.removeValue(value); + } else { + this.addValue(value); + } } }); } else { @@ -661,7 +665,20 @@ class Select extends React.Component { removeValue (value) { let valueArray = this.getValueArray(this.props.value); - this.setValue(valueArray.filter(i => i[this.props.valueKey] !== value[this.props.valueKey])); + + if (this.props.duplicate) { + valueArray = [...valueArray]; + valueArray.reverse(); + const index = valueArray.findIndex((i) => (i[this.props.valueKey] === value[this.props.valueKey])); + if (index > -1) { + valueArray.splice(index, 1); + } + valueArray.reverse(); + this.setValue(valueArray); + } else { + this.setValue(valueArray.filter(i => i[this.props.valueKey] !== value[this.props.valueKey])); + } + this.focus(); } @@ -1205,6 +1222,7 @@ Select.propTypes = { deleteRemoves: PropTypes.bool, // whether delete removes an item if there is no text input delimiter: PropTypes.string, // delimiter to use to join multiple values for the hidden field value disabled: PropTypes.bool, // whether the Select is disabled or not + duplicate: PropTypes.bool, // whether the Select allows the same option to be selected multiple times escapeClearsValue: PropTypes.bool, // whether escape clears the value when the menu is closed filterOption: PropTypes.func, // method to filter a single option (option, filterString) filterOptions: PropTypes.any, // boolean to enable default filtering or function to filter the options array ([options], filterString, [values]) @@ -1277,6 +1295,7 @@ Select.defaultProps = { deleteRemoves: true, delimiter: ',', disabled: false, + duplicate: false, escapeClearsValue: true, filterOptions: defaultFilterOptions, ignoreAccents: true,