import React from 'react' import PropTypes from 'prop-types' import { connect } from 'react-redux' import { defineMessages, injectIntl } from 'react-intl' import { addPoll, removePoll } from '../../../actions/compose' import ComposeExtraButton from './compose_extra_button' class PollButton extends React.PureComponent { handleClick = () => { this.props.onClick() } render() { const { intl, active, unavailable, disabled, small } = this.props if (unavailable) return null return ( <ComposeExtraButton title={intl.formatMessage(active ? messages.remove_poll : messages.title)} disabled={disabled} onClick={this.handleClick} icon='poll' small={small} active={active} /> ) } } const messages = defineMessages({ add_poll: { id: 'poll_button.add_poll', defaultMessage: 'Add poll' }, title: { id: 'poll_button.title', defaultMessage: 'Poll' }, remove_poll: { id: 'poll_button.remove_poll', defaultMessage: 'Remove poll' }, }) const mapStateToProps = (state) => ({ unavailable: state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size > 0), active: state.getIn(['compose', 'poll']) !== null, }) const mapDispatchToProps = (dispatch) => ({ onClick() { dispatch((_, getState) => { if (getState().getIn(['compose', 'poll'])) { dispatch(removePoll()) } else { dispatch(addPoll()) } }) }, }) PollButton.propTypes = { disabled: PropTypes.bool, unavailable: PropTypes.bool, active: PropTypes.bool, onClick: PropTypes.func.isRequired, intl: PropTypes.object.isRequired, small: PropTypes.bool, } export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(PollButton))