Vulcan/packages/vulcan-newsletter/lib/components/NewsletterSubscribe.jsx

65 lines
2 KiB
React
Raw Normal View History

2018-04-28 12:22:41 +09:00
import { Components, registerComponent, withMutation, withMessages } from 'meteor/vulcan:core';
2017-05-19 14:42:43 -06:00
import React, { PureComponent } from 'react';
import PropTypes from 'prop-types';
2018-04-28 12:22:41 +09:00
import { FormattedMessage, intlShape } from 'meteor/vulcan:i18n';
// this component is used as a custom controller in user's account edit (cf. ./custom_fields.js)
2017-05-19 14:42:43 -06:00
class NewsletterSubscribe extends PureComponent {
2018-04-28 12:22:41 +09:00
// check if fields is true or falsy (no value = not subscribed)
isSubscribed = () => {
return !!this.props.value;
}
2018-04-28 12:22:41 +09:00
subscribeUnsubscribe = async () => {
2018-04-28 12:22:41 +09:00
const { path, updateCurrentValues, throwError } = this.props;
2018-04-28 12:22:41 +09:00
const user = this.props.document;
const mutationName = this.isSubscribed() ? 'removeUserNewsletter' : 'addUserNewsletter';
const mutation = this.props[mutationName];
try {
2018-04-28 12:22:41 +09:00
const mutationResult = await mutation({userId: user._id});
updateCurrentValues({ [path]: !this.isSubscribed() });
// display a nice message to the client
2017-05-19 14:42:43 -06:00
this.props.flash(this.context.intl.formatMessage({ id: 'newsletter.subscription_updated' }), 'success');
2018-04-28 12:22:41 +09:00
console.log(mutationResult)
} catch(error) {
throwError(error);
}
}
render() {
2018-04-28 12:22:41 +09:00
return (
<div className="form-group row">
<label className="control-label col-sm-3"></label>
2018-04-28 12:22:41 +09:00
<div className="col-sm-9">
<Components.Button
className="newsletter-button"
onClick={this.subscribeUnsubscribe}
variant="primary"
>
<FormattedMessage id={this.isSubscribed() ? 'newsletter.unsubscribe' : 'newsletter.subscribe'}/>
</Components.Button>
</div>
</div>
)
}
}
NewsletterSubscribe.contextTypes = {
intl: intlShape
};
2018-04-28 12:22:41 +09:00
const addOptions = {name: 'addUserNewsletter', args: {userId: 'String'}};
const removeOptions = {name: 'removeUserNewsletter', args: {userId: 'String'}};
registerComponent('NewsletterSubscribe', NewsletterSubscribe, withMutation(addOptions), withMutation(removeOptions), withMessages);