1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _regenerator = require('babel-runtime/regenerator');
|
8 |
|
9 | var _regenerator2 = _interopRequireDefault(_regenerator);
|
10 |
|
11 | var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
|
12 |
|
13 | var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
|
14 |
|
15 | var _extends2 = require('babel-runtime/helpers/extends');
|
16 |
|
17 | var _extends3 = _interopRequireDefault(_extends2);
|
18 |
|
19 | var _vdux = require('vdux');
|
20 |
|
21 | var _serializeForm = require('@f/serialize-form');
|
22 |
|
23 | var _serializeForm2 = _interopRequireDefault(_serializeForm);
|
24 |
|
25 | var _identity = require('@f/identity');
|
26 |
|
27 | var _identity2 = _interopRequireDefault(_identity);
|
28 |
|
29 | var _vduxUi = require('vdux-ui');
|
30 |
|
31 | var _noop = require('@f/noop');
|
32 |
|
33 | var _noop2 = _interopRequireDefault(_noop);
|
34 |
|
35 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
36 |
|
37 | var _marked = [poss].map(_regenerator2.default.mark);
|
38 |
|
39 | var defaultValidate = function defaultValidate() {
|
40 | return { valid: true };
|
41 | };
|
42 | var defaultTransformError = _identity2.default;
|
43 |
|
44 | exports.default = (0, _vdux.component)({
|
45 | render: function render(_ref) {
|
46 | var props = _ref.props;
|
47 | var children = _ref.children;
|
48 | var actions = _ref.actions;
|
49 |
|
50 |
|
51 | return (0, _vdux.element)(
|
52 | _vduxUi.Base,
|
53 | (0, _extends3.default)({ tag: 'form', novalidate: true }, props, { onSubmit: [(0, _vdux.decodeNode)(actions.handleSubmit), _vdux.preventDefault, _vdux.stopPropagation], onChange: (0, _vdux.decodeNode)(actions.handleChange) }),
|
54 | children
|
55 | );
|
56 | },
|
57 |
|
58 |
|
59 | controller: {
|
60 | handleChange: function handleChange(_ref2, _ref3) {
|
61 | var props = _ref2.props;
|
62 | var name = _ref3.name;
|
63 | var form = _ref3.form;
|
64 | var _props$cast = props.cast;
|
65 | var cast = _props$cast === undefined ? _identity2.default : _props$cast;
|
66 | var _props$validate = props.validate;
|
67 | var validate = _props$validate === undefined ? defaultValidate : _props$validate;
|
68 |
|
69 | var model = cast((0, _serializeForm2.default)(form));
|
70 |
|
71 | var _validate = validate(model, name);
|
72 |
|
73 | var valid = _validate.valid;
|
74 | var errors = _validate.errors;
|
75 |
|
76 |
|
77 | if (!valid) invalidate(form, errors, name);
|
78 | },
|
79 | handleSubmit: _regenerator2.default.mark(function handleSubmit(_ref4, form) {
|
80 | var props = _ref4.props;
|
81 |
|
82 | var _props$onSubmit, onSubmit, _props$onSuccess, onSuccess, _props$onFailure, onFailure, _props$validate2, validate, _props$cast2, cast, _props$transformError, transformError, _props$loading, loading, model, _validate2, valid, errors, _ref5, _ref6, result, err, newErr;
|
83 |
|
84 | return _regenerator2.default.wrap(function handleSubmit$(_context) {
|
85 | while (1) {
|
86 | switch (_context.prev = _context.next) {
|
87 | case 0:
|
88 | _props$onSubmit = props.onSubmit;
|
89 | onSubmit = _props$onSubmit === undefined ? _noop2.default : _props$onSubmit;
|
90 | _props$onSuccess = props.onSuccess;
|
91 | onSuccess = _props$onSuccess === undefined ? _noop2.default : _props$onSuccess;
|
92 | _props$onFailure = props.onFailure;
|
93 | onFailure = _props$onFailure === undefined ? _noop2.default : _props$onFailure;
|
94 | _props$validate2 = props.validate;
|
95 | validate = _props$validate2 === undefined ? defaultValidate : _props$validate2;
|
96 | _props$cast2 = props.cast;
|
97 | cast = _props$cast2 === undefined ? _identity2.default : _props$cast2;
|
98 | _props$transformError = props.transformError;
|
99 | transformError = _props$transformError === undefined ? defaultTransformError : _props$transformError;
|
100 | _props$loading = props.loading;
|
101 | loading = _props$loading === undefined ? false : _props$loading;
|
102 | model = cast((0, _serializeForm2.default)(form));
|
103 | _validate2 = validate(model);
|
104 | valid = _validate2.valid;
|
105 | errors = _validate2.errors;
|
106 |
|
107 |
|
108 | if (!valid) invalidate(form, errors);
|
109 |
|
110 | if (!(!loading && valid)) {
|
111 | _context.next = 35;
|
112 | break;
|
113 | }
|
114 |
|
115 | _context.next = 22;
|
116 | return poss(onSubmit(model));
|
117 |
|
118 | case 22:
|
119 | _ref5 = _context.sent;
|
120 | _ref6 = (0, _slicedToArray3.default)(_ref5, 2);
|
121 | result = _ref6[0];
|
122 | err = _ref6[1];
|
123 |
|
124 | if (!err) {
|
125 | _context.next = 33;
|
126 | break;
|
127 | }
|
128 |
|
129 | _context.next = 29;
|
130 | return onFailure(err);
|
131 |
|
132 | case 29:
|
133 | newErr = transformError(err);
|
134 |
|
135 | if (newErr) invalidate(form, newErr);
|
136 | _context.next = 35;
|
137 | break;
|
138 |
|
139 | case 33:
|
140 | _context.next = 35;
|
141 | return onSuccess(result);
|
142 |
|
143 | case 35:
|
144 | case 'end':
|
145 | return _context.stop();
|
146 | }
|
147 | }
|
148 | }, handleSubmit, this);
|
149 | })
|
150 | },
|
151 |
|
152 | setTransformError: function setTransformError(transformError) {
|
153 | defaultTransformError = transformError;
|
154 | }
|
155 | });
|
156 |
|
157 |
|
158 | function dotsToBrackets(str) {
|
159 | return str.split('.').map(function (part, idx) {
|
160 | return idx === 0 ? part : '[' + part + ']';
|
161 | }).join('');
|
162 | }
|
163 |
|
164 | function poss(gen) {
|
165 | return _regenerator2.default.wrap(function poss$(_context2) {
|
166 | while (1) {
|
167 | switch (_context2.prev = _context2.next) {
|
168 | case 0:
|
169 | _context2.prev = 0;
|
170 | _context2.next = 3;
|
171 | return gen;
|
172 |
|
173 | case 3:
|
174 | _context2.t0 = _context2.sent;
|
175 | return _context2.abrupt('return', [_context2.t0, null]);
|
176 |
|
177 | case 7:
|
178 | _context2.prev = 7;
|
179 | _context2.t1 = _context2['catch'](0);
|
180 | return _context2.abrupt('return', [null, _context2.t1]);
|
181 |
|
182 | case 10:
|
183 | case 'end':
|
184 | return _context2.stop();
|
185 | }
|
186 | }
|
187 | }, _marked[0], this, [[0, 7]]);
|
188 | }
|
189 |
|
190 | function invalidate(form, errors, name) {
|
191 | if (name) {
|
192 | errors = errors.filter(function (_ref7) {
|
193 | var field = _ref7.field;
|
194 | return field === name;
|
195 | });
|
196 | }
|
197 |
|
198 | errors.forEach(function (_ref8) {
|
199 | var field = _ref8.field;
|
200 | var message = _ref8.message;
|
201 |
|
202 | var ctrl = form.querySelector('[name="' + dotsToBrackets(field) + '"]');
|
203 |
|
204 | if (ctrl) {
|
205 | ctrl.setCustomValidity(message);
|
206 | ctrl.checkValidity();
|
207 | }
|
208 | });
|
209 | } |
\ | No newline at end of file |