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 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 | function render(_ref) {
|
46 | var props = _ref.props;
|
47 | var children = _ref.children;
|
48 | var _props$onSubmit = props.onSubmit;
|
49 | var onSubmit = _props$onSubmit === undefined ? _noop2.default : _props$onSubmit;
|
50 | var _props$validate = props.validate;
|
51 | var validate = _props$validate === undefined ? defaultValidate : _props$validate;
|
52 | var _props$cast = props.cast;
|
53 | var cast = _props$cast === undefined ? _identity2.default : _props$cast;
|
54 | var _props$loading = props.loading;
|
55 | var loading = _props$loading === undefined ? false : _props$loading;
|
56 |
|
57 | var rest = _objectWithoutProperties(props, ['onSubmit', 'validate', 'cast', 'loading']);
|
58 |
|
59 | return (0, _element2.default)(
|
60 | _vduxUi.Base,
|
61 | _extends({ tag: 'form', novalidate: true, onSubmit: handleSubmit, onChange: handleChange }, rest),
|
62 | children
|
63 | );
|
64 |
|
65 | function handleSubmit(e) {
|
66 | e.preventDefault();
|
67 |
|
68 | var form = e.target;
|
69 | var model = cast((0, _serializeForm2.default)(form));
|
70 | var valid = checkValidity(form, model);
|
71 |
|
72 | if (!loading && valid) {
|
73 | return onSubmit(model, function (res, err) {
|
74 | return err && invalidate(form, err);
|
75 | });
|
76 | }
|
77 | }
|
78 |
|
79 | function handleChange(e) {
|
80 | var _e$target = e.target;
|
81 | var name = _e$target.name;
|
82 | var form = _e$target.form;
|
83 |
|
84 | checkValidity(form, cast((0, _serializeForm2.default)(form)), name);
|
85 | }
|
86 |
|
87 | function checkValidity(form, model, name) {
|
88 | var _validate = validate(model, name);
|
89 |
|
90 | var valid = _validate.valid;
|
91 | var errors = _validate.errors;
|
92 |
|
93 |
|
94 | if (!valid) {
|
95 | invalidate(form, errors, name);
|
96 | }
|
97 |
|
98 | return valid;
|
99 | }
|
100 |
|
101 | function invalidate(form, errors, name) {
|
102 | if (name) {
|
103 | errors = errors.filter(function (_ref2) {
|
104 | var field = _ref2.field;
|
105 | return field === name;
|
106 | });
|
107 | }
|
108 |
|
109 | errors.forEach(function (_ref3) {
|
110 | var field = _ref3.field;
|
111 | var message = _ref3.message;
|
112 |
|
113 | var ctrl = form.querySelector('[name="' + field + '"]');
|
114 |
|
115 | if (ctrl) {
|
116 | ctrl.setCustomValidity(message);
|
117 | ctrl.checkValidity();
|
118 | }
|
119 | });
|
120 | }
|
121 | }
|
122 |
|
123 |
|
124 |
|
125 |
|
126 |
|
127 | exports.default = {
|
128 | render: render
|
129 | }; |
\ | No newline at end of file |