UNPKG

react-cm-ui

Version:
146 lines (127 loc) 3.91 kB
import _ from 'lodash'; import ClassNames from 'classnames'; import PropTypes from 'prop-types'; import React from 'react'; import Icon from '../../dataDisplay/icon'; import Input from '../../inputs/input'; const propTypes = { autoFocus: PropTypes.bool, id: PropTypes.string, isMobileSearch: PropTypes.bool, isMobileSearchVisible: PropTypes.bool, onChange: PropTypes.func.isRequired, onClearClick: PropTypes.func, onFocus: PropTypes.func, onKeyDown: PropTypes.func, placeholder: PropTypes.string, style: PropTypes.shape({}), // eslint-disable-line react/forbid-prop-types value: PropTypes.string, }; const defaultProps = { autoFocus: false, id: undefined, isMobileSearch: false, isMobileSearchVisible: false, onClearClick: undefined, onFocus: undefined, onKeyDown: undefined, placeholder: 'Search', style: {}, value: '', }; class ActionBarSearch extends React.PureComponent { constructor() { super(); this.onChange = this.onChange.bind(this); this.onClearClick = this.onClearClick.bind(this); this.onClearKeyDown = this.onClearKeyDown.bind(this); this.onKeyDown = this.onKeyDown.bind(this); } onChange(value) { const { onChange } = this.props; onChange(value); } onClearClick() { const { onChange, onClearClick } = this.props; if (_.isFunction(onClearClick)) { onClearClick(); } else { onChange(''); } } onClearKeyDown(event) { if (event.keyCode === 13) { this.onClearClick(); } } onKeyDown(event) { const { onKeyDown } = this.props; if (_.isFunction(onKeyDown)) { onKeyDown(event); } } render() { const { autoFocus, id, isMobileSearch, isMobileSearchVisible, onFocus, placeholder, style, value, } = this.props; const inputContainerClasses = ClassNames('action_bar--search', { 'action_bar--search-mobile': isMobileSearch, 'action_bar--search-mobile-show': isMobileSearch && isMobileSearchVisible, }); let magnificationIcon = null; if (onFocus) { onFocus(isMobileSearchVisible); } if (!isMobileSearch) { magnificationIcon = ( <Icon compact title="Search" type="search" /> ); } return ( <div className={inputContainerClasses} > <Input autoFocus={autoFocus} className="action_bar--search_input" fluid icon={value ? ( <div className="action_bar--clear_search" onClick={this.onClearClick} onKeyDown={this.onClearKeyDown} role="button" tabIndex={0} > <Icon compact title="Clear Search" type="times-circle" /> </div> ) : magnificationIcon} id={id} onChange={this.onChange} onKeyDown={this.onKeyDown} placeholder={placeholder} value={value} style={style} /> </div> ); } } ActionBarSearch.propTypes = propTypes; ActionBarSearch.defaultProps = defaultProps; export default ActionBarSearch;