UNPKG

react-zapier-form

Version:

A React component for creating forms that post to Zapier's API. It posts directly to a [catch hook](https://zapier.com/apps/webhook/integrations), so you don't have to use another third party service to collect data from forms on your website.

245 lines (191 loc) 5.88 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 ZapierForm = function (_React$Component) { (0, _inherits3.default)(ZapierForm, _React$Component); function ZapierForm(props) { (0, _classCallCheck3.default)(this, ZapierForm); var _this = (0, _possibleConstructorReturn3.default)(this, (ZapierForm.__proto__ || Object.getPrototypeOf(ZapierForm)).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)(ZapierForm, [{ key: 'onSubmit', value: function () { var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(e) { var data, notValid, res, body; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: e.preventDefault(); if (!(!this.props.canSubmit || this.honeypot.value)) { _context.next = 3; break; } return _context.abrupt('return'); case 3: this.setState({ loading: true, error: false, success: false }); data = new FormData(this.form); _context.next = 7; return this.props.validate(data); case 7: notValid = _context.sent; if (!notValid) { _context.next = 10; break; } return _context.abrupt('return', this.setState({ loading: false, error: false, success: false })); case 10: this.props.onSubmit(data); res = void 0; body = void 0; _context.prev = 13; _context.next = 16; return (0, _isomorphicFetch2.default)(this.props.action, { method: 'post', body: data }); case 16: res = _context.sent; _context.next = 22; break; case 19: _context.prev = 19; _context.t0 = _context['catch'](13); return _context.abrupt('return', this.onError('Connection error')); case 22: if (!(res.status !== 200)) { _context.next = 24; break; } return _context.abrupt('return', this.onError('Error code ' + res.statusText)); case 24: _context.prev = 24; _context.next = 27; return res.json(); case 27: body = _context.sent; _context.next = 33; break; case 30: _context.prev = 30; _context.t1 = _context['catch'](24); return _context.abrupt('return', this.onError('Error parsing JSON')); case 33: if (!(body.status !== 'success')) { _context.next = 35; break; } return _context.abrupt('return', this.onError(body)); case 35: this.onSuccess(res); case 36: case 'end': return _context.stop(); } } }, _callee, this, [[13, 19], [24, 30]]); })); 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 }, this.formProps), _react2.default.createElement( 'div', { style: { display: 'none' } }, _react2.default.createElement('input', { type: 'text', name: this.props.honeyPotName, ref: function ref(honeypot) { return _this2.honeypot = honeypot; } }) ), this.props.children(this.state) ); } }]); return ZapierForm; }(_react2.default.Component); ZapierForm.defaultProps = { canSubmit: true, honeyPotName: 'p_number', onSubmit: _noop2.default, onSuccess: _noop2.default, onError: _noop2.default, validate: _noop2.default }; exports.default = ZapierForm; //# sourceMappingURL=index.js.map