New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

react-super-select

Package Overview
Dependencies
Maintainers
1
Versions
69
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

react-super-select - npm Package Compare versions

Comparing version 1.0.17 to 1.0.18

2

lib/react-super-select.js

@@ -1,1 +0,1 @@

'use strict';var _values2=require('lodash/values'),_values3=_interopRequireDefault(_values2),_uniqueId2=require('lodash/uniqueId'),_uniqueId3=_interopRequireDefault(_uniqueId2),_reject2=require('lodash/reject'),_reject3=_interopRequireDefault(_reject2),_reduce2=require('lodash/reduce'),_reduce3=_interopRequireDefault(_reduce2),_noop2=require('lodash/noop'),_noop3=_interopRequireDefault(_noop2),_map2=require('lodash/map'),_map3=_interopRequireDefault(_map2),_last2=require('lodash/last'),_last3=_interopRequireDefault(_last2),_isUndefined2=require('lodash/isUndefined'),_isUndefined3=_interopRequireDefault(_isUndefined2),_isString2=require('lodash/isString'),_isString3=_interopRequireDefault(_isString2),_isObject2=require('lodash/isObject'),_isObject3=_interopRequireDefault(_isObject2),_isNumber2=require('lodash/isNumber'),_isNumber3=_interopRequireDefault(_isNumber2),_isNull2=require('lodash/isNull'),_isNull3=_interopRequireDefault(_isNull2),_isFunction2=require('lodash/isFunction'),_isFunction3=_interopRequireDefault(_isFunction2),_isEqual2=require('lodash/isEqual'),_isEqual3=_interopRequireDefault(_isEqual2),_isEmpty2=require('lodash/isEmpty'),_isEmpty3=_interopRequireDefault(_isEmpty2),_isArray2=require('lodash/isArray'),_isArray3=_interopRequireDefault(_isArray2),_includes2=require('lodash/includes'),_includes3=_interopRequireDefault(_includes2),_head2=require('lodash/head'),_head3=_interopRequireDefault(_head2),_groupBy2=require('lodash/groupBy'),_groupBy3=_interopRequireDefault(_groupBy2),_forIn2=require('lodash/forIn'),_forIn3=_interopRequireDefault(_forIn2),_find2=require('lodash/find'),_find3=_interopRequireDefault(_find2),_filter2=require('lodash/filter'),_filter3=_interopRequireDefault(_filter2),_extend2=require('lodash/extend'),_extend3=_interopRequireDefault(_extend2),_bindAll2=require('lodash/bindAll'),_bindAll3=_interopRequireDefault(_bindAll2),_createClass=function(){function defineProperties(target,props){for(var descriptor,i=0;i<props.length;i++)descriptor=props[i],descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,'value'in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}(),_classnames=require('classnames'),_classnames2=_interopRequireDefault(_classnames),_propTypes=require('prop-types'),_propTypes2=_interopRequireDefault(_propTypes),_react=require('react'),_react2=_interopRequireDefault(_react);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError('Cannot call a class as a function')}function _possibleConstructorReturn(self,call){if(!self)throw new ReferenceError('this hasn\'t been initialised - super() hasn\'t been called');return call&&('object'==typeof call||'function'==typeof call)?call:self}function _inherits(subClass,superClass){if('function'!=typeof superClass&&null!==superClass)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:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}var _ref=_react2.default.createElement('span',null),_ref2=_react2.default.createElement('span',null),_ref3=_react2.default.createElement('span',null),ReactSuperSelect=function(_React$Component){function ReactSuperSelect(props){_classCallCheck(this,ReactSuperSelect);var _this=_possibleConstructorReturn(this,(ReactSuperSelect.__proto__||Object.getPrototypeOf(ReactSuperSelect)).call(this,props));return _this.SEARCH_FOCUS_ID=-1,_this.SELECTED_OPTION_REGEX=/r-ss-selected/,_this.keymap={down:40,end:35,enter:13,esc:27,home:36,space:32,tab:9,up:38},_this.ariaRelevantKeydownCodes=(0,_values3.default)(_this.keymap),_this.lastUserSelectedOption=void 0,_this._rssDOM={},_this.state={ajaxError:!1,controlId:_this.props.controlId||(0,_uniqueId3.default)('rss_'),data:_this._configureDataSource(_this.props.dataSource),rawDataSource:_this.props.dataSource,isOpen:!1,focusedId:void 0,labelKey:_this.props.optionLabelKey,lastOptionId:(0,_isArray3.default)(_this.props.dataSource)&&0<_this.props.dataSource.length?_this.props.dataSource.length-1:void 0,searchString:'',value:_this._buildInitialValue(),valueKey:_this.props.optionValueKey},(0,_bindAll3.default)(_this,['toggleDropdown','_ariaGetActiveDescendentId','_ariaGetListId','_arrestScroll','_broadcastChange','_buildInitialValue','_clearSearchString','_clearSelection','_closeOnKeypress','_configureDataSource','_defaultSearchFilter','_deselectAction','_fetchDataViaAjax','_fetchNextPage','_filterDataBySearchString','_findArrayOfOptionDataObjectsByValue','_focusCurrentFocusedId','_focusDOMOption','_focusRemovalButtons','_focusTrigger','_generateValueDisplay','_getAjaxErrorMarkup','_getDataSource','_getDropdownContent','_getFocusedOptionKey','_getGroupHeadingMarkup','_getNoResultsMarkup','_getNormalDisplayMarkup','_getLoadingMarkup','_getOptionIndexFromTarget','_getOptionsMarkup','_getOptionValueFromDataAttr','_getPagingLi','_getSearchContent','_getTagsDisplayMarkup','_getTagMarkup','_getTagRemoveIndex','_getTemplatedOptions','_getTypeSafeOptionValue','_handleDocumentClick','_handleKeyDown','_handleSearch','_isCurrentlySelected','_isMultiSelect','_isUserSearchTypingEvent','_mapDataToOptionsMarkup','_moveFocusDown','_moveFocusUp','_needsAjaxFetch','_onDownKey','_onEndKey','_onEnterKey','_onEscKey','_onHomeKey','_onMouseMove','_onUpKey','_pageFetchingComplete','_removeAllOptionsInOptionIdRange','_removeSelectedOptionByValue','_removeTagKeyPress','_removeTagClick','_selectAllOptionsInOptionIdRange','_selectAllOptionsToLastUserSelectedOption','_selectFocusedOption','_selectItemByValues','_selectItemOnOptionClick','_setFocusIdToSearch','_setFocusOnOpen','_setFocusToTagRemovalIfPresent','_updateFocusedId']),_this}return _inherits(ReactSuperSelect,_React$Component),_createClass(ReactSuperSelect,[{key:'componentDidMount',value:function componentDidMount(){var _this2=this;document.addEventListener('click',this._handleDocumentClick),document.addEventListener('touchstart',this._handleDocumentClick),!this.props.disabled&&this.props.openOnMount&&this.setState({isOpen:!0},function(){_this2.props.focusOnMount&&!(0,_isFunction3.default)(_this2.props.ajaxDataFetch)&&_this2._moveFocusDown()})}},{key:'componentWillUnmount',value:function componentWillUnmount(){document.removeEventListener('click',this._handleDocumentClick),document.removeEventListener('touchstart',this._handleDocumentClick)}},{key:'componentWillReceiveProps',value:function componentWillReceiveProps(nextProps){var newState={};if((0,_isUndefined3.default)(nextProps.optionLabelKey)||nextProps.optionLabelKey===this.props.optionLabelKey||(newState.labelKey=nextProps.optionLabelKey),(0,_isUndefined3.default)(nextProps.optionValueKey)||nextProps.optionValueKey===this.props.optionValueKey||(newState.valueKey=nextProps.optionValueKey),!(0,_isEqual3.default)(this.props.dataSource,nextProps.dataSource)){this.lastUserSelectedOption=void 0;var newValue=this.props.clearSelectedValueOnDataSourceChange?[]:this.state.value;newState=(0,_extend3.default)(newState,{data:this._configureDataSource(nextProps.dataSource),rawDataSource:nextProps.dataSource,focusedId:void 0,value:newValue,lastOptionId:(0,_isArray3.default)(nextProps.dataSource)&&0<nextProps.dataSource.length?nextProps.dataSource.length-1:void 0})}(0,_isEqual3.default)(nextProps.initialValue,this.props.initialValue)||(newState.value=this._buildInitialValue(nextProps)),(0,_isEmpty3.default)(newState)||this.setState(newState,this._broadcastChange)}},{key:'componentDidUpdate',value:function componentDidUpdate(prevProps,prevState){if(this._focusCurrentFocusedId(),this.state.isOpen!==prevState.isOpen){var openStateCallback=this.state.isOpen?this.props.onOpenDropdown:this.props.onCloseDropdown;openStateCallback()}}},{key:'render',value:function render(){var _this3=this,caratClass=(0,_classnames2.default)('carat',{down:!this.state.isOpen,up:this.state.isOpen}),clearSelectionLabelString=this.props.clearSelectionLabelString?this.props.clearSelectionLabelString:this.props.clearSelectionLabelString,dropdownContent=this._getDropdownContent(),placeholderString=this.props.placeholder?this.props.placeholder:this.props.placeholder,triggerClasses=(0,_classnames2.default)('r-ss-trigger',{"r-ss-open":this.state.isOpen,"r-ss-disabled":this.props.disabled,"r-ss-placeholder":1>this.state.value.length}),triggerDisplayContent=this.state.value.length?this._generateValueDisplay():placeholderString,wrapClasses=(0,_classnames2.default)('r-ss-wrap',this.props.customClass,{"r-ss-expanded":this.state.isOpen}),clearSelectionButton=null;return(0,_isEmpty3.default)(this.state.value)||!1===this.props.clearable||(clearSelectionButton=_react2.default.createElement('button',{"aria-label":clearSelectionLabelString,ref:function ref(c){_this3._rssDOM.selectionClear=c},name:'clearSelection',type:'button',className:'r-ss-selection-clear',onClick:this._clearSelection,onKeyDown:this._clearSelection},_ref)),_react2.default.createElement('div',{ref:function ref(c){_this3._rssDOM.rssControl=c},id:this.state.controlId,className:wrapClasses},_react2.default.createElement('div',{ref:function ref(c){_this3._rssDOM.triggerDiv=c},className:triggerClasses,onBlur:this.props.onBlur,onClick:this.toggleDropdown,onKeyDown:this._handleKeyDown,role:'combobox',"aria-activedescendant":this._ariaGetActiveDescendentId(),"aria-disabled":this.props.disabled,"aria-haspopup":!0,"aria-controls":this._ariaGetListId(),"aria-label":placeholderString,"aria-multiselectable":this._isMultiSelect(),tabIndex:'0'},triggerDisplayContent,clearSelectionButton,_react2.default.createElement('span',{ref:function ref(c){_this3._rssDOM.carat=c},className:caratClass},' ')),dropdownContent)}},{key:'toggleDropdown',value:function toggleDropdown(){var _this4=this;if(!this.props.disabled){var newState={isOpen:!this.state.isOpen};this.state.isOpen&&(0,_extend3.default)(newState,{focusedId:void 0});var wasClosed=!this.state.isOpen;this.setState(newState,function(){wasClosed&&_this4._setFocusOnOpen()})}}},{key:'_ariaGetActiveDescendentId',value:function _ariaGetActiveDescendentId(){var ariaActiveDescendantId=null,optionRef=this._getFocusedOptionKey();return this._rssDOM[optionRef]&&(ariaActiveDescendantId=this._rssDOM[optionRef].id),ariaActiveDescendantId}},{key:'_ariaGetListId',value:function _ariaGetListId(){return this.state.controlId+'_list'}},{key:'_arrestEvent',value:function _arrestEvent(event){event.stopPropagation(),event.preventDefault()}},{key:'_arrestScroll',value:function _arrestScroll(event){if(this.props.forceDefaultBrowserScrolling)return!0;var arrestScroll=!1,adjustedHeight=this._rssDOM.scrollWrap.scrollTop+this._rssDOM.scrollWrap.clientHeight;0<event.deltaY?adjustedHeight>=this._rssDOM.scrollWrap.scrollHeight&&(arrestScroll=!0):0>=this._rssDOM.scrollWrap.scrollTop&&(arrestScroll=!0),arrestScroll&&this._arrestEvent(event)}},{key:'_broadcastChange',value:function _broadcastChange(){var outputValue=this._isMultiSelect()?this.state.value:(0,_head3.default)(this.state.value);outputValue=(0,_isEmpty3.default)(outputValue)?void 0:outputValue,this.props.onChange(outputValue)}},{key:'_buildInitialValue',value:function _buildInitialValue(props){props=props||this.props;var initialValue=[];return(0,_isNull3.default)(props.initialValue)||(0,_isUndefined3.default)(props.initialValue)||(initialValue=(0,_isArray3.default)(props.initialValue)?props.initialValue:[props.initialValue],!this._isMultiSelect()&&(initialValue=[(0,_head3.default)(initialValue)])),initialValue}},{key:'_clearSearchString',value:function _clearSearchString(){var _this5=this;this.setState({searchString:''},function(){_this5.props.onSearchInputChange(_this5.state.searchString),_this5._setFocusIdToSearch()})}},{key:'_clearSelection',value:function _clearSelection(event){var _this6=this;(event.which===this.keymap.enter||event.which===this.keymap.space||'click'===event.type)&&(event.stopPropagation(),this.setState({value:[]},function(){_this6.state.isOpen&&_this6._setFocusOnOpen(),_this6.lastUserSelectedOption=void 0,_this6._focusTrigger(),_this6._broadcastChange(),_this6.props.onClear()}))}},{key:'_closeOnKeypress',value:function _closeOnKeypress(){this.state.isOpen&&this.setState({isOpen:!1,focusedId:void 0},this._focusTrigger)}},{key:'_configureDataSource',value:function _configureDataSource(dataSource){if((0,_isArray3.default)(dataSource))return dataSource;if((0,_isObject3.default)(dataSource)){if((0,_isArray3.default)(dataSource.collection))return dataSource.collection;if((0,_isFunction3.default)(dataSource.get)){var collection=dataSource.get('collection');if((0,_isArray3.default)(collection))return collection}}return[]}},{key:'_deselectAction',value:function _deselectAction(value){var keepControlOpen=!!(1<arguments.length&&void 0!==arguments[1])&&arguments[1],shouldClose=this.props.closeOnSelectedOptionClick&&!keepControlOpen;if(!this.props.deselectOnSelectedOptionClick)return shouldClose&&this._closeOnKeypress(),!1;var callback=shouldClose?this._closeOnKeypress:_noop3.default;this._removeSelectedOptionByValue(value,callback)}},{key:'_defaultSearchFilter',value:function _defaultSearchFilter(option){var search=this.state.searchString.toLowerCase(),labelAsString=(0,_isString3.default)(option[this.state.labelKey])?option[this.state.labelKey]:option[this.state.labelKey].toString();return-1<labelAsString.toLowerCase().indexOf(search)}},{key:'_fetchDataViaAjax',value:function _fetchDataViaAjax(){var _this7=this,self=this;this.IS_FETCHING_AJAX||(this.IS_FETCHING_AJAX=!0,this.props.ajaxDataFetch(this.state.rawDataSource).then(function(dataSourceFromAjax){_this7.IS_FETCHING_AJAX=!1,self.setState({ajaxError:!1,data:self._configureDataSource(dataSourceFromAjax),rawDataSource:dataSourceFromAjax},function(){self.props.openOnMount&&self.props.focusOnMount&&self._moveFocusDown()})},function(){_this7.IS_FETCHING_AJAX=!1,self.setState({ajaxError:!0,rawDataSource:[]})}))}},{key:'_fetchNextPage',value:function _fetchNextPage(){if(!this._needsAjaxFetch()){var self=this;this.props.pageDataFetch(this.state.rawDataSource).then(function(dataSourceFromPageFetch){self.setState({ajaxError:!1,data:self._configureDataSource(dataSourceFromPageFetch),rawDataSource:dataSourceFromPageFetch,isFetchingPage:!1})},function(){self.setState({ajaxError:!0})})}}},{key:'_filterDataBySearchString',value:function _filterDataBySearchString(data){var self=this,filterFunction=this._defaultSearchFilter;return(0,_isFunction3.default)(this.props.customFilterFunction)&&(filterFunction=function(value,index,collection){return self.props.customFilterFunction.apply(self,[value,index,collection,self.state.searchString.toLowerCase()])}),(0,_filter3.default)(data,filterFunction)}},{key:'_findArrayOfOptionDataObjectsByValue',value:function _findArrayOfOptionDataObjectsByValue(value){var _this8=this,valuesArray=(0,_isArray3.default)(value)?(0,_map3.default)(value,this.state.valueKey):[value];return(0,_reject3.default)(this.state.data,function(item){return!(0,_includes3.default)(valuesArray,item[_this8.state.valueKey])&&!(0,_includes3.default)(valuesArray,parseInt(item[_this8.state.valueKey],10))})}},{key:'_focusCurrentFocusedId',value:function _focusCurrentFocusedId(){return 0>this.state.focusedId?void this._focusSearch():void this._focusDOMOption()}},{key:'_focusDOMOption',value:function _focusDOMOption(){var optionRef=this._getFocusedOptionKey();this._rssDOM[optionRef]&&(0,_isFunction3.default)(this._rssDOM[optionRef].focus)&&this._rssDOM[optionRef].focus()}},{key:'_focusSearch',value:function _focusSearch(){this._rssDOM.searchInput&&this._rssDOM.searchInput.focus()}},{key:'_focusRemovalButtons',value:function _focusRemovalButtons(event){var currentlyFocusedRemoveButtonIndex,nextButtonIndexToFocus,triggerContainer=this._rssDOM.triggerDiv,buttons=triggerContainer.getElementsByTagName('button');if(buttons.length)for(var i=0;i<buttons.length;i++)buttons[i]===document.activeElement&&(currentlyFocusedRemoveButtonIndex=i,nextButtonIndexToFocus=event.shiftKey?i-1:i+1);buttons[nextButtonIndexToFocus]?(this._arrestEvent(event),buttons[nextButtonIndexToFocus].focus()):nextButtonIndexToFocus&&0>nextButtonIndexToFocus?this._focusTrigger():buttons[0]&&!(0,_isNumber3.default)(currentlyFocusedRemoveButtonIndex)&&(this._arrestEvent(event),buttons[0].focus())}},{key:'_focusTrigger',value:function _focusTrigger(){this._rssDOM.triggerDiv.focus()}},{key:'_generateValueDisplay',value:function _generateValueDisplay(){return this.props.customSelectedValueTemplateFunction?this.props.customSelectedValueTemplateFunction(this.state.value):this.props.tags?this._getTagsDisplayMarkup():this._getNormalDisplayMarkup()}},{key:'_getAjaxErrorMarkup',value:function _getAjaxErrorMarkup(){var _this9=this,errorString=this.props.ajaxErrorString?this.props.ajaxErrorString:this.ajaxErrorString;return _react2.default.createElement('li',{className:'r-ss-dropdown-option error'},_react2.default.createElement('i',{ref:function ref(c){_this9._rssDOM.errorDisplay=c}},errorString))}},{key:'_getDataSource',value:function _getDataSource(){var data=(0,_isArray3.default)(this.state.data)?this.state.data:[];return(0,_isString3.default)(this.state.searchString)&&!(0,_isEmpty3.default)(this.state.searchString)&&(data=this._filterDataBySearchString(data)),this.props.groupBy&&(data=(0,_groupBy3.default)(data,this.props.groupBy)),data}},{key:'_getDropdownContent',value:function _getDropdownContent(){var _this10=this;if(!this.state.isOpen)return null;var searchContent=this._getSearchContent(),mouseMoveHandler=this.props.pageDataFetch?this._onMouseMove:null,pagingLi=this.state.isFetchingPage?this._getPagingLi():null;return _react2.default.createElement('div',{ref:function ref(c){_this10._rssDOM.dropdownContent=c},className:'r-ss-dropdown',onKeyDown:this._handleKeyDown},searchContent,_react2.default.createElement('div',{ref:function ref(c){_this10._rssDOM.scrollWrap=c},className:'r-ss-options-wrap',onMouseMove:mouseMoveHandler},_react2.default.createElement('ul',{className:'r-ss-dropdown-options',ref:function ref(c){_this10._rssDOM.dropdownOptionsList=c},tabIndex:'-1',id:this._ariaGetListId(),role:'listbox',"aria-expanded":this.state.isOpen,onWheel:this._arrestScroll},this._getOptionsMarkup()),pagingLi))}},{key:'_getFocusedOptionKey',value:function _getFocusedOptionKey(){return'option_'+this.state.focusedId}},{key:'_getGroupHeadingMarkup',value:function _getGroupHeadingMarkup(heading){if(!heading)return null;var headingClasses=(0,_classnames2.default)('r-ss-option-group-heading',this.props.customGroupHeadingClass),headingMarkup=this.props.customGroupHeadingTemplateFunction?this.props.customGroupHeadingTemplateFunction(heading):heading;return _react2.default.createElement('li',{tabIndex:'-1',className:headingClasses,key:'heading_'+heading,role:'separator',"aria-label":heading,"aria-hidden":!0},headingMarkup)}},{key:'_getNoResultsMarkup',value:function _getNoResultsMarkup(){var _this11=this,noResultsMarkup=_react2.default.createElement('i',{ref:function ref(c){_this11._rssDOM.noResults=c}},this.props.noResultsString);return(0,_isString3.default)(this.props.noResultsString)||(noResultsMarkup=_react2.default.createElement('div',{ref:function ref(c){_this11._rssDOM.noResults=c}},this.props.noResultsString)),_react2.default.createElement('li',{className:'r-ss-dropdown-option',tabIndex:'-1'},noResultsMarkup)}},{key:'_getNormalDisplayMarkup',value:function _getNormalDisplayMarkup(){var _this12=this;return(0,_map3.default)(this.state.value,function(value){var selectedKey='r_ss_selected_'+value[_this12.state.labelKey];return _this12.props.customOptionTemplateFunction?_this12.props.customOptionTemplateFunction(value):_react2.default.createElement('span',{key:selectedKey,className:'r-ss-selected-label'},value[_this12.state.labelKey])})}},{key:'_getLoadingMarkup',value:function _getLoadingMarkup(){var _this13=this,loaderClasses=this.props.customLoaderClass?'r-ss-loader '+this.props.customLoaderClass:'r-ss-loader';return _react2.default.createElement('span',{ref:function ref(c){_this13._rssDOM.loader=c},className:loaderClasses})}},{key:'_getOptionIndexFromTarget',value:function _getOptionIndexFromTarget(targetLi){return parseInt(targetLi.getAttribute('data-option-index'),10)}},{key:'_getOptionsMarkup',value:function _getOptionsMarkup(){var _this14=this;if(this._needsAjaxFetch())return this._fetchDataViaAjax(),this._getPagingLi();if(this.state.ajaxError)return this._getAjaxErrorMarkup();var data=this._getDataSource(),options=[],optionsCount=0;return(0,_isArray3.default)(data)||(0,_isEmpty3.default)(data)?options=this._getTemplatedOptions(data):(0,_forIn3.default)(data,function(groupedOptions,heading){options.push(_this14._getGroupHeadingMarkup(heading)),options=options.concat(_this14._getTemplatedOptions(groupedOptions,optionsCount)),optionsCount+=groupedOptions.length}),options}},{key:'_getOptionValueFromDataAttr',value:function _getOptionValueFromDataAttr(optionNode){var optionValue=optionNode.getAttribute('data-option-value');return this._getTypeSafeOptionValue(optionValue)}},{key:'_getPagingLi',value:function _getPagingLi(){return _react2.default.createElement('li',{key:'page_loading',className:'r-ss-page-fetch-indicator',tabIndex:'-1'},this._getLoadingMarkup())}},{key:'_getSearchContent',value:function _getSearchContent(){var _this15=this;if(!this.props.searchable)return null;var clearSearchLabelString=this.props.clearSearchLabelString?this.props.clearSearchLabelString:this.props.clearSearchLabelString,magnifierClass=this.props.customSearchIconClass?this.props.customSearchIconClass:'r-ss-magnifier',searchPlaceholderString=this.props.searchPlaceholder?this.props.searchPlaceholder:this.props.searchPlaceholder,searchAriaId=this.state.controlId+'_search',searchAriaIdLabel=searchAriaId+'_label',clearSearch=null;return(0,_isString3.default)(this.state.searchString)&&!(0,_isEmpty3.default)(this.state.searchString)&&(clearSearch=_react2.default.createElement('button',{"aria-label":clearSearchLabelString,ref:function ref(c){_this15._rssDOM.searchClear=c},name:'clearSearch',type:'button',className:'r-ss-search-clear',onClick:this._clearSearchString,onKeyDown:this._clearSearchString},_ref2)),_react2.default.createElement('div',{className:'r-ss-search-wrap'},_react2.default.createElement('div',{className:'r-ss-search-inner'},_react2.default.createElement('label',{ref:function ref(c){_this15._rssDOM.searchInputLabel=c},id:searchAriaIdLabel,className:'r-ss-search-aria-label',htmlFor:searchAriaId},searchPlaceholderString),_react2.default.createElement('input',{ref:function ref(c){_this15._rssDOM.searchInput=c},placeholder:searchPlaceholderString,onClick:this._setFocusIdToSearch,onBlur:this.props.onSearchInputBlur,onChange:this._handleSearch,value:this.state.searchString,name:searchAriaId,id:searchAriaId,"aria-labelledby":searchAriaIdLabel,"aria-autocomplete":'list'}),clearSearch,_react2.default.createElement('i',{className:magnifierClass},'search')))}},{key:'_getTagsDisplayMarkup',value:function _getTagsDisplayMarkup(){var _this16=this;return(0,_map3.default)(this.state.value,function(value){return _this16._getTagMarkup(value)})}},{key:'_getTagMarkup',value:function _getTagMarkup(value){var _this17=this,displayValue=value[this.state.valueKey],tagRemoveIndex=this._getTagRemoveIndex(displayValue),label=value[this.state.labelKey],tagWrapClass=this.props.customTagClass?'r-ss-tag '+this.props.customTagClass:'r-ss-tag',tagRemoveButtonLabelString=this.props.tagRemoveLabelString?this.props.tagRemoveLabelString:this.props.tagRemoveLabelString;return tagRemoveButtonLabelString=tagRemoveButtonLabelString+' '+label,_react2.default.createElement('span',{className:tagWrapClass,key:'tag_'+displayValue},_react2.default.createElement('span',{className:'r-ss-tag-label'},label),_react2.default.createElement('button',{"aria-label":tagRemoveButtonLabelString,ref:function ref(c){_this17._rssDOM[tagRemoveIndex]=c},name:'RemoveTag_'+displayValue,type:'button',className:'r-ss-tag-remove',onClick:this._removeTagClick.bind(null,value),onKeyDown:this._removeTagKeyPress.bind(null,value)},_ref3))}},{key:'_getTagRemoveIndex',value:function _getTagRemoveIndex(identifier){return'tag_remove_'+identifier}},{key:'_getTemplatedOptions',value:function _getTemplatedOptions(data,indexStart){indexStart=indexStart||0;var options=this._mapDataToOptionsMarkup(data,indexStart);return 0===options.length&&(options=this._getNoResultsMarkup()),options}},{key:'_getTypeSafeOptionValue',value:function _getTypeSafeOptionValue(optionValue){return+optionValue+''===optionValue?+optionValue:optionValue}},{key:'_handleDocumentClick',value:function _handleDocumentClick(){var event=Array.prototype.slice.call(arguments)[0],isTargetStillInDOM=document.contains(event.target);(!this._rssDOM.rssControl||isTargetStillInDOM&&!this._rssDOM.rssControl.contains(event.target))&&this.state.isOpen&&this.setState({isOpen:!1,focusedId:void 0})}},{key:'_handleKeyDown',value:function _handleKeyDown(event){if(!this._isUserSearchTypingEvent(event))switch(this.state.isOpen&&(0,_includes3.default)(this.ariaRelevantKeydownCodes,event.which)&&this._arrestEvent(event),event.which){case this.keymap.down:this._onDownKey(event);break;case this.keymap.end:this._onEndKey();break;case this.keymap.enter:this._onEnterKey(event);break;case this.keymap.esc:this._onEscKey();break;case this.keymap.home:this._onHomeKey();break;case this.keymap.space:this._onEnterKey(event);break;case this.keymap.tab:this.state.isOpen?this._onEnterKey(event):this._focusRemovalButtons(event);break;case this.keymap.up:this._onUpKey(event);}}},{key:'_handleSearch',value:function _handleSearch(event){var _this18=this;this._arrestEvent(event),this.setState({searchString:event.target.value},function(){_this18.props.onSearchInputChange(_this18.state.searchString)})}},{key:'_isCurrentlySelected',value:function _isCurrentlySelected(dataItem){return(0,_isArray3.default)(this.state.value)?!!(0,_find3.default)(this.state.value,dataItem):(0,_isEqual3.default)(this.state.value,dataItem)}},{key:'_isMultiSelect',value:function _isMultiSelect(){return this.props.multiple||this.props.tags}},{key:'_isUserSearchTypingEvent',value:function _isUserSearchTypingEvent(event){return this._rssDOM.searchInput&&event.which!==this.keymap.down&&(event.which!==this.keymap.up||!event.altKey)&&event.which!==this.keymap.esc&&event.target===this._rssDOM.searchInput}},{key:'_mapDataToOptionsMarkup',value:function _mapDataToOptionsMarkup(data,indexStart){var _this19=this;return(0,_map3.default)(data,function(dataOption,index){index=indexStart+index;var indexRef='option_'+index,isDisabled=!!dataOption.disabled,isCurrentlySelected=_this19._isCurrentlySelected(dataOption),itemKey='drop_li_'+dataOption[_this19.state.valueKey],ariaDescendantId=_this19.state.controlId+'_aria_'+indexRef,clickHandler=isDisabled?_noop3.default:_this19._selectItemOnOptionClick.bind(null,dataOption),optionMarkup=(0,_isFunction3.default)(_this19.props.customOptionTemplateFunction)?_this19.props.customOptionTemplateFunction(dataOption,_this19.state.searchString):dataOption[_this19.state.labelKey],classes=(0,_classnames2.default)('r-ss-dropdown-option',{"r-ss-selected":isCurrentlySelected,"r-ss-disabled":isDisabled});return _react2.default.createElement('li',{ref:function ref(c){_this19._rssDOM[indexRef]=c},disabled:isDisabled,"aria-disabled":isDisabled,id:ariaDescendantId,tabIndex:'0',"data-option-index":index,className:classes,"aria-selected":isCurrentlySelected,key:itemKey,"data-option-value":dataOption[_this19.state.valueKey],onClick:clickHandler,role:'option'},optionMarkup)})}},{key:'_moveFocusDown',value:function _moveFocusDown(){if(!this._needsAjaxFetch()||this.props.searchable){var nextId;nextId=(0,_isUndefined3.default)(this.state.focusedId)?this.props.searchable?this.SEARCH_FOCUS_ID:0:this.state.lastOptionId===this.state.focusedId?this.state.lastOptionId:this.state.focusedId+1,this._updateFocusedId(nextId)}}},{key:'_moveFocusUp',value:function _moveFocusUp(){var previousId;(0,_isUndefined3.default)(this.state.focusedId)||this.state.focusedId===this.SEARCH_FOCUS_ID||(0===this.state.focusedId?this.props.searchable&&(previousId=this.SEARCH_FOCUS_ID):previousId=this.state.focusedId-1),this._updateFocusedId(previousId)}},{key:'_needsAjaxFetch',value:function _needsAjaxFetch(){return(0,_isUndefined3.default)(this.state.rawDataSource)&&(0,_isFunction3.default)(this.props.ajaxDataFetch)}},{key:'_onDownKey',value:function _onDownKey(event){return this.state.isOpen?void(this._moveFocusDown(),this._isMultiSelect()&&event.shiftKey&&this._selectFocusedOption(event.target,!0)):void this.toggleDropdown()}},{key:'_onEndKey',value:function _onEndKey(){this.state.lastOptionId&&this._updateFocusedId(this.state.lastOptionId)}},{key:'_onEnterKey',value:function _onEnterKey(event){if(!this.state.isOpen)return void this.toggleDropdown();if(this._isMultiSelect()&&event.shiftKey)return void this._selectAllOptionsToLastUserSelectedOption(event.target);var keepControlOpen=this._isMultiSelect()&&(event.ctrlKey||event.metaKey);this._selectFocusedOption(event.target,keepControlOpen)}},{key:'_onEscKey',value:function _onEscKey(){this._closeOnKeypress()}},{key:'_onHomeKey',value:function _onHomeKey(){this._updateFocusedId(0)}},{key:'_onMouseMove',value:function _onMouseMove(){if(!this._rssDOM.loader&&(0,_isEmpty3.default)(this.state.searchString)&&this._pageFetchingComplete()){var wrap=this._rssDOM.scrollWrap;wrap.scrollTop+wrap.offsetHeight>=wrap.scrollHeight&&this.setState({isFetchingPage:!0},this._fetchNextPage)}}},{key:'_onUpKey',value:function _onUpKey(event){return event.altKey?void this._closeOnKeypress():void(this.state.isOpen&&(this._moveFocusUp(),this._isMultiSelect()&&event.shiftKey&&this._selectFocusedOption(event.target,!0)))}},{key:'_pageFetchingComplete',value:function _pageFetchingComplete(){return!!(0,_isFunction3.default)(this.props.hasMorePages)&&this.props.hasMorePages(this.state.rawDataSource)}},{key:'_removeAllOptionsInOptionIdRange',value:function _removeAllOptionsInOptionIdRange(from,to){for(var _this20=this,valuePropsToReject=[],start=from<=to?from:to,end=to>=from?to:from,i=start;i<=end;i++){var refString='option_'+i,option=this._rssDOM[refString];this.SELECTED_OPTION_REGEX.test(option.getAttribute('class'))&&this.lastUserSelectedOption.getAttribute('data-option-value')!==option.getAttribute('data-option-value')&&valuePropsToReject.push(this._getOptionValueFromDataAttr(option))}var remainingSelected=(0,_reject3.default)(this.state.value,function(opt){return(0,_includes3.default)(valuePropsToReject,opt[_this20.state.valueKey])});this.setState({value:remainingSelected},this._broadcastChange)}},{key:'_removeSelectedOptionByValue',value:function _removeSelectedOptionByValue(value){var _this21=this,callback=1<arguments.length&&void 0!==arguments[1]?arguments[1]:_noop3.default,SelectedAfterRemoval=(0,_reject3.default)(this.state.value,function(option){return option[_this21.state.valueKey]===value[_this21.state.valueKey]});this.setState({value:SelectedAfterRemoval},function(){callback(),_this21._broadcastChange()})}},{key:'_removeTagKeyPress',value:function _removeTagKeyPress(value,event){var isEnterKey=event.which===this.keymap.enter,isSpaceKey=event.which===this.keymap.space;(isEnterKey||isSpaceKey)&&(this._arrestEvent(event),this._removeSelectedOptionByValue(value,this._setFocusToTagRemovalIfPresent))}},{key:'_removeTagClick',value:function _removeTagClick(value,event){this._arrestEvent(event),this._removeSelectedOptionByValue(value)}},{key:'_selectAllOptionsInOptionIdRange',value:function _selectAllOptionsInOptionIdRange(from,to){for(var _this22=this,valuePropsToSelect=[],start=from<=to?from:to,end=to>=from?to:from,i=start;i<=end;i++){var refString='option_'+i,option=this._rssDOM[refString];this.SELECTED_OPTION_REGEX.test(option.getAttribute('class'))||valuePropsToSelect.push(this._getOptionValueFromDataAttr(option))}var optionsToSelect=(0,_reduce3.default)(this.state.data,function(memo,opt){return(0,_includes3.default)(valuePropsToSelect,_this22._getTypeSafeOptionValue(opt[_this22.state.valueKey]))&&!opt.disabled&&memo.push(opt),memo},[]);this._selectItemByValues(optionsToSelect,!0)}},{key:'_selectAllOptionsToLastUserSelectedOption',value:function _selectAllOptionsToLastUserSelectedOption(eventTargetLi){if(!this.lastUserSelectedOption)return this.lastUserSelectedOption=eventTargetLi,void this._selectAllOptionsInOptionIdRange(0,this._getOptionIndexFromTarget(eventTargetLi));var fromVal=this._getOptionIndexFromTarget(this.lastUserSelectedOption),to=this._getOptionIndexFromTarget(eventTargetLi);if(this.lastUserSelectedOption=eventTargetLi,this.SELECTED_OPTION_REGEX.test(eventTargetLi.getAttribute('class'))){if(!this.props.deselectOnSelectedOptionClick)return!1;this._removeAllOptionsInOptionIdRange(fromVal,to)}else this._selectAllOptionsInOptionIdRange(fromVal,to)}},{key:'_selectFocusedOption',value:function _selectFocusedOption(eventTargetLi,keepControlOpen){var focusedOptionKey=this._getFocusedOptionKey();if(this._rssDOM[focusedOptionKey]){if('true'===this._rssDOM[focusedOptionKey].getAttribute('aria-disabled'))return!1;var optionValue=this._getOptionValueFromDataAttr(this._rssDOM[focusedOptionKey]);if(this.lastUserSelectedOption=eventTargetLi,this.SELECTED_OPTION_REGEX.test(this._rssDOM[focusedOptionKey].className)){var optionFullFromValueProp=(0,_head3.default)(this._findArrayOfOptionDataObjectsByValue(optionValue));this._deselectAction(optionFullFromValueProp,keepControlOpen)}else keepControlOpen=keepControlOpen||!1,this._selectItemByValues(optionValue,keepControlOpen)}}},{key:'_selectItemByValues',value:function _selectItemByValues(value,keepControlOpen){var _this23=this,objectValues=this._findArrayOfOptionDataObjectsByValue(value),remainOpenAfterSelection=keepControlOpen||this.props.keepOpenOnSelection;(this._isMultiSelect()||remainOpenAfterSelection&&this.state.value)&&(objectValues=this.state.value.concat(objectValues));var newState={value:this._isMultiSelect()?objectValues:[(0,_last3.default)(objectValues)]};this.props.searchable&&this.props.clearSearchOnSelection&&(0,_extend3.default)(newState,{searchString:''}),this.setState(newState,function(){remainOpenAfterSelection?_this23._updateFocusedId(parseInt(_this23.lastUserSelectedOption.getAttribute('data-option-index'),10)):_this23._closeOnKeypress(),_this23.props.searchable&&_this23.props.clearSearchOnSelection&&_this23.props.onSearchInputChange(_this23.state.searchString),_this23._broadcastChange()})}},{key:'_selectItemOnOptionClick',value:function _selectItemOnOptionClick(value,event){if(this._arrestEvent(event),this._isMultiSelect()&&event.shiftKey)return void this._selectAllOptionsToLastUserSelectedOption(event.currentTarget);var keepControlOpen=this._isMultiSelect()&&(event.ctrlKey||event.metaKey),alreadySelected=this.SELECTED_OPTION_REGEX.test(event.currentTarget.getAttribute('class'));this.lastUserSelectedOption=event.currentTarget,alreadySelected?this._deselectAction(value,keepControlOpen):this._selectItemByValues(value[this.state.valueKey],keepControlOpen)}},{key:'_setFocusIdToSearch',value:function _setFocusIdToSearch(){this._updateFocusedId(this.SEARCH_FOCUS_ID)}},{key:'_setFocusOnOpen',value:function _setFocusOnOpen(){this.lastUserSelectedOption?this._updateFocusedId(parseInt(this.lastUserSelectedOption.getAttribute('data-option-index'),10)):this._moveFocusDown()}},{key:'_setFocusToTagRemovalIfPresent',value:function _setFocusToTagRemovalIfPresent(){if(!this.props.tags||0===this.state.value.length)return!1;var firstValue=(0,_head3.default)(this.state.value)[this.state.valueKey],firstTag=this._rssDOM[this._getTagRemoveIndex(firstValue)];return!!(firstTag&&(0,_isFunction3.default)(firstTag.focus))&&(firstTag.focus(),!0)}},{key:'_updateFocusedId',value:function _updateFocusedId(id){this.setState({focusedId:id})}}]),ReactSuperSelect}(_react2.default.Component);ReactSuperSelect.defaultProps={clearable:!0,clearSelectedValueOnDataSourceChange:!1,closeOnSelectedOptionClick:!0,deselectOnSelectedOptionClick:!0,disabled:!1,keepOpenOnSelection:!1,multiple:!1,openOnMount:!1,focusOnMount:!1,forceDefaultBrowserScrolling:!1,searchable:!1,tags:!1,clearSearchOnSelection:!1,onBlur:_noop3.default,onSearchInputBlur:_noop3.default,onClear:_noop3.default,onCloseDropdown:_noop3.default,onOpenDropdown:_noop3.default,onSearchInputChange:_noop3.default,optionLabelKey:'name',optionValueKey:'id',ajaxErrorString:'An Error occured while fetching options',clearSelectionLabelString:'Clear Selection',clearSearchLabelString:'Clear Search Field',noResultsString:'No Results Available',placeholder:'Select an Option',searchPlaceholder:'Search',tagRemoveLabelString:'Remove Tag'},ReactSuperSelect.propTypes={clearable:_propTypes2.default.bool,clearSelectedValueOnDataSourceChange:_propTypes2.default.bool,closeOnSelectedOptionClick:_propTypes2.default.bool,deselectOnSelectedOptionClick:_propTypes2.default.bool,disabled:_propTypes2.default.bool,keepOpenOnSelection:_propTypes2.default.bool,multiple:_propTypes2.default.bool,openOnMount:_propTypes2.default.bool,focusOnMount:_propTypes2.default.bool,forceDefaultBrowserScrolling:_propTypes2.default.bool,searchable:_propTypes2.default.bool,tags:_propTypes2.default.bool,clearSearchOnSelection:_propTypes2.default.bool,customClass:_propTypes2.default.string,customGroupHeadingClass:_propTypes2.default.string,customSearchIconClass:_propTypes2.default.string,customLoaderClass:_propTypes2.default.string,customTagClass:_propTypes2.default.string,onChange:_propTypes2.default.func.isRequired,onClear:_propTypes2.default.func,onCloseDropdown:_propTypes2.default.func,onSearchInputChange:_propTypes2.default.func,onOpenDropdown:_propTypes2.default.func,onBlur:_propTypes2.default.func,onSearchInputBlur:_propTypes2.default.func,ajaxDataFetch:_propTypes2.default.func,controlId:_propTypes2.default.string,dataSource:_propTypes2.default.oneOfType([_propTypes2.default.arrayOf(_propTypes2.default.object),_propTypes2.default.object]),initialValue:_propTypes2.default.oneOfType([_propTypes2.default.arrayOf(_propTypes2.default.object),_propTypes2.default.object]),optionLabelKey:_propTypes2.default.string,optionValueKey:_propTypes2.default.string,pageDataFetch:_propTypes2.default.func,hasMorePages:_propTypes2.default.func,groupBy:_propTypes2.default.oneOfType([_propTypes2.default.string,_propTypes2.default.func,_propTypes2.default.object]),customGroupHeadingTemplateFunction:_propTypes2.default.func,customFilterFunction:_propTypes2.default.func,customOptionTemplateFunction:_propTypes2.default.func,customSelectedValueTemplateFunction:_propTypes2.default.func,ajaxErrorString:_propTypes2.default.string,clearSelectionLabelString:_propTypes2.default.string,clearSearchLabelString:_propTypes2.default.string,noResultsString:_propTypes2.default.oneOfType([_propTypes2.default.string,_propTypes2.default.element]),placeholder:_propTypes2.default.string,searchPlaceholder:_propTypes2.default.string,tagRemoveLabelString:_propTypes2.default.string},module.exports=ReactSuperSelect;
'use strict';var _values2=require('lodash/values'),_values3=_interopRequireDefault(_values2),_uniqueId2=require('lodash/uniqueId'),_uniqueId3=_interopRequireDefault(_uniqueId2),_reject2=require('lodash/reject'),_reject3=_interopRequireDefault(_reject2),_reduce2=require('lodash/reduce'),_reduce3=_interopRequireDefault(_reduce2),_omit2=require('lodash/omit'),_omit3=_interopRequireDefault(_omit2),_noop2=require('lodash/noop'),_noop3=_interopRequireDefault(_noop2),_map2=require('lodash/map'),_map3=_interopRequireDefault(_map2),_last2=require('lodash/last'),_last3=_interopRequireDefault(_last2),_isUndefined2=require('lodash/isUndefined'),_isUndefined3=_interopRequireDefault(_isUndefined2),_isString2=require('lodash/isString'),_isString3=_interopRequireDefault(_isString2),_isObject2=require('lodash/isObject'),_isObject3=_interopRequireDefault(_isObject2),_isNumber2=require('lodash/isNumber'),_isNumber3=_interopRequireDefault(_isNumber2),_isNull2=require('lodash/isNull'),_isNull3=_interopRequireDefault(_isNull2),_isFunction2=require('lodash/isFunction'),_isFunction3=_interopRequireDefault(_isFunction2),_isEqual2=require('lodash/isEqual'),_isEqual3=_interopRequireDefault(_isEqual2),_isEmpty2=require('lodash/isEmpty'),_isEmpty3=_interopRequireDefault(_isEmpty2),_isArray2=require('lodash/isArray'),_isArray3=_interopRequireDefault(_isArray2),_includes2=require('lodash/includes'),_includes3=_interopRequireDefault(_includes2),_head2=require('lodash/head'),_head3=_interopRequireDefault(_head2),_groupBy2=require('lodash/groupBy'),_groupBy3=_interopRequireDefault(_groupBy2),_forIn2=require('lodash/forIn'),_forIn3=_interopRequireDefault(_forIn2),_find2=require('lodash/find'),_find3=_interopRequireDefault(_find2),_filter2=require('lodash/filter'),_filter3=_interopRequireDefault(_filter2),_extend2=require('lodash/extend'),_extend3=_interopRequireDefault(_extend2),_bindAll2=require('lodash/bindAll'),_bindAll3=_interopRequireDefault(_bindAll2),_extends=Object.assign||function(target){for(var source,i=1;i<arguments.length;i++)for(var key in source=arguments[i],source)Object.prototype.hasOwnProperty.call(source,key)&&(target[key]=source[key]);return target},_createClass=function(){function defineProperties(target,props){for(var descriptor,i=0;i<props.length;i++)descriptor=props[i],descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,'value'in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}(),_classnames=require('classnames'),_classnames2=_interopRequireDefault(_classnames),_propTypes=require('prop-types'),_propTypes2=_interopRequireDefault(_propTypes),_react=require('react'),_react2=_interopRequireDefault(_react);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError('Cannot call a class as a function')}function _possibleConstructorReturn(self,call){if(!self)throw new ReferenceError('this hasn\'t been initialised - super() hasn\'t been called');return call&&('object'==typeof call||'function'==typeof call)?call:self}function _inherits(subClass,superClass){if('function'!=typeof superClass&&null!==superClass)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:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}var _ref=_react2.default.createElement('span',null),_ref2=_react2.default.createElement('span',null),_ref3=_react2.default.createElement('span',null),ReactSuperSelect=function(_React$Component){function ReactSuperSelect(props){_classCallCheck(this,ReactSuperSelect);var _this=_possibleConstructorReturn(this,(ReactSuperSelect.__proto__||Object.getPrototypeOf(ReactSuperSelect)).call(this,props));return _this.SEARCH_FOCUS_ID=-1,_this.SELECTED_OPTION_REGEX=/r-ss-selected/,_this.keymap={down:40,end:35,enter:13,esc:27,home:36,space:32,tab:9,up:38},_this.ariaRelevantKeydownCodes=(0,_values3.default)(_this.keymap),_this.lastUserSelectedOption=void 0,_this._rssDOM={},_this.state={ajaxError:!1,controlId:_this.props.controlId||(0,_uniqueId3.default)('rss_'),data:_this._configureDataSource(_this.props.dataSource),rawDataSource:_this.props.dataSource,isOpen:!1,focusedId:void 0,labelKey:_this.props.optionLabelKey,lastOptionId:(0,_isArray3.default)(_this.props.dataSource)&&0<_this.props.dataSource.length?_this.props.dataSource.length-1:void 0,searchString:'',value:_this._buildInitialValue(),valueKey:_this.props.optionValueKey},(0,_bindAll3.default)(_this,['toggleDropdown','_ariaGetActiveDescendentId','_ariaGetListId','_arrestScroll','_broadcastChange','_buildInitialValue','_clearSearchString','_clearSelection','_closeOnKeypress','_configureDataSource','_defaultSearchFilter','_deselectAction','_fetchDataViaAjax','_fetchNextPage','_filterDataBySearchString','_findArrayOfOptionDataObjectsByValue','_focusCurrentFocusedId','_focusDOMOption','_focusRemovalButtons','_focusTrigger','_generateValueDisplay','_getAjaxErrorMarkup','_getDataSource','_getDropdownContent','_getFocusedOptionKey','_getGroupHeadingMarkup','_getNoResultsMarkup','_getNormalDisplayMarkup','_getLoadingMarkup','_getOptionIndexFromTarget','_getOptionsMarkup','_getOptionValueFromDataAttr','_getPagingLi','_getSearchContent','_getTagsDisplayMarkup','_getTagMarkup','_getTagRemoveIndex','_getTemplatedOptions','_getTypeSafeOptionValue','_handleDocumentClick','_handleKeyDown','_handleSearch','_isCurrentlySelected','_isMultiSelect','_isUserSearchTypingEvent','_mapDataToOptionsMarkup','_moveFocusDown','_moveFocusUp','_needsAjaxFetch','_onDownKey','_onEndKey','_onEnterKey','_onEscKey','_onHomeKey','_onMouseMove','_onUpKey','_pageFetchingComplete','_removeAllOptionsInOptionIdRange','_removeSelectedOptionByValue','_removeTagKeyPress','_removeTagClick','_selectAllOptionsInOptionIdRange','_selectAllOptionsToLastUserSelectedOption','_selectFocusedOption','_selectItemByValues','_selectItemOnOptionClick','_setFocusIdToSearch','_setFocusOnOpen','_setFocusToTagRemovalIfPresent','_updateFocusedId']),_this}return _inherits(ReactSuperSelect,_React$Component),_createClass(ReactSuperSelect,[{key:'componentDidMount',value:function componentDidMount(){var _this2=this;document.addEventListener('click',this._handleDocumentClick),document.addEventListener('touchstart',this._handleDocumentClick),!this.props.disabled&&this.props.openOnMount&&this.setState({isOpen:!0},function(){_this2.props.focusOnMount&&!(0,_isFunction3.default)(_this2.props.ajaxDataFetch)&&_this2._moveFocusDown()})}},{key:'componentWillUnmount',value:function componentWillUnmount(){document.removeEventListener('click',this._handleDocumentClick),document.removeEventListener('touchstart',this._handleDocumentClick)}},{key:'componentWillReceiveProps',value:function componentWillReceiveProps(nextProps){var newState={};if((0,_isUndefined3.default)(nextProps.optionLabelKey)||nextProps.optionLabelKey===this.props.optionLabelKey||(newState.labelKey=nextProps.optionLabelKey),(0,_isUndefined3.default)(nextProps.optionValueKey)||nextProps.optionValueKey===this.props.optionValueKey||(newState.valueKey=nextProps.optionValueKey),!(0,_isEqual3.default)(this.props.dataSource,nextProps.dataSource)){this.lastUserSelectedOption=void 0;var newValue=this.props.clearSelectedValueOnDataSourceChange?[]:this.state.value;newState=(0,_extend3.default)(newState,{data:this._configureDataSource(nextProps.dataSource),rawDataSource:nextProps.dataSource,focusedId:void 0,value:newValue,lastOptionId:(0,_isArray3.default)(nextProps.dataSource)&&0<nextProps.dataSource.length?nextProps.dataSource.length-1:void 0})}(0,_isEqual3.default)(nextProps.initialValue,this.props.initialValue)||(newState.value=this._buildInitialValue(nextProps)),(0,_isEmpty3.default)(newState)||this.setState(newState,this._broadcastChange)}},{key:'componentDidUpdate',value:function componentDidUpdate(prevProps,prevState){if(this._focusCurrentFocusedId(),this.state.isOpen!==prevState.isOpen){var openStateCallback=this.state.isOpen?this.props.onOpenDropdown:this.props.onCloseDropdown;openStateCallback()}}},{key:'render',value:function render(){var _this3=this,caratClass=(0,_classnames2.default)('carat',{down:!this.state.isOpen,up:this.state.isOpen}),clearSelectionLabelString=this.props.clearSelectionLabelString?this.props.clearSelectionLabelString:this.props.clearSelectionLabelString,dropdownContent=this._getDropdownContent(),placeholderString=this.props.placeholder?this.props.placeholder:this.props.placeholder,triggerClasses=(0,_classnames2.default)('r-ss-trigger',{"r-ss-open":this.state.isOpen,"r-ss-disabled":this.props.disabled,"r-ss-placeholder":1>this.state.value.length}),triggerDisplayContent=this.state.value.length?this._generateValueDisplay():placeholderString,wrapClasses=(0,_classnames2.default)('r-ss-wrap',this.props.customClass,{"r-ss-expanded":this.state.isOpen}),clearSelectionButton=null;(0,_isEmpty3.default)(this.state.value)||!1===this.props.clearable||(clearSelectionButton=_react2.default.createElement('button',{"aria-label":clearSelectionLabelString,ref:function ref(c){_this3._rssDOM.selectionClear=c},name:'clearSelection',type:'button',className:'r-ss-selection-clear',onClick:this._clearSelection,onKeyDown:this._clearSelection},_ref));var overridableInputProps=(0,_omit3.default)(this.props.inputProps,['className','onBlur','onKeyDown','role','aria-activedescendant','aria-disabled','aria-haspopup','aria-controls','aria-multiselectable','tabIndex']);return _react2.default.createElement('div',{ref:function ref(c){_this3._rssDOM.rssControl=c},id:this.state.controlId,className:wrapClasses},_react2.default.createElement('div',_extends({ref:function ref(c){_this3._rssDOM.triggerDiv=c},className:(0,_classnames2.default)(triggerClasses,this.props.inputProps.className),onBlur:this.props.onBlur,onClick:this.toggleDropdown,onKeyDown:this._handleKeyDown,role:'combobox',"aria-activedescendant":this._ariaGetActiveDescendentId(),"aria-disabled":this.props.disabled,"aria-haspopup":!0,"aria-controls":this._ariaGetListId(),"aria-label":placeholderString,"aria-multiselectable":this._isMultiSelect(),tabIndex:'0'},overridableInputProps),triggerDisplayContent,clearSelectionButton,_react2.default.createElement('span',{ref:function ref(c){_this3._rssDOM.carat=c},className:caratClass},' ')),dropdownContent)}},{key:'toggleDropdown',value:function toggleDropdown(){var _this4=this;if(!this.props.disabled){var newState={isOpen:!this.state.isOpen};this.state.isOpen&&(0,_extend3.default)(newState,{focusedId:void 0});var wasClosed=!this.state.isOpen;this.setState(newState,function(){wasClosed&&_this4._setFocusOnOpen()})}}},{key:'_ariaGetActiveDescendentId',value:function _ariaGetActiveDescendentId(){var ariaActiveDescendantId=null,optionRef=this._getFocusedOptionKey();return this._rssDOM[optionRef]&&(ariaActiveDescendantId=this._rssDOM[optionRef].id),ariaActiveDescendantId}},{key:'_ariaGetListId',value:function _ariaGetListId(){return this.state.controlId+'_list'}},{key:'_arrestEvent',value:function _arrestEvent(event){event.stopPropagation(),event.preventDefault()}},{key:'_arrestScroll',value:function _arrestScroll(event){if(this.props.forceDefaultBrowserScrolling)return!0;var arrestScroll=!1,adjustedHeight=this._rssDOM.scrollWrap.scrollTop+this._rssDOM.scrollWrap.clientHeight;0<event.deltaY?adjustedHeight>=this._rssDOM.scrollWrap.scrollHeight&&(arrestScroll=!0):0>=this._rssDOM.scrollWrap.scrollTop&&(arrestScroll=!0),arrestScroll&&this._arrestEvent(event)}},{key:'_broadcastChange',value:function _broadcastChange(){var outputValue=this._isMultiSelect()?this.state.value:(0,_head3.default)(this.state.value);outputValue=(0,_isEmpty3.default)(outputValue)?void 0:outputValue,this.props.onChange(outputValue)}},{key:'_buildInitialValue',value:function _buildInitialValue(props){props=props||this.props;var initialValue=[];return(0,_isNull3.default)(props.initialValue)||(0,_isUndefined3.default)(props.initialValue)||(initialValue=(0,_isArray3.default)(props.initialValue)?props.initialValue:[props.initialValue],!this._isMultiSelect()&&(initialValue=[(0,_head3.default)(initialValue)])),initialValue}},{key:'_clearSearchString',value:function _clearSearchString(){var _this5=this;this.setState({searchString:''},function(){_this5.props.onSearchInputChange(_this5.state.searchString),_this5._setFocusIdToSearch()})}},{key:'_clearSelection',value:function _clearSelection(event){var _this6=this;(event.which===this.keymap.enter||event.which===this.keymap.space||'click'===event.type)&&(event.stopPropagation(),this.setState({value:[]},function(){_this6.state.isOpen&&_this6._setFocusOnOpen(),_this6.lastUserSelectedOption=void 0,_this6._focusTrigger(),_this6._broadcastChange(),_this6.props.onClear()}))}},{key:'_closeOnKeypress',value:function _closeOnKeypress(){this.state.isOpen&&this.setState({isOpen:!1,focusedId:void 0},this._focusTrigger)}},{key:'_configureDataSource',value:function _configureDataSource(dataSource){if((0,_isArray3.default)(dataSource))return dataSource;if((0,_isObject3.default)(dataSource)){if((0,_isArray3.default)(dataSource.collection))return dataSource.collection;if((0,_isFunction3.default)(dataSource.get)){var collection=dataSource.get('collection');if((0,_isArray3.default)(collection))return collection}}return[]}},{key:'_deselectAction',value:function _deselectAction(value){var keepControlOpen=!!(1<arguments.length&&void 0!==arguments[1])&&arguments[1],shouldClose=this.props.closeOnSelectedOptionClick&&!keepControlOpen;if(!this.props.deselectOnSelectedOptionClick)return shouldClose&&this._closeOnKeypress(),!1;var callback=shouldClose?this._closeOnKeypress:_noop3.default;this._removeSelectedOptionByValue(value,callback)}},{key:'_defaultSearchFilter',value:function _defaultSearchFilter(option){var search=this.state.searchString.toLowerCase(),labelAsString=(0,_isString3.default)(option[this.state.labelKey])?option[this.state.labelKey]:option[this.state.labelKey].toString();return-1<labelAsString.toLowerCase().indexOf(search)}},{key:'_fetchDataViaAjax',value:function _fetchDataViaAjax(){var _this7=this,self=this;this.IS_FETCHING_AJAX||(this.IS_FETCHING_AJAX=!0,this.props.ajaxDataFetch(this.state.rawDataSource).then(function(dataSourceFromAjax){_this7.IS_FETCHING_AJAX=!1,self.setState({ajaxError:!1,data:self._configureDataSource(dataSourceFromAjax),rawDataSource:dataSourceFromAjax},function(){self.props.openOnMount&&self.props.focusOnMount&&self._moveFocusDown()})},function(){_this7.IS_FETCHING_AJAX=!1,self.setState({ajaxError:!0,rawDataSource:[]})}))}},{key:'_fetchNextPage',value:function _fetchNextPage(){if(!this._needsAjaxFetch()){var self=this;this.props.pageDataFetch(this.state.rawDataSource).then(function(dataSourceFromPageFetch){self.setState({ajaxError:!1,data:self._configureDataSource(dataSourceFromPageFetch),rawDataSource:dataSourceFromPageFetch,isFetchingPage:!1})},function(){self.setState({ajaxError:!0})})}}},{key:'_filterDataBySearchString',value:function _filterDataBySearchString(data){var self=this,filterFunction=this._defaultSearchFilter;return(0,_isFunction3.default)(this.props.customFilterFunction)&&(filterFunction=function(value,index,collection){return self.props.customFilterFunction.apply(self,[value,index,collection,self.state.searchString.toLowerCase()])}),(0,_filter3.default)(data,filterFunction)}},{key:'_findArrayOfOptionDataObjectsByValue',value:function _findArrayOfOptionDataObjectsByValue(value){var _this8=this,valuesArray=(0,_isArray3.default)(value)?(0,_map3.default)(value,this.state.valueKey):[value];return(0,_reject3.default)(this.state.data,function(item){return!(0,_includes3.default)(valuesArray,item[_this8.state.valueKey])&&!(0,_includes3.default)(valuesArray,parseInt(item[_this8.state.valueKey],10))})}},{key:'_focusCurrentFocusedId',value:function _focusCurrentFocusedId(){return 0>this.state.focusedId?void this._focusSearch():void this._focusDOMOption()}},{key:'_focusDOMOption',value:function _focusDOMOption(){var optionRef=this._getFocusedOptionKey();this._rssDOM[optionRef]&&(0,_isFunction3.default)(this._rssDOM[optionRef].focus)&&this._rssDOM[optionRef].focus()}},{key:'_focusSearch',value:function _focusSearch(){this._rssDOM.searchInput&&this._rssDOM.searchInput.focus()}},{key:'_focusRemovalButtons',value:function _focusRemovalButtons(event){var triggerContainer=this._rssDOM.triggerDiv,buttons=triggerContainer.getElementsByTagName('button'),currentlyFocusedRemoveButtonIndex=void 0,nextButtonIndexToFocus=void 0;if(buttons.length)for(var i=0;i<buttons.length;i++)buttons[i]===document.activeElement&&(currentlyFocusedRemoveButtonIndex=i,nextButtonIndexToFocus=event.shiftKey?i-1:i+1);buttons[nextButtonIndexToFocus]?(this._arrestEvent(event),buttons[nextButtonIndexToFocus].focus()):nextButtonIndexToFocus&&0>nextButtonIndexToFocus?this._focusTrigger():buttons[0]&&!(0,_isNumber3.default)(currentlyFocusedRemoveButtonIndex)&&(this._arrestEvent(event),buttons[0].focus())}},{key:'_focusTrigger',value:function _focusTrigger(){this._rssDOM.triggerDiv.focus()}},{key:'_generateValueDisplay',value:function _generateValueDisplay(){return this.props.customSelectedValueTemplateFunction?this.props.customSelectedValueTemplateFunction(this.state.value):this.props.tags?this._getTagsDisplayMarkup():this._getNormalDisplayMarkup()}},{key:'_getAjaxErrorMarkup',value:function _getAjaxErrorMarkup(){var _this9=this,errorString=this.props.ajaxErrorString?this.props.ajaxErrorString:this.ajaxErrorString;return _react2.default.createElement('li',{className:'r-ss-dropdown-option error'},_react2.default.createElement('i',{ref:function ref(c){_this9._rssDOM.errorDisplay=c}},errorString))}},{key:'_getDataSource',value:function _getDataSource(){var data=(0,_isArray3.default)(this.state.data)?this.state.data:[];return(0,_isString3.default)(this.state.searchString)&&!(0,_isEmpty3.default)(this.state.searchString)&&(data=this._filterDataBySearchString(data)),this.props.groupBy&&(data=(0,_groupBy3.default)(data,this.props.groupBy)),data}},{key:'_getDropdownContent',value:function _getDropdownContent(){var _this10=this;if(!this.state.isOpen)return null;var searchContent=this._getSearchContent(),mouseMoveHandler=this.props.pageDataFetch?this._onMouseMove:null,pagingLi=this.state.isFetchingPage?this._getPagingLi():null;return _react2.default.createElement('div',{ref:function ref(c){_this10._rssDOM.dropdownContent=c},className:'r-ss-dropdown',onKeyDown:this._handleKeyDown},searchContent,_react2.default.createElement('div',{ref:function ref(c){_this10._rssDOM.scrollWrap=c},className:'r-ss-options-wrap',onMouseMove:mouseMoveHandler},_react2.default.createElement('ul',{className:'r-ss-dropdown-options',ref:function ref(c){_this10._rssDOM.dropdownOptionsList=c},tabIndex:'-1',id:this._ariaGetListId(),role:'listbox',"aria-expanded":this.state.isOpen,onWheel:this._arrestScroll},this._getOptionsMarkup()),pagingLi))}},{key:'_getFocusedOptionKey',value:function _getFocusedOptionKey(){return'option_'+this.state.focusedId}},{key:'_getGroupHeadingMarkup',value:function _getGroupHeadingMarkup(heading){if(!heading)return null;var headingClasses=(0,_classnames2.default)('r-ss-option-group-heading',this.props.customGroupHeadingClass),headingMarkup=this.props.customGroupHeadingTemplateFunction?this.props.customGroupHeadingTemplateFunction(heading):heading;return _react2.default.createElement('li',{tabIndex:'-1',className:headingClasses,key:'heading_'+heading,role:'separator',"aria-label":heading,"aria-hidden":!0},headingMarkup)}},{key:'_getNoResultsMarkup',value:function _getNoResultsMarkup(){var _this11=this,noResultsMarkup=_react2.default.createElement('i',{ref:function ref(c){_this11._rssDOM.noResults=c}},this.props.noResultsString);return(0,_isString3.default)(this.props.noResultsString)||(noResultsMarkup=_react2.default.createElement('div',{ref:function ref(c){_this11._rssDOM.noResults=c}},this.props.noResultsString)),_react2.default.createElement('li',{className:'r-ss-dropdown-option',tabIndex:'-1'},noResultsMarkup)}},{key:'_getNormalDisplayMarkup',value:function _getNormalDisplayMarkup(){var _this12=this;return(0,_map3.default)(this.state.value,function(value){var selectedKey='r_ss_selected_'+value[_this12.state.labelKey];return _this12.props.customOptionTemplateFunction?_this12.props.customOptionTemplateFunction(value):_react2.default.createElement('span',{key:selectedKey,className:'r-ss-selected-label'},value[_this12.state.labelKey])})}},{key:'_getLoadingMarkup',value:function _getLoadingMarkup(){var _this13=this,loaderClasses=this.props.customLoaderClass?'r-ss-loader '+this.props.customLoaderClass:'r-ss-loader';return _react2.default.createElement('span',{ref:function ref(c){_this13._rssDOM.loader=c},className:loaderClasses})}},{key:'_getOptionIndexFromTarget',value:function _getOptionIndexFromTarget(targetLi){return parseInt(targetLi.getAttribute('data-option-index'),10)}},{key:'_getOptionsMarkup',value:function _getOptionsMarkup(){var _this14=this;if(this._needsAjaxFetch())return this._fetchDataViaAjax(),this._getPagingLi();if(this.state.ajaxError)return this._getAjaxErrorMarkup();var data=this._getDataSource(),options=[],optionsCount=0;return(0,_isArray3.default)(data)||(0,_isEmpty3.default)(data)?options=this._getTemplatedOptions(data):(0,_forIn3.default)(data,function(groupedOptions,heading){options.push(_this14._getGroupHeadingMarkup(heading)),options=options.concat(_this14._getTemplatedOptions(groupedOptions,optionsCount)),optionsCount+=groupedOptions.length}),options}},{key:'_getOptionValueFromDataAttr',value:function _getOptionValueFromDataAttr(optionNode){var optionValue=optionNode.getAttribute('data-option-value');return this._getTypeSafeOptionValue(optionValue)}},{key:'_getPagingLi',value:function _getPagingLi(){return _react2.default.createElement('li',{key:'page_loading',className:'r-ss-page-fetch-indicator',tabIndex:'-1'},this._getLoadingMarkup())}},{key:'_getSearchContent',value:function _getSearchContent(){var _this15=this;if(!this.props.searchable)return null;var clearSearchLabelString=this.props.clearSearchLabelString?this.props.clearSearchLabelString:this.props.clearSearchLabelString,magnifierClass=this.props.customSearchIconClass?this.props.customSearchIconClass:'r-ss-magnifier',searchPlaceholderString=this.props.searchPlaceholder?this.props.searchPlaceholder:this.props.searchPlaceholder,searchAriaId=this.state.controlId+'_search',searchAriaIdLabel=searchAriaId+'_label',clearSearch=null;return(0,_isString3.default)(this.state.searchString)&&!(0,_isEmpty3.default)(this.state.searchString)&&(clearSearch=_react2.default.createElement('button',{"aria-label":clearSearchLabelString,ref:function ref(c){_this15._rssDOM.searchClear=c},name:'clearSearch',type:'button',className:'r-ss-search-clear',onClick:this._clearSearchString,onKeyDown:this._clearSearchString},_ref2)),_react2.default.createElement('div',{className:'r-ss-search-wrap'},_react2.default.createElement('div',{className:'r-ss-search-inner'},_react2.default.createElement('label',{ref:function ref(c){_this15._rssDOM.searchInputLabel=c},id:searchAriaIdLabel,className:'r-ss-search-aria-label',htmlFor:searchAriaId},searchPlaceholderString),_react2.default.createElement('input',{ref:function ref(c){_this15._rssDOM.searchInput=c},placeholder:searchPlaceholderString,onClick:this._setFocusIdToSearch,onBlur:this.props.onSearchInputBlur,onChange:this._handleSearch,value:this.state.searchString,name:searchAriaId,id:searchAriaId,"aria-labelledby":searchAriaIdLabel,"aria-autocomplete":'list'}),clearSearch,_react2.default.createElement('i',{className:magnifierClass},'search')))}},{key:'_getTagsDisplayMarkup',value:function _getTagsDisplayMarkup(){var _this16=this;return(0,_map3.default)(this.state.value,function(value){return _this16._getTagMarkup(value)})}},{key:'_getTagMarkup',value:function _getTagMarkup(value){var _this17=this,displayValue=value[this.state.valueKey],tagRemoveIndex=this._getTagRemoveIndex(displayValue),label=value[this.state.labelKey],tagWrapClass=this.props.customTagClass?'r-ss-tag '+this.props.customTagClass:'r-ss-tag',tagRemoveButtonLabelString=this.props.tagRemoveLabelString?this.props.tagRemoveLabelString:this.props.tagRemoveLabelString;return tagRemoveButtonLabelString=tagRemoveButtonLabelString+' '+label,_react2.default.createElement('span',{className:tagWrapClass,key:'tag_'+displayValue},_react2.default.createElement('span',{className:'r-ss-tag-label'},label),_react2.default.createElement('button',{"aria-label":tagRemoveButtonLabelString,ref:function ref(c){_this17._rssDOM[tagRemoveIndex]=c},name:'RemoveTag_'+displayValue,type:'button',className:'r-ss-tag-remove',onClick:this._removeTagClick.bind(null,value),onKeyDown:this._removeTagKeyPress.bind(null,value)},_ref3))}},{key:'_getTagRemoveIndex',value:function _getTagRemoveIndex(identifier){return'tag_remove_'+identifier}},{key:'_getTemplatedOptions',value:function _getTemplatedOptions(data,indexStart){indexStart=indexStart||0;var options=this._mapDataToOptionsMarkup(data,indexStart);return 0===options.length&&(options=this._getNoResultsMarkup()),options}},{key:'_getTypeSafeOptionValue',value:function _getTypeSafeOptionValue(optionValue){return+optionValue+''===optionValue?+optionValue:optionValue}},{key:'_handleDocumentClick',value:function _handleDocumentClick(){var event=Array.prototype.slice.call(arguments)[0],isTargetStillInDOM=document.contains(event.target);(!this._rssDOM.rssControl||isTargetStillInDOM&&!this._rssDOM.rssControl.contains(event.target))&&this.state.isOpen&&this.setState({isOpen:!1,focusedId:void 0})}},{key:'_handleKeyDown',value:function _handleKeyDown(event){if(!this._isUserSearchTypingEvent(event))switch(this.state.isOpen&&(0,_includes3.default)(this.ariaRelevantKeydownCodes,event.which)&&this._arrestEvent(event),event.which){case this.keymap.down:this._onDownKey(event);break;case this.keymap.end:this._onEndKey();break;case this.keymap.enter:this._onEnterKey(event);break;case this.keymap.esc:this._onEscKey();break;case this.keymap.home:this._onHomeKey();break;case this.keymap.space:this._onEnterKey(event);break;case this.keymap.tab:this.state.isOpen?this._onEnterKey(event):this._focusRemovalButtons(event);break;case this.keymap.up:this._onUpKey(event);}}},{key:'_handleSearch',value:function _handleSearch(event){var _this18=this;this._arrestEvent(event),this.setState({searchString:event.target.value},function(){_this18.props.onSearchInputChange(_this18.state.searchString)})}},{key:'_isCurrentlySelected',value:function _isCurrentlySelected(dataItem){return(0,_isArray3.default)(this.state.value)?!!(0,_find3.default)(this.state.value,dataItem):(0,_isEqual3.default)(this.state.value,dataItem)}},{key:'_isMultiSelect',value:function _isMultiSelect(){return this.props.multiple||this.props.tags}},{key:'_isUserSearchTypingEvent',value:function _isUserSearchTypingEvent(event){return this._rssDOM.searchInput&&event.which!==this.keymap.down&&(event.which!==this.keymap.up||!event.altKey)&&event.which!==this.keymap.esc&&event.target===this._rssDOM.searchInput}},{key:'_mapDataToOptionsMarkup',value:function _mapDataToOptionsMarkup(data,indexStart){var _this19=this;return(0,_map3.default)(data,function(dataOption,index){index=indexStart+index;var indexRef='option_'+index,isDisabled=!!dataOption.disabled,isCurrentlySelected=_this19._isCurrentlySelected(dataOption),itemKey='drop_li_'+dataOption[_this19.state.valueKey],ariaDescendantId=_this19.state.controlId+'_aria_'+indexRef,clickHandler=isDisabled?_noop3.default:_this19._selectItemOnOptionClick.bind(null,dataOption),optionMarkup=(0,_isFunction3.default)(_this19.props.customOptionTemplateFunction)?_this19.props.customOptionTemplateFunction(dataOption,_this19.state.searchString):dataOption[_this19.state.labelKey],classes=(0,_classnames2.default)('r-ss-dropdown-option',{"r-ss-selected":isCurrentlySelected,"r-ss-disabled":isDisabled});return _react2.default.createElement('li',{ref:function ref(c){_this19._rssDOM[indexRef]=c},disabled:isDisabled,"aria-disabled":isDisabled,id:ariaDescendantId,tabIndex:'0',"data-option-index":index,className:classes,"aria-selected":isCurrentlySelected,key:itemKey,"data-option-value":dataOption[_this19.state.valueKey],onClick:clickHandler,role:'option'},optionMarkup)})}},{key:'_moveFocusDown',value:function _moveFocusDown(){if(!this._needsAjaxFetch()||this.props.searchable){var nextId;nextId=(0,_isUndefined3.default)(this.state.focusedId)?this.props.searchable?this.SEARCH_FOCUS_ID:0:this.state.lastOptionId===this.state.focusedId?this.state.lastOptionId:this.state.focusedId+1,this._updateFocusedId(nextId)}}},{key:'_moveFocusUp',value:function _moveFocusUp(){var previousId;(0,_isUndefined3.default)(this.state.focusedId)||this.state.focusedId===this.SEARCH_FOCUS_ID||(0===this.state.focusedId?this.props.searchable&&(previousId=this.SEARCH_FOCUS_ID):previousId=this.state.focusedId-1),this._updateFocusedId(previousId)}},{key:'_needsAjaxFetch',value:function _needsAjaxFetch(){return(0,_isUndefined3.default)(this.state.rawDataSource)&&(0,_isFunction3.default)(this.props.ajaxDataFetch)}},{key:'_onDownKey',value:function _onDownKey(event){return this.state.isOpen?void(this._moveFocusDown(),this._isMultiSelect()&&event.shiftKey&&this._selectFocusedOption(event.target,!0)):void this.toggleDropdown()}},{key:'_onEndKey',value:function _onEndKey(){this.state.lastOptionId&&this._updateFocusedId(this.state.lastOptionId)}},{key:'_onEnterKey',value:function _onEnterKey(event){if(!this.state.isOpen)return void this.toggleDropdown();if(this._isMultiSelect()&&event.shiftKey)return void this._selectAllOptionsToLastUserSelectedOption(event.target);var keepControlOpen=this._isMultiSelect()&&(event.ctrlKey||event.metaKey);this._selectFocusedOption(event.target,keepControlOpen)}},{key:'_onEscKey',value:function _onEscKey(){this._closeOnKeypress()}},{key:'_onHomeKey',value:function _onHomeKey(){this._updateFocusedId(0)}},{key:'_onMouseMove',value:function _onMouseMove(){if(!this._rssDOM.loader&&(0,_isEmpty3.default)(this.state.searchString)&&this._pageFetchingComplete()){var wrap=this._rssDOM.scrollWrap;wrap.scrollTop+wrap.offsetHeight>=wrap.scrollHeight&&this.setState({isFetchingPage:!0},this._fetchNextPage)}}},{key:'_onUpKey',value:function _onUpKey(event){return event.altKey?void this._closeOnKeypress():void(this.state.isOpen&&(this._moveFocusUp(),this._isMultiSelect()&&event.shiftKey&&this._selectFocusedOption(event.target,!0)))}},{key:'_pageFetchingComplete',value:function _pageFetchingComplete(){return!!(0,_isFunction3.default)(this.props.hasMorePages)&&this.props.hasMorePages(this.state.rawDataSource)}},{key:'_removeAllOptionsInOptionIdRange',value:function _removeAllOptionsInOptionIdRange(from,to){for(var _this20=this,valuePropsToReject=[],start=from<=to?from:to,end=to>=from?to:from,i=start;i<=end;i++){var refString='option_'+i,option=this._rssDOM[refString];this.SELECTED_OPTION_REGEX.test(option.getAttribute('class'))&&this.lastUserSelectedOption.getAttribute('data-option-value')!==option.getAttribute('data-option-value')&&valuePropsToReject.push(this._getOptionValueFromDataAttr(option))}var remainingSelected=(0,_reject3.default)(this.state.value,function(opt){return(0,_includes3.default)(valuePropsToReject,opt[_this20.state.valueKey])});this.setState({value:remainingSelected},this._broadcastChange)}},{key:'_removeSelectedOptionByValue',value:function _removeSelectedOptionByValue(value){var _this21=this,callback=1<arguments.length&&void 0!==arguments[1]?arguments[1]:_noop3.default,SelectedAfterRemoval=(0,_reject3.default)(this.state.value,function(option){return option[_this21.state.valueKey]===value[_this21.state.valueKey]});this.setState({value:SelectedAfterRemoval},function(){callback(),_this21._broadcastChange()})}},{key:'_removeTagKeyPress',value:function _removeTagKeyPress(value,event){var isEnterKey=event.which===this.keymap.enter,isSpaceKey=event.which===this.keymap.space;(isEnterKey||isSpaceKey)&&(this._arrestEvent(event),this._removeSelectedOptionByValue(value,this._setFocusToTagRemovalIfPresent))}},{key:'_removeTagClick',value:function _removeTagClick(value,event){this._arrestEvent(event),this._removeSelectedOptionByValue(value)}},{key:'_selectAllOptionsInOptionIdRange',value:function _selectAllOptionsInOptionIdRange(from,to){for(var _this22=this,valuePropsToSelect=[],start=from<=to?from:to,end=to>=from?to:from,i=start;i<=end;i++){var refString='option_'+i,option=this._rssDOM[refString];this.SELECTED_OPTION_REGEX.test(option.getAttribute('class'))||valuePropsToSelect.push(this._getOptionValueFromDataAttr(option))}var optionsToSelect=(0,_reduce3.default)(this.state.data,function(memo,opt){return(0,_includes3.default)(valuePropsToSelect,_this22._getTypeSafeOptionValue(opt[_this22.state.valueKey]))&&!opt.disabled&&memo.push(opt),memo},[]);this._selectItemByValues(optionsToSelect,!0)}},{key:'_selectAllOptionsToLastUserSelectedOption',value:function _selectAllOptionsToLastUserSelectedOption(eventTargetLi){if(!this.lastUserSelectedOption)return this.lastUserSelectedOption=eventTargetLi,void this._selectAllOptionsInOptionIdRange(0,this._getOptionIndexFromTarget(eventTargetLi));var fromVal=this._getOptionIndexFromTarget(this.lastUserSelectedOption),to=this._getOptionIndexFromTarget(eventTargetLi);if(this.lastUserSelectedOption=eventTargetLi,this.SELECTED_OPTION_REGEX.test(eventTargetLi.getAttribute('class'))){if(!this.props.deselectOnSelectedOptionClick)return!1;this._removeAllOptionsInOptionIdRange(fromVal,to)}else this._selectAllOptionsInOptionIdRange(fromVal,to)}},{key:'_selectFocusedOption',value:function _selectFocusedOption(eventTargetLi,keepControlOpen){var focusedOptionKey=this._getFocusedOptionKey();if(this._rssDOM[focusedOptionKey]){if('true'===this._rssDOM[focusedOptionKey].getAttribute('aria-disabled'))return!1;var optionValue=this._getOptionValueFromDataAttr(this._rssDOM[focusedOptionKey]);if(this.lastUserSelectedOption=eventTargetLi,this.SELECTED_OPTION_REGEX.test(this._rssDOM[focusedOptionKey].className)){var optionFullFromValueProp=(0,_head3.default)(this._findArrayOfOptionDataObjectsByValue(optionValue));this._deselectAction(optionFullFromValueProp,keepControlOpen)}else keepControlOpen=keepControlOpen||!1,this._selectItemByValues(optionValue,keepControlOpen)}}},{key:'_selectItemByValues',value:function _selectItemByValues(value,keepControlOpen){var _this23=this,objectValues=this._findArrayOfOptionDataObjectsByValue(value),remainOpenAfterSelection=keepControlOpen||this.props.keepOpenOnSelection;(this._isMultiSelect()||remainOpenAfterSelection&&this.state.value)&&(objectValues=this.state.value.concat(objectValues));var newState={value:this._isMultiSelect()?objectValues:[(0,_last3.default)(objectValues)]};this.props.searchable&&this.props.clearSearchOnSelection&&(0,_extend3.default)(newState,{searchString:''}),this.setState(newState,function(){remainOpenAfterSelection?_this23._updateFocusedId(parseInt(_this23.lastUserSelectedOption.getAttribute('data-option-index'),10)):_this23._closeOnKeypress(),_this23.props.searchable&&_this23.props.clearSearchOnSelection&&_this23.props.onSearchInputChange(_this23.state.searchString),_this23._broadcastChange()})}},{key:'_selectItemOnOptionClick',value:function _selectItemOnOptionClick(value,event){if(this._arrestEvent(event),this._isMultiSelect()&&event.shiftKey)return void this._selectAllOptionsToLastUserSelectedOption(event.currentTarget);var keepControlOpen=this._isMultiSelect()&&(event.ctrlKey||event.metaKey),alreadySelected=this.SELECTED_OPTION_REGEX.test(event.currentTarget.getAttribute('class'));this.lastUserSelectedOption=event.currentTarget,alreadySelected?this._deselectAction(value,keepControlOpen):this._selectItemByValues(value[this.state.valueKey],keepControlOpen)}},{key:'_setFocusIdToSearch',value:function _setFocusIdToSearch(){this._updateFocusedId(this.SEARCH_FOCUS_ID)}},{key:'_setFocusOnOpen',value:function _setFocusOnOpen(){this.lastUserSelectedOption?this._updateFocusedId(parseInt(this.lastUserSelectedOption.getAttribute('data-option-index'),10)):this._moveFocusDown()}},{key:'_setFocusToTagRemovalIfPresent',value:function _setFocusToTagRemovalIfPresent(){if(!this.props.tags||0===this.state.value.length)return!1;var firstValue=(0,_head3.default)(this.state.value)[this.state.valueKey],firstTag=this._rssDOM[this._getTagRemoveIndex(firstValue)];return!!(firstTag&&(0,_isFunction3.default)(firstTag.focus))&&(firstTag.focus(),!0)}},{key:'_updateFocusedId',value:function _updateFocusedId(id){this.setState({focusedId:id})}}]),ReactSuperSelect}(_react2.default.Component);ReactSuperSelect.defaultProps={clearable:!0,clearSelectedValueOnDataSourceChange:!1,closeOnSelectedOptionClick:!0,deselectOnSelectedOptionClick:!0,disabled:!1,keepOpenOnSelection:!1,multiple:!1,openOnMount:!1,focusOnMount:!1,forceDefaultBrowserScrolling:!1,searchable:!1,tags:!1,clearSearchOnSelection:!1,inputProps:{},onBlur:_noop3.default,onSearchInputBlur:_noop3.default,onClear:_noop3.default,onCloseDropdown:_noop3.default,onOpenDropdown:_noop3.default,onSearchInputChange:_noop3.default,optionLabelKey:'name',optionValueKey:'id',ajaxErrorString:'An Error occured while fetching options',clearSelectionLabelString:'Clear Selection',clearSearchLabelString:'Clear Search Field',noResultsString:'No Results Available',placeholder:'Select an Option',searchPlaceholder:'Search',tagRemoveLabelString:'Remove Tag'},ReactSuperSelect.propTypes={clearable:_propTypes2.default.bool,clearSelectedValueOnDataSourceChange:_propTypes2.default.bool,closeOnSelectedOptionClick:_propTypes2.default.bool,deselectOnSelectedOptionClick:_propTypes2.default.bool,disabled:_propTypes2.default.bool,keepOpenOnSelection:_propTypes2.default.bool,multiple:_propTypes2.default.bool,openOnMount:_propTypes2.default.bool,focusOnMount:_propTypes2.default.bool,forceDefaultBrowserScrolling:_propTypes2.default.bool,searchable:_propTypes2.default.bool,tags:_propTypes2.default.bool,clearSearchOnSelection:_propTypes2.default.bool,inputProps:_propTypes2.default.object,customClass:_propTypes2.default.string,customGroupHeadingClass:_propTypes2.default.string,customSearchIconClass:_propTypes2.default.string,customLoaderClass:_propTypes2.default.string,customTagClass:_propTypes2.default.string,onChange:_propTypes2.default.func.isRequired,onClear:_propTypes2.default.func,onCloseDropdown:_propTypes2.default.func,onSearchInputChange:_propTypes2.default.func,onOpenDropdown:_propTypes2.default.func,onBlur:_propTypes2.default.func,onSearchInputBlur:_propTypes2.default.func,ajaxDataFetch:_propTypes2.default.func,controlId:_propTypes2.default.string,dataSource:_propTypes2.default.oneOfType([_propTypes2.default.arrayOf(_propTypes2.default.object),_propTypes2.default.object]),initialValue:_propTypes2.default.oneOfType([_propTypes2.default.arrayOf(_propTypes2.default.object),_propTypes2.default.object]),optionLabelKey:_propTypes2.default.string,optionValueKey:_propTypes2.default.string,pageDataFetch:_propTypes2.default.func,hasMorePages:_propTypes2.default.func,groupBy:_propTypes2.default.oneOfType([_propTypes2.default.string,_propTypes2.default.func,_propTypes2.default.object]),customGroupHeadingTemplateFunction:_propTypes2.default.func,customFilterFunction:_propTypes2.default.func,customOptionTemplateFunction:_propTypes2.default.func,customSelectedValueTemplateFunction:_propTypes2.default.func,ajaxErrorString:_propTypes2.default.string,clearSelectionLabelString:_propTypes2.default.string,clearSearchLabelString:_propTypes2.default.string,noResultsString:_propTypes2.default.oneOfType([_propTypes2.default.string,_propTypes2.default.element]),placeholder:_propTypes2.default.string,searchPlaceholder:_propTypes2.default.string,tagRemoveLabelString:_propTypes2.default.string},module.exports=ReactSuperSelect;
{
"name": "react-super-select",
"version": "1.0.17",
"version": "1.0.18",
"description": "A flexible replacement for the html select control built with React",

@@ -5,0 +5,0 @@ "main": "./lib/react-super-select.js",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc