import PropTypes from 'prop-types'; import { PureComponent } from 'react'; import { defineMessages, injectIntl } from 'react-intl'; import classNames from 'classnames'; import { connect } from 'react-redux'; import CancelIcon from '@/material-icons/400-24px/cancel-fill.svg?react'; import SearchIcon from '@/material-icons/400-24px/search.svg?react'; import { Icon } from 'mastodon/components/icon'; import { fetchCircleSuggestions, clearCircleSuggestions, changeCircleSuggestions } from '../../../actions/circles'; const messages = defineMessages({ search: { id: 'circles.search', defaultMessage: 'Search among people follow you' }, }); const mapStateToProps = state => ({ value: state.getIn(['circleEditor', 'suggestions', 'value']), }); const mapDispatchToProps = dispatch => ({ onSubmit: value => dispatch(fetchCircleSuggestions(value)), onClear: () => dispatch(clearCircleSuggestions()), onChange: value => dispatch(changeCircleSuggestions(value)), }); class Search extends PureComponent { static propTypes = { intl: PropTypes.object.isRequired, value: PropTypes.string.isRequired, onChange: PropTypes.func.isRequired, onSubmit: PropTypes.func.isRequired, onClear: PropTypes.func.isRequired, }; handleChange = e => { this.props.onChange(e.target.value); }; handleKeyUp = e => { if (e.keyCode === 13) { this.props.onSubmit(this.props.value); } }; handleClear = () => { this.props.onClear(); }; render () { const { value, intl } = this.props; const hasValue = value.length > 0; return (
); } } export default connect(mapStateToProps, mapDispatchToProps)(injectIntl(Search));