mastodon/app/javascript/mastodon/features/compose/components/search.js

77 lines
1.9 KiB
JavaScript
Raw Normal View History

import React from 'react';
import PropTypes from 'prop-types';
2017-06-23 16:05:04 +02:00
import { defineMessages, injectIntl } from 'react-intl';
2016-11-18 15:36:16 +01:00
const messages = defineMessages({
placeholder: { id: 'search.placeholder', defaultMessage: 'Search' },
2016-11-18 15:36:16 +01:00
});
2016-11-13 13:04:18 +01:00
@injectIntl
export default class Search extends React.PureComponent {
2016-11-13 13:04:18 +01:00
static propTypes = {
value: PropTypes.string.isRequired,
submitted: PropTypes.bool,
onChange: PropTypes.func.isRequired,
onSubmit: PropTypes.func.isRequired,
onClear: PropTypes.func.isRequired,
onShow: PropTypes.func.isRequired,
intl: PropTypes.object.isRequired,
};
handleChange = (e) => {
2017-03-31 19:59:54 +02:00
this.props.onChange(e.target.value);
}
2016-11-13 13:04:18 +01:00
handleClear = (e) => {
2017-03-31 19:59:54 +02:00
e.preventDefault();
if (this.props.value.length > 0 || this.props.submitted) {
this.props.onClear();
}
}
2016-11-13 13:04:18 +01:00
handleKeyDown = (e) => {
2017-03-31 19:59:54 +02:00
if (e.key === 'Enter') {
e.preventDefault();
this.props.onSubmit();
}
}
2016-11-13 13:04:18 +01:00
noop () {
}
handleFocus = () => {
2017-03-31 19:59:54 +02:00
this.props.onShow();
}
2016-11-13 13:04:18 +01:00
render () {
2017-03-31 22:44:12 +02:00
const { intl, value, submitted } = this.props;
const hasValue = value.length > 0 || submitted;
2016-11-13 13:04:18 +01:00
return (
2017-03-31 19:59:54 +02:00
<div className='search'>
<label>
<span style={{ display: 'none' }}>{intl.formatMessage(messages.placeholder)}</span>
<input
className='search__input'
type='text'
placeholder={intl.formatMessage(messages.placeholder)}
value={value}
onChange={this.handleChange}
onKeyUp={this.handleKeyDown}
onFocus={this.handleFocus}
/>
</label>
2016-11-13 13:04:18 +01:00
<div role='button' tabIndex='0' className='search__icon' onClick={this.handleClear}>
2017-03-31 19:59:54 +02:00
<i className={`fa fa-search ${hasValue ? '' : 'active'}`} />
<i aria-label={intl.formatMessage(messages.placeholder)} className={`fa fa-times-circle ${hasValue ? 'active' : ''}`} />
2017-03-31 19:59:54 +02:00
</div>
2016-11-13 13:04:18 +01:00
</div>
);
2017-03-31 19:59:54 +02:00
}
2016-11-13 13:04:18 +01:00
}