1 | "use strict";
|
2 |
|
3 | var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4 |
|
5 | exports.__esModule = true;
|
6 | exports["default"] = void 0;
|
7 |
|
8 | var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
9 |
|
10 | var _isFunction2 = _interopRequireDefault(require("lodash/isFunction"));
|
11 |
|
12 | var _actionTypes = require("./actionTypes");
|
13 |
|
14 | var _deleteInWithCleanUp = _interopRequireDefault(require("./deleteInWithCleanUp"));
|
15 |
|
16 | var _plain = _interopRequireDefault(require("./structure/plain"));
|
17 |
|
18 | var shouldDelete = function shouldDelete(_ref) {
|
19 | var getIn = _ref.getIn;
|
20 | return function (state, path) {
|
21 | var initialValuesPath = null;
|
22 |
|
23 | if (/^values/.test(path)) {
|
24 | initialValuesPath = path.replace('values', 'initial');
|
25 | }
|
26 |
|
27 | var initialValueComparison = initialValuesPath ? getIn(state, initialValuesPath) === undefined : true;
|
28 | return getIn(state, path) !== undefined && initialValueComparison;
|
29 | };
|
30 | };
|
31 |
|
32 | var isReduxFormAction = function isReduxFormAction(action) {
|
33 | return action && action.type && action.type.length > _actionTypes.prefix.length && action.type.substring(0, _actionTypes.prefix.length) === _actionTypes.prefix;
|
34 | };
|
35 |
|
36 | function createReducer(structure) {
|
37 | var _behaviors;
|
38 |
|
39 | var deepEqual = structure.deepEqual,
|
40 | empty = structure.empty,
|
41 | forEach = structure.forEach,
|
42 | getIn = structure.getIn,
|
43 | setIn = structure.setIn,
|
44 | deleteIn = structure.deleteIn,
|
45 | fromJS = structure.fromJS,
|
46 | keys = structure.keys,
|
47 | size = structure.size,
|
48 | some = structure.some,
|
49 | splice = structure.splice;
|
50 | var deleteInWithCleanUp = (0, _deleteInWithCleanUp["default"])(structure)(shouldDelete);
|
51 | var plainDeleteInWithCleanUp = (0, _deleteInWithCleanUp["default"])(_plain["default"])(shouldDelete);
|
52 |
|
53 | var doSplice = function doSplice(state, key, field, index, removeNum, value, force) {
|
54 | var existing = getIn(state, key + "." + field);
|
55 | return existing || force ? setIn(state, key + "." + field, splice(existing, index, removeNum, value)) : state;
|
56 | };
|
57 |
|
58 | var doPlainSplice = function doPlainSplice(state, key, field, index, removeNum, value, force) {
|
59 | var slice = getIn(state, key);
|
60 |
|
61 | var existing = _plain["default"].getIn(slice, field);
|
62 |
|
63 | return existing || force ? setIn(state, key, _plain["default"].setIn(slice, field, _plain["default"].splice(existing, index, removeNum, value))) : state;
|
64 | };
|
65 |
|
66 | var rootKeys = ['values', 'fields', 'submitErrors', 'asyncErrors'];
|
67 |
|
68 | var arraySplice = function arraySplice(state, field, index, removeNum, value) {
|
69 | var result = state;
|
70 | var nonValuesValue = value != null ? empty : undefined;
|
71 | result = doSplice(result, 'values', field, index, removeNum, value, true);
|
72 | result = doSplice(result, 'fields', field, index, removeNum, nonValuesValue);
|
73 | result = doPlainSplice(result, 'syncErrors', field, index, removeNum, undefined);
|
74 | result = doPlainSplice(result, 'syncWarnings', field, index, removeNum, undefined);
|
75 | result = doSplice(result, 'submitErrors', field, index, removeNum, undefined);
|
76 | result = doSplice(result, 'asyncErrors', field, index, removeNum, undefined);
|
77 | return result;
|
78 | };
|
79 |
|
80 | var behaviors = (_behaviors = {}, _behaviors[_actionTypes.ARRAY_INSERT] = function (state, _ref2) {
|
81 | var _ref2$meta = _ref2.meta,
|
82 | field = _ref2$meta.field,
|
83 | index = _ref2$meta.index,
|
84 | payload = _ref2.payload;
|
85 | return arraySplice(state, field, index, 0, payload);
|
86 | }, _behaviors[_actionTypes.ARRAY_MOVE] = function (state, _ref3) {
|
87 | var _ref3$meta = _ref3.meta,
|
88 | field = _ref3$meta.field,
|
89 | from = _ref3$meta.from,
|
90 | to = _ref3$meta.to;
|
91 | var array = getIn(state, "values." + field);
|
92 | var length = array ? size(array) : 0;
|
93 | var result = state;
|
94 |
|
95 | if (length) {
|
96 | rootKeys.forEach(function (key) {
|
97 | var path = key + "." + field;
|
98 |
|
99 | if (getIn(result, path)) {
|
100 | var value = getIn(result, path + "[" + from + "]");
|
101 | result = setIn(result, path, splice(getIn(result, path), from, 1));
|
102 |
|
103 | result = setIn(result, path, splice(getIn(result, path), to, 0, value));
|
104 | }
|
105 | });
|
106 | }
|
107 |
|
108 | return result;
|
109 | }, _behaviors[_actionTypes.ARRAY_POP] = function (state, _ref4) {
|
110 | var field = _ref4.meta.field;
|
111 | var array = getIn(state, "values." + field);
|
112 | var length = array ? size(array) : 0;
|
113 | return length ? arraySplice(state, field, length - 1, 1) : state;
|
114 | }, _behaviors[_actionTypes.ARRAY_PUSH] = function (state, _ref5) {
|
115 | var field = _ref5.meta.field,
|
116 | payload = _ref5.payload;
|
117 | var array = getIn(state, "values." + field);
|
118 | var length = array ? size(array) : 0;
|
119 | return arraySplice(state, field, length, 0, payload);
|
120 | }, _behaviors[_actionTypes.ARRAY_REMOVE] = function (state, _ref6) {
|
121 | var _ref6$meta = _ref6.meta,
|
122 | field = _ref6$meta.field,
|
123 | index = _ref6$meta.index;
|
124 | return arraySplice(state, field, index, 1);
|
125 | }, _behaviors[_actionTypes.ARRAY_REMOVE_ALL] = function (state, _ref7) {
|
126 | var field = _ref7.meta.field;
|
127 | var array = getIn(state, "values." + field);
|
128 | var length = array ? size(array) : 0;
|
129 | return length ? arraySplice(state, field, 0, length) : state;
|
130 | }, _behaviors[_actionTypes.ARRAY_SHIFT] = function (state, _ref8) {
|
131 | var field = _ref8.meta.field;
|
132 | return arraySplice(state, field, 0, 1);
|
133 | }, _behaviors[_actionTypes.ARRAY_SPLICE] = function (state, _ref9) {
|
134 | var _ref9$meta = _ref9.meta,
|
135 | field = _ref9$meta.field,
|
136 | index = _ref9$meta.index,
|
137 | removeNum = _ref9$meta.removeNum,
|
138 | payload = _ref9.payload;
|
139 | return arraySplice(state, field, index, removeNum, payload);
|
140 | }, _behaviors[_actionTypes.ARRAY_SWAP] = function (state, _ref10) {
|
141 | var _ref10$meta = _ref10.meta,
|
142 | field = _ref10$meta.field,
|
143 | indexA = _ref10$meta.indexA,
|
144 | indexB = _ref10$meta.indexB;
|
145 | var result = state;
|
146 | rootKeys.forEach(function (key) {
|
147 | var valueA = getIn(result, key + "." + field + "[" + indexA + "]");
|
148 | var valueB = getIn(result, key + "." + field + "[" + indexB + "]");
|
149 |
|
150 | if (valueA !== undefined || valueB !== undefined) {
|
151 | result = setIn(result, key + "." + field + "[" + indexA + "]", valueB);
|
152 | result = setIn(result, key + "." + field + "[" + indexB + "]", valueA);
|
153 | }
|
154 | });
|
155 | return result;
|
156 | }, _behaviors[_actionTypes.ARRAY_UNSHIFT] = function (state, _ref11) {
|
157 | var field = _ref11.meta.field,
|
158 | payload = _ref11.payload;
|
159 | return arraySplice(state, field, 0, 0, payload);
|
160 | }, _behaviors[_actionTypes.AUTOFILL] = function (state, _ref12) {
|
161 | var field = _ref12.meta.field,
|
162 | payload = _ref12.payload;
|
163 | var result = state;
|
164 | result = deleteInWithCleanUp(result, "asyncErrors." + field);
|
165 | result = deleteInWithCleanUp(result, "submitErrors." + field);
|
166 | result = setIn(result, "fields." + field + ".autofilled", true);
|
167 | result = setIn(result, "values." + field, payload);
|
168 | return result;
|
169 | }, _behaviors[_actionTypes.BLUR] = function (state, _ref13) {
|
170 | var _ref13$meta = _ref13.meta,
|
171 | field = _ref13$meta.field,
|
172 | touch = _ref13$meta.touch,
|
173 | payload = _ref13.payload;
|
174 | var result = state;
|
175 | var initial = getIn(result, "initial." + field);
|
176 |
|
177 | if (initial === undefined && payload === '') {
|
178 | result = deleteInWithCleanUp(result, "values." + field);
|
179 | } else if (payload !== undefined) {
|
180 | result = setIn(result, "values." + field, payload);
|
181 | }
|
182 |
|
183 | if (field === getIn(result, 'active')) {
|
184 | result = deleteIn(result, 'active');
|
185 | }
|
186 |
|
187 | result = deleteIn(result, "fields." + field + ".active");
|
188 |
|
189 | if (touch) {
|
190 | result = setIn(result, "fields." + field + ".touched", true);
|
191 | result = setIn(result, 'anyTouched', true);
|
192 | }
|
193 |
|
194 | return result;
|
195 | }, _behaviors[_actionTypes.CHANGE] = function (state, _ref14) {
|
196 | var _ref14$meta = _ref14.meta,
|
197 | field = _ref14$meta.field,
|
198 | touch = _ref14$meta.touch,
|
199 | persistentSubmitErrors = _ref14$meta.persistentSubmitErrors,
|
200 | payload = _ref14.payload;
|
201 | var result = state;
|
202 | var initial = getIn(result, "initial." + field);
|
203 |
|
204 | if (initial === undefined && payload === '' || payload === undefined) {
|
205 | result = deleteInWithCleanUp(result, "values." + field);
|
206 | } else if ((0, _isFunction2["default"])(payload)) {
|
207 | var fieldCurrentValue = getIn(state, "values." + field);
|
208 | result = setIn(result, "values." + field, payload(fieldCurrentValue, state.values));
|
209 | } else {
|
210 | result = setIn(result, "values." + field, payload);
|
211 | }
|
212 |
|
213 | result = deleteInWithCleanUp(result, "asyncErrors." + field);
|
214 |
|
215 | if (!persistentSubmitErrors) {
|
216 | result = deleteInWithCleanUp(result, "submitErrors." + field);
|
217 | }
|
218 |
|
219 | result = deleteInWithCleanUp(result, "fields." + field + ".autofilled");
|
220 |
|
221 | if (touch) {
|
222 | result = setIn(result, "fields." + field + ".touched", true);
|
223 | result = setIn(result, 'anyTouched', true);
|
224 | }
|
225 |
|
226 | return result;
|
227 | }, _behaviors[_actionTypes.CLEAR_SUBMIT] = function (state) {
|
228 | return deleteIn(state, 'triggerSubmit');
|
229 | }, _behaviors[_actionTypes.CLEAR_SUBMIT_ERRORS] = function (state) {
|
230 | var result = state;
|
231 | result = deleteInWithCleanUp(result, 'submitErrors');
|
232 | result = deleteIn(result, 'error');
|
233 | return result;
|
234 | }, _behaviors[_actionTypes.CLEAR_ASYNC_ERROR] = function (state, _ref15) {
|
235 | var field = _ref15.meta.field;
|
236 | return deleteIn(state, "asyncErrors." + field);
|
237 | }, _behaviors[_actionTypes.CLEAR_FIELDS] = function (state, _ref16) {
|
238 | var _ref16$meta = _ref16.meta,
|
239 | keepTouched = _ref16$meta.keepTouched,
|
240 | persistentSubmitErrors = _ref16$meta.persistentSubmitErrors,
|
241 | fields = _ref16$meta.fields;
|
242 | var result = state;
|
243 | fields.forEach(function (field) {
|
244 | result = deleteInWithCleanUp(result, "asyncErrors." + field);
|
245 |
|
246 | if (!persistentSubmitErrors) {
|
247 | result = deleteInWithCleanUp(result, "submitErrors." + field);
|
248 | }
|
249 |
|
250 | result = deleteInWithCleanUp(result, "fields." + field + ".autofilled");
|
251 |
|
252 | if (!keepTouched) {
|
253 | result = deleteIn(result, "fields." + field + ".touched");
|
254 | }
|
255 |
|
256 | var values = getIn(state, "initial." + field);
|
257 | result = values ? setIn(result, "values." + field, values) : deleteInWithCleanUp(result, "values." + field);
|
258 | });
|
259 | var anyTouched = some(keys(getIn(result, 'registeredFields')), function (key) {
|
260 | return getIn(result, "fields." + key + ".touched");
|
261 | });
|
262 | result = anyTouched ? setIn(result, 'anyTouched', true) : deleteIn(result, 'anyTouched');
|
263 | return result;
|
264 | }, _behaviors[_actionTypes.FOCUS] = function (state, _ref17) {
|
265 | var field = _ref17.meta.field;
|
266 | var result = state;
|
267 | var previouslyActive = getIn(state, 'active');
|
268 | result = deleteIn(result, "fields." + previouslyActive + ".active");
|
269 | result = setIn(result, "fields." + field + ".visited", true);
|
270 | result = setIn(result, "fields." + field + ".active", true);
|
271 | result = setIn(result, 'active', field);
|
272 | return result;
|
273 | }, _behaviors[_actionTypes.INITIALIZE] = function (state, _ref18) {
|
274 | var payload = _ref18.payload,
|
275 | _ref18$meta = _ref18.meta,
|
276 | keepDirty = _ref18$meta.keepDirty,
|
277 | keepSubmitSucceeded = _ref18$meta.keepSubmitSucceeded,
|
278 | updateUnregisteredFields = _ref18$meta.updateUnregisteredFields,
|
279 | keepValues = _ref18$meta.keepValues;
|
280 | var mapData = fromJS(payload);
|
281 | var result = empty;
|
282 |
|
283 |
|
284 | var warning = getIn(state, 'warning');
|
285 |
|
286 | if (warning) {
|
287 | result = setIn(result, 'warning', warning);
|
288 | }
|
289 |
|
290 | var syncWarnings = getIn(state, 'syncWarnings');
|
291 |
|
292 | if (syncWarnings) {
|
293 | result = setIn(result, 'syncWarnings', syncWarnings);
|
294 | }
|
295 |
|
296 |
|
297 | var error = getIn(state, 'error');
|
298 |
|
299 | if (error) {
|
300 | result = setIn(result, 'error', error);
|
301 | }
|
302 |
|
303 | var syncErrors = getIn(state, 'syncErrors');
|
304 |
|
305 | if (syncErrors) {
|
306 | result = setIn(result, 'syncErrors', syncErrors);
|
307 | }
|
308 |
|
309 | var registeredFields = getIn(state, 'registeredFields');
|
310 |
|
311 | if (registeredFields) {
|
312 | result = setIn(result, 'registeredFields', registeredFields);
|
313 | }
|
314 |
|
315 | var previousValues = getIn(state, 'values');
|
316 | var previousInitialValues = getIn(state, 'initial');
|
317 | var newInitialValues = mapData;
|
318 | var newValues = previousValues;
|
319 |
|
320 | if (keepDirty && registeredFields) {
|
321 | if (!deepEqual(newInitialValues, previousInitialValues)) {
|
322 |
|
323 |
|
324 |
|
325 |
|
326 |
|
327 |
|
328 |
|
329 |
|
330 |
|
331 |
|
332 |
|
333 |
|
334 |
|
335 | var overwritePristineValue = function overwritePristineValue(name) {
|
336 | var previousInitialValue = getIn(previousInitialValues, name);
|
337 | var previousValue = getIn(previousValues, name);
|
338 |
|
339 | if (deepEqual(previousValue, previousInitialValue)) {
|
340 |
|
341 | var newInitialValue = getIn(newInitialValues, name);
|
342 |
|
343 |
|
344 |
|
345 | if (getIn(newValues, name) !== newInitialValue) {
|
346 | newValues = setIn(newValues, name, newInitialValue);
|
347 | }
|
348 | }
|
349 | };
|
350 |
|
351 | if (!updateUnregisteredFields) {
|
352 | forEach(keys(registeredFields), function (name) {
|
353 | return overwritePristineValue(name);
|
354 | });
|
355 | }
|
356 |
|
357 | forEach(keys(newInitialValues), function (name) {
|
358 | var previousInitialValue = getIn(previousInitialValues, name);
|
359 |
|
360 | if (typeof previousInitialValue === 'undefined') {
|
361 |
|
362 | var newInitialValue = getIn(newInitialValues, name);
|
363 | newValues = setIn(newValues, name, newInitialValue);
|
364 | }
|
365 |
|
366 | if (updateUnregisteredFields) {
|
367 | overwritePristineValue(name);
|
368 | }
|
369 | });
|
370 | }
|
371 | } else {
|
372 | newValues = newInitialValues;
|
373 | }
|
374 |
|
375 | if (keepValues) {
|
376 | forEach(keys(previousValues), function (name) {
|
377 | var previousValue = getIn(previousValues, name);
|
378 | newValues = setIn(newValues, name, previousValue);
|
379 | });
|
380 | forEach(keys(previousInitialValues), function (name) {
|
381 | var previousInitialValue = getIn(previousInitialValues, name);
|
382 | newInitialValues = setIn(newInitialValues, name, previousInitialValue);
|
383 | });
|
384 | }
|
385 |
|
386 | if (keepSubmitSucceeded && getIn(state, 'submitSucceeded')) {
|
387 | result = setIn(result, 'submitSucceeded', true);
|
388 | }
|
389 |
|
390 | result = setIn(result, 'values', newValues);
|
391 | result = setIn(result, 'initial', newInitialValues);
|
392 | return result;
|
393 | }, _behaviors[_actionTypes.REGISTER_FIELD] = function (state, _ref19) {
|
394 | var _ref19$payload = _ref19.payload,
|
395 | name = _ref19$payload.name,
|
396 | type = _ref19$payload.type;
|
397 | var key = "registeredFields['" + name + "']";
|
398 | var field = getIn(state, key);
|
399 |
|
400 | if (field) {
|
401 | var count = getIn(field, 'count') + 1;
|
402 | field = setIn(field, 'count', count);
|
403 | } else {
|
404 | field = fromJS({
|
405 | name: name,
|
406 | type: type,
|
407 | count: 1
|
408 | });
|
409 | }
|
410 |
|
411 | return setIn(state, key, field);
|
412 | }, _behaviors[_actionTypes.RESET] = function (state) {
|
413 | var result = empty;
|
414 | var registeredFields = getIn(state, 'registeredFields');
|
415 |
|
416 | if (registeredFields) {
|
417 | result = setIn(result, 'registeredFields', registeredFields);
|
418 | }
|
419 |
|
420 | var values = getIn(state, 'initial');
|
421 |
|
422 | if (values) {
|
423 | result = setIn(result, 'values', values);
|
424 | result = setIn(result, 'initial', values);
|
425 | }
|
426 |
|
427 | return result;
|
428 | }, _behaviors[_actionTypes.RESET_SECTION] = function (state, _ref20) {
|
429 | var sections = _ref20.meta.sections;
|
430 | var result = state;
|
431 | sections.forEach(function (section) {
|
432 | result = deleteInWithCleanUp(result, "asyncErrors." + section);
|
433 | result = deleteInWithCleanUp(result, "submitErrors." + section);
|
434 | result = deleteInWithCleanUp(result, "fields." + section);
|
435 | var values = getIn(state, "initial." + section);
|
436 | result = values ? setIn(result, "values." + section, values) : deleteInWithCleanUp(result, "values." + section);
|
437 | });
|
438 | var anyTouched = some(keys(getIn(result, 'registeredFields')), function (key) {
|
439 | return getIn(result, "fields." + key + ".touched");
|
440 | });
|
441 | result = anyTouched ? setIn(result, 'anyTouched', true) : deleteIn(result, 'anyTouched');
|
442 | return result;
|
443 | }, _behaviors[_actionTypes.SUBMIT] = function (state) {
|
444 | return setIn(state, 'triggerSubmit', true);
|
445 | }, _behaviors[_actionTypes.START_ASYNC_VALIDATION] = function (state, _ref21) {
|
446 | var field = _ref21.meta.field;
|
447 | return setIn(state, 'asyncValidating', field || true);
|
448 | }, _behaviors[_actionTypes.START_SUBMIT] = function (state) {
|
449 | return setIn(state, 'submitting', true);
|
450 | }, _behaviors[_actionTypes.STOP_ASYNC_VALIDATION] = function (state, _ref22) {
|
451 | var payload = _ref22.payload;
|
452 | var result = state;
|
453 | result = deleteIn(result, 'asyncValidating');
|
454 |
|
455 | if (payload && Object.keys(payload).length) {
|
456 | var _error = payload._error,
|
457 | fieldErrors = (0, _objectWithoutPropertiesLoose2["default"])(payload, ["_error"]);
|
458 |
|
459 | if (_error) {
|
460 | result = setIn(result, 'error', _error);
|
461 | }
|
462 |
|
463 | if (Object.keys(fieldErrors).length) {
|
464 | result = setIn(result, 'asyncErrors', fromJS(fieldErrors));
|
465 | }
|
466 | } else {
|
467 | result = deleteIn(result, 'error');
|
468 | result = deleteIn(result, 'asyncErrors');
|
469 | }
|
470 |
|
471 | return result;
|
472 | }, _behaviors[_actionTypes.STOP_SUBMIT] = function (state, _ref23) {
|
473 | var payload = _ref23.payload;
|
474 | var result = state;
|
475 | result = deleteIn(result, 'submitting');
|
476 | result = deleteIn(result, 'submitFailed');
|
477 | result = deleteIn(result, 'submitSucceeded');
|
478 |
|
479 | if (payload && Object.keys(payload).length) {
|
480 | var _error = payload._error,
|
481 | fieldErrors = (0, _objectWithoutPropertiesLoose2["default"])(payload, ["_error"]);
|
482 |
|
483 | if (_error) {
|
484 | result = setIn(result, 'error', _error);
|
485 | } else {
|
486 | result = deleteIn(result, 'error');
|
487 | }
|
488 |
|
489 | if (Object.keys(fieldErrors).length) {
|
490 | result = setIn(result, 'submitErrors', fromJS(fieldErrors));
|
491 | } else {
|
492 | result = deleteIn(result, 'submitErrors');
|
493 | }
|
494 |
|
495 | result = setIn(result, 'submitFailed', true);
|
496 | } else {
|
497 | result = deleteIn(result, 'error');
|
498 | result = deleteIn(result, 'submitErrors');
|
499 | }
|
500 |
|
501 | return result;
|
502 | }, _behaviors[_actionTypes.SET_SUBMIT_FAILED] = function (state, _ref24) {
|
503 | var fields = _ref24.meta.fields;
|
504 | var result = state;
|
505 | result = setIn(result, 'submitFailed', true);
|
506 | result = deleteIn(result, 'submitSucceeded');
|
507 | result = deleteIn(result, 'submitting');
|
508 | fields.forEach(function (field) {
|
509 | return result = setIn(result, "fields." + field + ".touched", true);
|
510 | });
|
511 |
|
512 | if (fields.length) {
|
513 | result = setIn(result, 'anyTouched', true);
|
514 | }
|
515 |
|
516 | return result;
|
517 | }, _behaviors[_actionTypes.SET_SUBMIT_SUCCEEDED] = function (state) {
|
518 | var result = state;
|
519 | result = deleteIn(result, 'submitFailed');
|
520 | result = setIn(result, 'submitSucceeded', true);
|
521 | return result;
|
522 | }, _behaviors[_actionTypes.TOUCH] = function (state, _ref25) {
|
523 | var fields = _ref25.meta.fields;
|
524 | var result = state;
|
525 | fields.forEach(function (field) {
|
526 | return result = setIn(result, "fields." + field + ".touched", true);
|
527 | });
|
528 | result = setIn(result, 'anyTouched', true);
|
529 | return result;
|
530 | }, _behaviors[_actionTypes.UNREGISTER_FIELD] = function (state, _ref26) {
|
531 | var _ref26$payload = _ref26.payload,
|
532 | name = _ref26$payload.name,
|
533 | destroyOnUnmount = _ref26$payload.destroyOnUnmount;
|
534 | var result = state;
|
535 | var key = "registeredFields['" + name + "']";
|
536 | var field = getIn(result, key);
|
537 |
|
538 | if (!field) {
|
539 | return result;
|
540 | }
|
541 |
|
542 | var count = getIn(field, 'count') - 1;
|
543 |
|
544 | if (count <= 0 && destroyOnUnmount) {
|
545 |
|
546 | result = deleteIn(result, key);
|
547 |
|
548 | if (deepEqual(getIn(result, 'registeredFields'), empty)) {
|
549 | result = deleteIn(result, 'registeredFields');
|
550 | }
|
551 |
|
552 | var syncErrors = getIn(result, 'syncErrors');
|
553 |
|
554 | if (syncErrors) {
|
555 | syncErrors = plainDeleteInWithCleanUp(syncErrors, name);
|
556 |
|
557 | if (_plain["default"].deepEqual(syncErrors, _plain["default"].empty)) {
|
558 | result = deleteIn(result, 'syncErrors');
|
559 | } else {
|
560 | result = setIn(result, 'syncErrors', syncErrors);
|
561 | }
|
562 | }
|
563 |
|
564 | var syncWarnings = getIn(result, 'syncWarnings');
|
565 |
|
566 | if (syncWarnings) {
|
567 | syncWarnings = plainDeleteInWithCleanUp(syncWarnings, name);
|
568 |
|
569 | if (_plain["default"].deepEqual(syncWarnings, _plain["default"].empty)) {
|
570 | result = deleteIn(result, 'syncWarnings');
|
571 | } else {
|
572 | result = setIn(result, 'syncWarnings', syncWarnings);
|
573 | }
|
574 | }
|
575 |
|
576 | result = deleteInWithCleanUp(result, "submitErrors." + name);
|
577 | result = deleteInWithCleanUp(result, "asyncErrors." + name);
|
578 | } else {
|
579 | field = setIn(field, 'count', count);
|
580 | result = setIn(result, key, field);
|
581 | }
|
582 |
|
583 | return result;
|
584 | }, _behaviors[_actionTypes.UNTOUCH] = function (state, _ref27) {
|
585 | var fields = _ref27.meta.fields;
|
586 | var result = state;
|
587 | fields.forEach(function (field) {
|
588 | return result = deleteIn(result, "fields." + field + ".touched");
|
589 | });
|
590 | var anyTouched = some(keys(getIn(result, 'registeredFields')), function (key) {
|
591 | return getIn(result, "fields." + key + ".touched");
|
592 | });
|
593 | result = anyTouched ? setIn(result, 'anyTouched', true) : deleteIn(result, 'anyTouched');
|
594 | return result;
|
595 | }, _behaviors[_actionTypes.UPDATE_SYNC_ERRORS] = function (state, _ref28) {
|
596 | var _ref28$payload = _ref28.payload,
|
597 | syncErrors = _ref28$payload.syncErrors,
|
598 | error = _ref28$payload.error;
|
599 | var result = state;
|
600 |
|
601 | if (error) {
|
602 | result = setIn(result, 'error', error);
|
603 | result = setIn(result, 'syncError', true);
|
604 | } else {
|
605 | result = deleteIn(result, 'error');
|
606 | result = deleteIn(result, 'syncError');
|
607 | }
|
608 |
|
609 | if (Object.keys(syncErrors).length) {
|
610 | result = setIn(result, 'syncErrors', syncErrors);
|
611 | } else {
|
612 | result = deleteIn(result, 'syncErrors');
|
613 | }
|
614 |
|
615 | return result;
|
616 | }, _behaviors[_actionTypes.UPDATE_SYNC_WARNINGS] = function (state, _ref29) {
|
617 | var _ref29$payload = _ref29.payload,
|
618 | syncWarnings = _ref29$payload.syncWarnings,
|
619 | warning = _ref29$payload.warning;
|
620 | var result = state;
|
621 |
|
622 | if (warning) {
|
623 | result = setIn(result, 'warning', warning);
|
624 | } else {
|
625 | result = deleteIn(result, 'warning');
|
626 | }
|
627 |
|
628 | if (Object.keys(syncWarnings).length) {
|
629 | result = setIn(result, 'syncWarnings', syncWarnings);
|
630 | } else {
|
631 | result = deleteIn(result, 'syncWarnings');
|
632 | }
|
633 |
|
634 | return result;
|
635 | }, _behaviors);
|
636 |
|
637 | var reducer = function reducer(state, action) {
|
638 | if (state === void 0) {
|
639 | state = empty;
|
640 | }
|
641 |
|
642 | var behavior = behaviors[action.type];
|
643 | return behavior ? behavior(state, action) : state;
|
644 | };
|
645 |
|
646 | var byForm = function byForm(reducer) {
|
647 | return function (state, action) {
|
648 | if (state === void 0) {
|
649 | state = empty;
|
650 | }
|
651 |
|
652 | if (action === void 0) {
|
653 | action = {
|
654 | type: 'NONE'
|
655 | };
|
656 | }
|
657 |
|
658 | var form = action && action.meta && action.meta.form;
|
659 |
|
660 | if (!form || !isReduxFormAction(action)) {
|
661 | return state;
|
662 | }
|
663 |
|
664 | if (action.type === _actionTypes.DESTROY && action.meta && action.meta.form) {
|
665 | return action.meta.form.reduce(function (result, form) {
|
666 | return deleteInWithCleanUp(result, form);
|
667 | }, state);
|
668 | }
|
669 |
|
670 | var formState = getIn(state, form);
|
671 | var result = reducer(formState, action);
|
672 | return result === formState ? state : setIn(state, form, result);
|
673 | };
|
674 | };
|
675 | |
676 |
|
677 |
|
678 |
|
679 |
|
680 | function decorate(target) {
|
681 | target.plugin = function (reducers, config) {
|
682 | var _this = this;
|
683 |
|
684 | if (config === void 0) {
|
685 | config = {};
|
686 | }
|
687 |
|
688 |
|
689 | return decorate(function (state, action) {
|
690 | if (state === void 0) {
|
691 | state = empty;
|
692 | }
|
693 |
|
694 | if (action === void 0) {
|
695 | action = {
|
696 | type: 'NONE'
|
697 | };
|
698 | }
|
699 |
|
700 | var callPlugin = function callPlugin(processed, key) {
|
701 | var previousState = getIn(processed, key);
|
702 | var nextState = reducers[key](previousState, action, getIn(state, key));
|
703 | return nextState !== previousState ? setIn(processed, key, nextState) : processed;
|
704 | };
|
705 |
|
706 | var processed = _this(state, action);
|
707 |
|
708 |
|
709 | var form = action && action.meta && action.meta.form;
|
710 |
|
711 | if (form && !config.receiveAllFormActions) {
|
712 |
|
713 | return reducers[form] ? callPlugin(processed, form) : processed;
|
714 | } else {
|
715 |
|
716 | return Object.keys(reducers).reduce(callPlugin, processed);
|
717 | }
|
718 | });
|
719 | };
|
720 |
|
721 | return target;
|
722 | }
|
723 |
|
724 | return decorate(byForm(reducer));
|
725 | }
|
726 |
|
727 | var _default = createReducer;
|
728 | exports["default"] = _default; |
\ | No newline at end of file |