import Telescope, { Components, registerComponent } from 'meteor/nova:lib'; import React, { PropTypes, Component } from 'react'; import { FormattedMessage } from 'react-intl'; import { Button } from 'react-bootstrap'; import { withMutation, withCurrentUser } from 'meteor/nova:core'; import { bindActionCreators } from 'redux'; import { connect } from 'react-redux'; class NewsletterButton extends Component { constructor(props) { super(props); this.subscriptionAction = this.subscriptionAction.bind(this); const isSubscribed = props.currentUser.__newsletter_subscribeToNewsletter; this.state = { labelId: isSubscribed ? 'newsletter.unsubscribe' : 'newsletter.subscribe', action: isSubscribed ? 'removeUserNewsletter' : 'addUserNewsletter' }; } subscriptionAction() { const action = this.state.action; this.props[action]({userId: this.props.currentUser._id}).then(result => { console.log(result) this.props.successCallback(result); if (result.data[action].action === 'subscribed') { this.setState({ labelId: 'newsletter.unsubscribe', action: 'removeUserNewsletter', }); } else { this.setState({ labelId: 'newsletter.subscribe', action: 'addUserNewsletter', }); } }).catch(error => { console.log(error); this.props.flash(error.message, "error"); }); } render() { return ( ) } } NewsletterButton.propTypes = { successCallback: React.PropTypes.func.isRequired, user: React.PropTypes.object.isRequired, }; NewsletterButton.contextTypes = { actions: React.PropTypes.object, }; const mapStateToProps = state => ({ messages: state.messages }); const mapDispatchToProps = dispatch => bindActionCreators(Telescope.actions.messages, dispatch); const addOptions = {name: 'addUserNewsletter', args: {userId: 'String'}}; const removeOptions = {name: 'removeUserNewsletter', args: {userId: 'String'}}; registerComponent('NewsletterButton', NewsletterButton, withCurrentUser, withMutation(addOptions), withMutation(removeOptions), connect(mapStateToProps, mapDispatchToProps));