react-emma-signup-form
Version:
Create signup forms that post to Emma without using the API.
223 lines (170 loc) • 7.8 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
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 _isomorphicFetch = require('isomorphic-fetch');
var _isomorphicFetch2 = _interopRequireDefault(_isomorphicFetch);
var _noop = require('./noop');
var _noop2 = _interopRequireDefault(_noop);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var EmmaSignupForm = function (_React$Component) {
(0, _inherits3.default)(EmmaSignupForm, _React$Component);
function EmmaSignupForm(props) {
(0, _classCallCheck3.default)(this, EmmaSignupForm);
var _this = (0, _possibleConstructorReturn3.default)(this, (EmmaSignupForm.__proto__ || Object.getPrototypeOf(EmmaSignupForm)).call(this, props));
_this.state = {
error: false,
loading: false,
success: false
};
_this.onSubmit = _this.onSubmit.bind(_this);
_this.onSuccess = _this.onSuccess.bind(_this);
_this.onError = _this.onError.bind(_this);
return _this;
}
(0, _createClass3.default)(EmmaSignupForm, [{
key: 'onSubmit',
value: function () {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(e) {
var data, res, body;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
e.preventDefault();
this.setState({
loading: true,
error: false,
success: false
});
data = new FormData(this.form);
this.props.onSubmit(data);
res = void 0, body = void 0;
_context.prev = 5;
_context.next = 8;
return (0, _isomorphicFetch2.default)(this.props.action, {
method: 'post',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Access-Control-Allow-Headers': 'Access-Control-Allow-Origin',
'Access-Control-Allow-Origin': '*'
},
body: data
});
case 8:
res = _context.sent;
_context.next = 14;
break;
case 11:
_context.prev = 11;
_context.t0 = _context['catch'](5);
return _context.abrupt('return', this.onError('Connection error'));
case 14:
if (!(res.status !== 200)) {
_context.next = 16;
break;
}
return _context.abrupt('return', this.onError('Error: ' + res.statusText));
case 16:
_context.prev = 16;
_context.next = 19;
return res.json();
case 19:
body = _context.sent;
_context.next = 25;
break;
case 22:
_context.prev = 22;
_context.t1 = _context['catch'](16);
return _context.abrupt('return', this.onError('Error parsing JSON'));
case 25:
if (!(body.status !== 'success')) {
_context.next = 27;
break;
}
return _context.abrupt('return', this.onError(body));
case 27:
this.onSuccess(res);
case 28:
case 'end':
return _context.stop();
}
}
}, _callee, this, [[5, 11], [16, 22]]);
}));
function onSubmit(_x) {
return _ref.apply(this, arguments);
}
return onSubmit;
}()
}, {
key: 'onSuccess',
value: function onSuccess(body) {
this.props.onSuccess(body);
this.setState({
loading: false,
success: body,
error: false
});
}
}, {
key: 'onError',
value: function onError(err) {
console.error(err);
this.props.onError(err);
return this.setState({
loading: false,
error: err,
success: false
});
}
}, {
key: 'render',
value: function render() {
var _this2 = this;
return _react2.default.createElement(
'form',
(0, _extends3.default)({
ref: function ref(form) {
return _this2.form = form;
},
onSubmit: this.onSubmit,
method: 'post'
}, this.props),
_react2.default.createElement(
'div',
{ style: { display: 'none' } },
this.props.groups && this.props.groups.map(function (group, key) {
return _react2.default.createElement('input', { id: 'id_group_' + group, name: 'group_' + group, type: 'hidden', value: group });
}),
_react2.default.createElement('input', { name: 'r', type: 'hidden', value: 'signup' })
),
this.props.children(this.state)
);
}
}]);
return EmmaSignupForm;
}(_react2.default.Component);
EmmaSignupForm.defaultProps = {
onSubmit: _noop2.default,
onSuccess: _noop2.default,
onError: _noop2.default
};
exports.default = EmmaSignupForm;
module.exports = exports['default'];