1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
8 |
|
9 | var _serializeForm = require('@f/serialize-form');
|
10 |
|
11 | var _serializeForm2 = _interopRequireDefault(_serializeForm);
|
12 |
|
13 | var _identity = require('@f/identity');
|
14 |
|
15 | var _identity2 = _interopRequireDefault(_identity);
|
16 |
|
17 | var _element = require('vdux/element');
|
18 |
|
19 | var _element2 = _interopRequireDefault(_element);
|
20 |
|
21 | var _vduxUi = require('vdux-ui');
|
22 |
|
23 | var _noop = require('@f/noop');
|
24 |
|
25 | var _noop2 = _interopRequireDefault(_noop);
|
26 |
|
27 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
28 |
|
29 | function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } |
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 |
|
37 | var defaultValidate = function defaultValidate() {
|
38 | return { valid: true };
|
39 | };
|
40 | var defaultTransformError = _identity2.default;
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 | function render(_ref) {
|
47 | var _marked = [handleSubmit].map(regeneratorRuntime.mark);
|
48 |
|
49 | var props = _ref.props;
|
50 | var children = _ref.children;
|
51 | var _props$onSubmit = props.onSubmit;
|
52 | var onSubmit = _props$onSubmit === undefined ? _noop2.default : _props$onSubmit;
|
53 | var _props$onSuccess = props.onSuccess;
|
54 | var onSuccess = _props$onSuccess === undefined ? _noop2.default : _props$onSuccess;
|
55 | var _props$onFailure = props.onFailure;
|
56 | var onFailure = _props$onFailure === undefined ? _noop2.default : _props$onFailure;
|
57 | var _props$validate = props.validate;
|
58 | var validate = _props$validate === undefined ? defaultValidate : _props$validate;
|
59 | var _props$cast = props.cast;
|
60 | var cast = _props$cast === undefined ? _identity2.default : _props$cast;
|
61 | var _props$transformError = props.transformError;
|
62 | var transformError = _props$transformError === undefined ? defaultTransformError : _props$transformError;
|
63 | var _props$loading = props.loading;
|
64 | var loading = _props$loading === undefined ? false : _props$loading;
|
65 |
|
66 | var rest = _objectWithoutProperties(props, ['onSubmit', 'onSuccess', 'onFailure', 'validate', 'cast', 'transformError', 'loading']);
|
67 |
|
68 | return (0, _element2.default)(
|
69 | _vduxUi.Base,
|
70 | _extends({ tag: 'form', novalidate: true, onSubmit: handleSubmit, onChange: handleChange }, rest),
|
71 | children
|
72 | );
|
73 |
|
74 | function handleSubmit(e) {
|
75 | var form, model, valid, result, newErr;
|
76 | return regeneratorRuntime.wrap(function handleSubmit$(_context) {
|
77 | while (1) {
|
78 | switch (_context.prev = _context.next) {
|
79 | case 0:
|
80 | e.preventDefault();
|
81 |
|
82 | form = e.target;
|
83 | model = cast((0, _serializeForm2.default)(form));
|
84 | valid = checkValidity(form, model);
|
85 |
|
86 | if (!(!loading && valid)) {
|
87 | _context.next = 19;
|
88 | break;
|
89 | }
|
90 |
|
91 | _context.prev = 5;
|
92 | _context.next = 8;
|
93 | return onSubmit(model);
|
94 |
|
95 | case 8:
|
96 | result = _context.sent;
|
97 | _context.next = 11;
|
98 | return onSuccess(result);
|
99 |
|
100 | case 11:
|
101 | _context.next = 19;
|
102 | break;
|
103 |
|
104 | case 13:
|
105 | _context.prev = 13;
|
106 | _context.t0 = _context['catch'](5);
|
107 | _context.next = 17;
|
108 | return onFailure(_context.t0);
|
109 |
|
110 | case 17:
|
111 | newErr = transformError(_context.t0);
|
112 |
|
113 | if (newErr) invalidate(form, newErr);
|
114 |
|
115 | case 19:
|
116 | case 'end':
|
117 | return _context.stop();
|
118 | }
|
119 | }
|
120 | }, _marked[0], this, [[5, 13]]);
|
121 | }
|
122 |
|
123 | function handleChange(e) {
|
124 | var _e$target = e.target;
|
125 | var name = _e$target.name;
|
126 | var form = _e$target.form;
|
127 |
|
128 | checkValidity(form, cast((0, _serializeForm2.default)(form)), name);
|
129 | }
|
130 |
|
131 | function checkValidity(form, model, name) {
|
132 | var _validate = validate(model, name);
|
133 |
|
134 | var valid = _validate.valid;
|
135 | var errors = _validate.errors;
|
136 |
|
137 |
|
138 | if (!valid) {
|
139 | invalidate(form, errors, name);
|
140 | }
|
141 |
|
142 | return valid;
|
143 | }
|
144 |
|
145 | function invalidate(form, errors, name) {
|
146 | if (name) {
|
147 | errors = errors.filter(function (_ref2) {
|
148 | var field = _ref2.field;
|
149 | return field === name;
|
150 | });
|
151 | }
|
152 |
|
153 | errors.forEach(function (_ref3) {
|
154 | var field = _ref3.field;
|
155 | var message = _ref3.message;
|
156 |
|
157 | var ctrl = form.querySelector('[name="' + field + '"]');
|
158 |
|
159 | if (ctrl) {
|
160 | ctrl.setCustomValidity(message);
|
161 | ctrl.checkValidity();
|
162 | }
|
163 | });
|
164 | }
|
165 | }
|
166 |
|
167 | function setTransformError(transformError) {
|
168 | defaultTransformError = transformError;
|
169 | }
|
170 |
|
171 |
|
172 |
|
173 |
|
174 |
|
175 | exports.default = {
|
176 | render: render,
|
177 | setTransformError: setTransformError
|
178 | }; |
\ | No newline at end of file |