UNPKG

react-emma-signup-form

Version:

Create signup forms that post to Emma without using the API.

223 lines (170 loc) 7.8 kB
'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'];