npm-smooch-test
Version:
*Smooch adds beautifully simple messaging to your app to keep your users engaged and coming back.*
209 lines (166 loc) • 7.12 kB
JavaScript
'use strict';
exports.__esModule = true;
exports.ActionComponent = undefined;
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactStripeCheckout = require('react-stripe-checkout');
var _reactStripeCheckout2 = _interopRequireDefault(_reactStripeCheckout);
var _appStore = require('../stores/app-store');
var _stripeService = require('../services/stripe-service');
var _userService = require('../services/user-service');
var _conversationService = require('../services/conversation-service');
var _loading = require('./loading');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var ActionComponent = exports.ActionComponent = function (_Component) {
(0, _inherits3.default)(ActionComponent, _Component);
function ActionComponent() {
(0, _classCallCheck3.default)(this, ActionComponent);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var _this = (0, _possibleConstructorReturn3.default)(this, _Component.call.apply(_Component, [this].concat(args)));
_this.onPostbackClick = function () {
_this.setState({
state: 'processing'
});
(0, _conversationService.postPostback)(_this.props._id).then(function () {
_this.setState({
state: ''
});
}).catch(function () {
_this.setState({
state: ''
});
});
};
_this.state = {
state: _this.props.state,
hasToken: false
};
return _this;
}
ActionComponent.prototype.onStripeToken = function onStripeToken(token) {
var _this2 = this;
this.setState({
hasToken: true
});
var user = _appStore.store.getState().user;
var promises = [];
if (!user.email) {
promises.push((0, _userService.immediateUpdate)({
email: token.email
}));
}
var transactionPromise = (0, _stripeService.createTransaction)(this.props._id, token.id).then(function () {
_this2.setState({
state: 'paid'
});
}).catch(function () {
_this2.setState({
state: 'offered'
});
});
promises.push(transactionPromise);
return _promise2.default.all(promises);
};
ActionComponent.prototype.onStripeClick = function onStripeClick() {
this.setState({
state: 'processing'
});
};
ActionComponent.prototype.onStripeClose = function onStripeClose() {
if (!this.state.hasToken) {
this.setState({
state: 'offered'
});
}
};
ActionComponent.prototype.render = function render() {
var publicKeys = _appStore.store.getState().app.publicKeys;
var style = {};
if (this.props.buttonColor) {
style.backgroundColor = style.borderColor = '#' + this.props.buttonColor;
}
// the public key is necessary to use with Checkout
// use the link fallback if this happens
if (this.props.type === 'buy' && publicKeys.stripe) {
var user = _appStore.store.getState().user;
// let's change this when we support other providers
var stripeAccount = _appStore.store.getState().app.stripe;
var actionState = this.state.state;
if (actionState === 'offered') {
return _react2.default.createElement(
_reactStripeCheckout2.default,
{ componentClass: 'div',
className: 'sk-action',
token: this.onStripeToken.bind(this),
stripeKey: publicKeys.stripe,
email: user.email,
amount: this.props.amount,
currency: this.props.currency.toUpperCase(),
name: stripeAccount.appName,
image: stripeAccount.iconUrl,
closed: this.onStripeClose.bind(this) },
_react2.default.createElement(
'button',
{ className: 'btn btn-sk-primary',
onClick: this.onStripeClick.bind(this),
style: style },
this.props.text
)
);
} else {
var text = actionState === 'paid' ? _appStore.store.getState().ui.text.actionPaymentCompleted : _react2.default.createElement(_loading.LoadingComponent, null);
if (actionState === 'paid') {
style = {};
}
return _react2.default.createElement(
'div',
{ className: 'sk-action' },
_react2.default.createElement(
'div',
{ className: 'btn btn-sk-action-' + actionState,
style: style },
text
)
);
}
} else if (this.props.type === 'postback') {
var _text = this.state.state === 'processing' ? _react2.default.createElement(_loading.LoadingComponent, null) : this.props.text;
return _react2.default.createElement(
'div',
{ className: 'sk-action' },
_react2.default.createElement(
'button',
{ className: 'btn btn-sk-primary',
style: style,
onClick: this.onPostbackClick },
_text
)
);
} else {
var isJavascript = this.props.uri.startsWith('javascript:');
return _react2.default.createElement(
'div',
{ className: 'sk-action' },
_react2.default.createElement(
'a',
{ className: 'btn btn-sk-primary',
href: this.props.uri,
target: isJavascript ? '_self' : '_blank',
style: style },
this.props.text
)
);
}
};
return ActionComponent;
}(_react.Component);