{"version":3,"file":"CustomSelect.bundle.js","sources":["../../../Static/src/react/components/common/CustomSelect.jsx"],"sourcesContent":["import React, {Component} from 'react';\r\nimport classNames from 'classnames';\r\n\r\nclass CustomSelect extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n isOpen: false,\r\n isFocused: false,\r\n selectedOption: this.props.selectedOption\r\n };\r\n\r\n this.handleKeyboardNavigation = this.handleKeyboardNavigation.bind(this);\r\n this.handleKeyboardOptionSelection = this.handleKeyboardOptionSelection.bind(this);\r\n this.handleBtnClick = this.handleBtnClick.bind(this);\r\n this.handleBtnFocus = this.handleBtnFocus.bind(this);\r\n this.handleBtnBlur = this.handleBtnBlur.bind(this);\r\n this.createOptionItem = this.createOptionItem.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n this.bindEventListeners();\r\n }\r\n\r\n componentWillUnmount() {\r\n this.unbindEventListeners();\r\n }\r\n\r\n bindEventListeners() {\r\n window.addEventListener('keydown', this.handleKeyboardNavigation, false);\r\n }\r\n\r\n unbindEventListeners() {\r\n window.removeEventListener('keydown', this.handleKeyboardNavigation, false);\r\n }\r\n\r\n handleKeyboardNavigation(event) {\r\n\r\n // keyCode 40 - arrow key down\r\n // keyCode 38 - arrow key up\r\n\r\n if (this.state.isFocused && (event.keyCode === 40 || event.keyCode === 38)) {\r\n event.preventDefault();\r\n if (!this.state.isOpen) {\r\n this.setState({isOpen: true});\r\n } else {\r\n this.setOption(event.keyCode);\r\n }\r\n }\r\n }\r\n\r\n setOption(keyCode) {\r\n const\r\n options = this.props.options,\r\n optionsLength = options.length,\r\n activeOptionIndex = options.indexOf(this.state.selectedOption),\r\n nextOptionIndex = keyCode === 40 ? activeOptionIndex + 1 : activeOptionIndex - 1;\r\n\r\n if (nextOptionIndex < optionsLength && nextOptionIndex >= 0) {\r\n this.setState({selectedOption: options[nextOptionIndex]})\r\n } else if (nextOptionIndex < 0) {\r\n this.setState({selectedOption: options[0]})\r\n }\r\n }\r\n\r\n handleBtnClick() {\r\n this.setState(prevState => ({\r\n isOpen: !prevState.isOpen\r\n }));\r\n\r\n }\r\n\r\n handleBtnFocus() {\r\n this.setState({\r\n isFocused: true\r\n });\r\n }\r\n\r\n handleBtnBlur() {\r\n this.setState({\r\n isOpen: false,\r\n isFocused: false\r\n });\r\n }\r\n\r\n handleOptionSelection(option) {\r\n this.setState(prevState => ({\r\n isOpen: !prevState.isOpen,\r\n selectedOption: option\r\n }));\r\n this.props.onValueSelection(option);\r\n\r\n }\r\n\r\n handleKeyboardOptionSelection(event) {\r\n\r\n // keyCode 40 - Enter\r\n if (event.keyCode === 13 && this.state.isOpen) {\r\n this.setState({\r\n isOpen: false,\r\n });\r\n this.props.onValueSelection(this.state.selectedOption);\r\n }\r\n }\r\n\r\n createOptionItem(option) {\r\n const optionStyles = classNames(\r\n 'custom-select__item',\r\n {'custom-select__item--highlighted': option === this.state.selectedOption}\r\n );\r\n\r\n return (\r\n