redux-form
Version:
A higher order component decorator for forms using Redux and React
1,517 lines (1,235 loc) • 157 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("react"));
else if(typeof define === 'function' && define.amd)
define(["react"], factory);
else if(typeof exports === 'object')
exports["ReduxForm"] = factory(require("react"));
else
root["ReduxForm"] = factory(root["React"]);
})(this, function(__WEBPACK_EXTERNAL_MODULE_3__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ exports: {},
/******/ id: moduleId,
/******/ loaded: false
/******/ };
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ // Flag the module as loaded
/******/ module.loaded = true;
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/ // Load entry module and return exports
/******/ return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
exports.__esModule = true;
exports.untouchWithKey = exports.untouch = exports.touchWithKey = exports.touch = exports.swapArrayValues = exports.stopSubmit = exports.stopAsyncValidation = exports.startSubmit = exports.startAsyncValidation = exports.reset = exports.propTypes = exports.initializeWithKey = exports.initialize = exports.getValues = exports.removeArrayValue = exports.reduxForm = exports.reducer = exports.focus = exports.destroy = exports.changeWithKey = exports.change = exports.blur = exports.addArrayValue = exports.actionTypes = undefined;
var _react = __webpack_require__(3);
var _react2 = _interopRequireDefault(_react);
var _reactRedux = __webpack_require__(58);
var _createAll2 = __webpack_require__(28);
var _createAll3 = _interopRequireDefault(_createAll2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var isNative = typeof window !== 'undefined' && window.navigator && window.navigator.product && window.navigator.product === 'ReactNative';
var _createAll = (0, _createAll3.default)(isNative, _react2.default, _reactRedux.connect);
var actionTypes = _createAll.actionTypes;
var addArrayValue = _createAll.addArrayValue;
var blur = _createAll.blur;
var change = _createAll.change;
var changeWithKey = _createAll.changeWithKey;
var destroy = _createAll.destroy;
var focus = _createAll.focus;
var reducer = _createAll.reducer;
var reduxForm = _createAll.reduxForm;
var removeArrayValue = _createAll.removeArrayValue;
var getValues = _createAll.getValues;
var initialize = _createAll.initialize;
var initializeWithKey = _createAll.initializeWithKey;
var propTypes = _createAll.propTypes;
var reset = _createAll.reset;
var startAsyncValidation = _createAll.startAsyncValidation;
var startSubmit = _createAll.startSubmit;
var stopAsyncValidation = _createAll.stopAsyncValidation;
var stopSubmit = _createAll.stopSubmit;
var swapArrayValues = _createAll.swapArrayValues;
var touch = _createAll.touch;
var touchWithKey = _createAll.touchWithKey;
var untouch = _createAll.untouch;
var untouchWithKey = _createAll.untouchWithKey;
exports.actionTypes = actionTypes;
exports.addArrayValue = addArrayValue;
exports.blur = blur;
exports.change = change;
exports.changeWithKey = changeWithKey;
exports.destroy = destroy;
exports.focus = focus;
exports.reducer = reducer;
exports.reduxForm = reduxForm;
exports.removeArrayValue = removeArrayValue;
exports.getValues = getValues;
exports.initialize = initialize;
exports.initializeWithKey = initializeWithKey;
exports.propTypes = propTypes;
exports.reset = reset;
exports.startAsyncValidation = startAsyncValidation;
exports.startSubmit = startSubmit;
exports.stopAsyncValidation = stopAsyncValidation;
exports.stopSubmit = stopSubmit;
exports.swapArrayValues = swapArrayValues;
exports.touch = touch;
exports.touchWithKey = touchWithKey;
exports.untouch = untouch;
exports.untouchWithKey = untouchWithKey;
/***/ },
/* 1 */
/***/ function(module, exports) {
'use strict';
exports.__esModule = true;
exports.makeFieldValue = makeFieldValue;
exports.isFieldValue = isFieldValue;
var flag = '_isFieldValue';
var isObject = function isObject(object) {
return typeof object === 'object';
};
function makeFieldValue(object) {
if (object && isObject(object)) {
Object.defineProperty(object, flag, { value: true });
}
return object;
}
function isFieldValue(object) {
return !!(object && isObject(object) && object[flag]);
}
/***/ },
/* 2 */
/***/ function(module, exports) {
'use strict';
exports.__esModule = true;
exports.default = isValid;
function isValid(error) {
if (Array.isArray(error)) {
return error.reduce(function (valid, errorValue) {
return valid && isValid(errorValue);
}, true);
}
if (error && typeof error === 'object') {
return Object.keys(error).reduce(function (valid, key) {
return valid && isValid(error[key]);
}, true);
}
return !error;
}
/***/ },
/* 3 */
/***/ function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE_3__;
/***/ },
/* 4 */
/***/ function(module, exports) {
'use strict';
exports.__esModule = true;
var ADD_ARRAY_VALUE = exports.ADD_ARRAY_VALUE = 'redux-form/ADD_ARRAY_VALUE';
var BLUR = exports.BLUR = 'redux-form/BLUR';
var CHANGE = exports.CHANGE = 'redux-form/CHANGE';
var DESTROY = exports.DESTROY = 'redux-form/DESTROY';
var FOCUS = exports.FOCUS = 'redux-form/FOCUS';
var INITIALIZE = exports.INITIALIZE = 'redux-form/INITIALIZE';
var REMOVE_ARRAY_VALUE = exports.REMOVE_ARRAY_VALUE = 'redux-form/REMOVE_ARRAY_VALUE';
var RESET = exports.RESET = 'redux-form/RESET';
var START_ASYNC_VALIDATION = exports.START_ASYNC_VALIDATION = 'redux-form/START_ASYNC_VALIDATION';
var START_SUBMIT = exports.START_SUBMIT = 'redux-form/START_SUBMIT';
var STOP_ASYNC_VALIDATION = exports.STOP_ASYNC_VALIDATION = 'redux-form/STOP_ASYNC_VALIDATION';
var STOP_SUBMIT = exports.STOP_SUBMIT = 'redux-form/STOP_SUBMIT';
var SUBMIT_FAILED = exports.SUBMIT_FAILED = 'redux-form/SUBMIT_FAILED';
var SWAP_ARRAY_VALUES = exports.SWAP_ARRAY_VALUES = 'redux-form/SWAP_ARRAY_VALUES';
var TOUCH = exports.TOUCH = 'redux-form/TOUCH';
var UNTOUCH = exports.UNTOUCH = 'redux-form/UNTOUCH';
/***/ },
/* 5 */
/***/ function(module, exports) {
"use strict";
exports.__esModule = true;
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; };
exports.default = mapValues;
/**
* Maps all the values in the given object through the given function and saves them, by key, to a result object
*/
function mapValues(obj, fn) {
return obj ? Object.keys(obj).reduce(function (accumulator, key) {
var _extends2;
return _extends({}, accumulator, (_extends2 = {}, _extends2[key] = fn(obj[key], key), _extends2));
}, {}) : obj;
}
/***/ },
/* 6 */
/***/ function(module, exports) {
module.exports = isPromise;
function isPromise(obj) {
return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';
}
/***/ },
/* 7 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
exports.__esModule = true;
exports.untouch = exports.touch = exports.swapArrayValues = exports.submitFailed = exports.stopSubmit = exports.stopAsyncValidation = exports.startSubmit = exports.startAsyncValidation = exports.reset = exports.removeArrayValue = exports.initialize = exports.focus = exports.destroy = exports.change = exports.blur = exports.addArrayValue = undefined;
var _actionTypes = __webpack_require__(4);
var addArrayValue = exports.addArrayValue = function addArrayValue(path, value, index, fields) {
return { type: _actionTypes.ADD_ARRAY_VALUE, path: path, value: value, index: index, fields: fields };
};
var blur = exports.blur = function blur(field, value) {
return { type: _actionTypes.BLUR, field: field, value: value };
};
var change = exports.change = function change(field, value) {
return { type: _actionTypes.CHANGE, field: field, value: value };
};
var destroy = exports.destroy = function destroy() {
return { type: _actionTypes.DESTROY };
};
var focus = exports.focus = function focus(field) {
return { type: _actionTypes.FOCUS, field: field };
};
var initialize = exports.initialize = function initialize(data, fields) {
if (!Array.isArray(fields)) {
throw new Error('must provide fields array to initialize() action creator');
}
return { type: _actionTypes.INITIALIZE, data: data, fields: fields };
};
var removeArrayValue = exports.removeArrayValue = function removeArrayValue(path, index) {
return { type: _actionTypes.REMOVE_ARRAY_VALUE, path: path, index: index };
};
var reset = exports.reset = function reset() {
return { type: _actionTypes.RESET };
};
var startAsyncValidation = exports.startAsyncValidation = function startAsyncValidation(field) {
return { type: _actionTypes.START_ASYNC_VALIDATION, field: field };
};
var startSubmit = exports.startSubmit = function startSubmit() {
return { type: _actionTypes.START_SUBMIT };
};
var stopAsyncValidation = exports.stopAsyncValidation = function stopAsyncValidation(errors) {
return { type: _actionTypes.STOP_ASYNC_VALIDATION, errors: errors };
};
var stopSubmit = exports.stopSubmit = function stopSubmit(errors) {
return { type: _actionTypes.STOP_SUBMIT, errors: errors };
};
var submitFailed = exports.submitFailed = function submitFailed() {
return { type: _actionTypes.SUBMIT_FAILED };
};
var swapArrayValues = exports.swapArrayValues = function swapArrayValues(path, indexA, indexB) {
return { type: _actionTypes.SWAP_ARRAY_VALUES, path: path, indexA: indexA, indexB: indexB };
};
var touch = exports.touch = function touch() {
for (var _len = arguments.length, fields = Array(_len), _key = 0; _key < _len; _key++) {
fields[_key] = arguments[_key];
}
return { type: _actionTypes.TOUCH, fields: fields };
};
var untouch = exports.untouch = function untouch() {
for (var _len2 = arguments.length, fields = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
fields[_key2] = arguments[_key2];
}
return { type: _actionTypes.UNTOUCH, fields: fields };
};
/***/ },
/* 8 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
exports.__esModule = true;
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; };
exports.default = bindActionData;
var _mapValues = __webpack_require__(5);
var _mapValues2 = _interopRequireDefault(_mapValues);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Adds additional properties to the results of the function or map of functions passed
*/
function bindActionData(action, data) {
if (typeof action === 'function') {
return function () {
return _extends({}, action.apply(undefined, arguments), data);
};
}
if (typeof action === 'object') {
return (0, _mapValues2.default)(action, function (value) {
return bindActionData(value, data);
});
}
return action;
}
/***/ },
/* 9 */
/***/ function(module, exports) {
'use strict';
exports.__esModule = true;
var dataKey = exports.dataKey = 'value';
var createOnDragStart = function createOnDragStart(name, getValue) {
return function (event) {
event.dataTransfer.setData(dataKey, getValue());
};
};
exports.default = createOnDragStart;
/***/ },
/* 10 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
exports.__esModule = true;
var _isEvent = __webpack_require__(11);
var _isEvent2 = _interopRequireDefault(_isEvent);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var getSelectedValues = function getSelectedValues(options) {
var result = [];
if (options) {
for (var index = 0; index < options.length; index++) {
var option = options[index];
if (option.selected) {
result.push(option.value);
}
}
}
return result;
};
var getValue = function getValue(event, isReactNative) {
if ((0, _isEvent2.default)(event)) {
if (!isReactNative && event.nativeEvent && event.nativeEvent.text !== undefined) {
return event.nativeEvent.text;
}
if (isReactNative && event.nativeEvent !== undefined) {
return event.nativeEvent.text;
}
var _event$target = event.target;
var type = _event$target.type;
var value = _event$target.value;
var checked = _event$target.checked;
var files = _event$target.files;
var dataTransfer = event.dataTransfer;
if (type === 'checkbox') {
return checked;
}
if (type === 'file') {
return files || dataTransfer && dataTransfer.files;
}
if (type === 'select-multiple') {
return getSelectedValues(event.target.options);
}
return value;
}
// not an event, so must be either our value or an object containing our value in the 'value' key
return event && typeof event === 'object' && event.value !== undefined ? event.value : // extract value from { value: value } structure. https://github.com/nikgraf/belle/issues/58
event;
};
exports.default = getValue;
/***/ },
/* 11 */
/***/ function(module, exports) {
"use strict";
exports.__esModule = true;
var isEvent = function isEvent(candidate) {
return !!(candidate && candidate.stopPropagation && candidate.preventDefault);
};
exports.default = isEvent;
/***/ },
/* 12 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
exports.__esModule = true;
var _isEvent = __webpack_require__(11);
var _isEvent2 = _interopRequireDefault(_isEvent);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var silenceEvent = function silenceEvent(event) {
var is = (0, _isEvent2.default)(event);
if (is) {
event.preventDefault();
}
return is;
};
exports.default = silenceEvent;
/***/ },
/* 13 */
/***/ function(module, exports) {
'use strict';
exports.__esModule = true;
exports.default = getDisplayName;
function getDisplayName(Comp) {
return Comp.displayName || Comp.name || 'Component';
}
/***/ },
/* 14 */
/***/ function(module, exports) {
'use strict';
exports.__esModule = true;
var getValue = function getValue(field, state, dest) {
var dotIndex = field.indexOf('.');
var openIndex = field.indexOf('[');
var closeIndex = field.indexOf(']');
if (openIndex > 0 && closeIndex !== openIndex + 1) {
throw new Error('found [ not followed by ]');
}
if (openIndex > 0 && (dotIndex < 0 || openIndex < dotIndex)) {
(function () {
// array field
var key = field.substring(0, openIndex);
var rest = field.substring(closeIndex + 1);
if (rest[0] === '.') {
rest = rest.substring(1);
}
var array = state && state[key] || [];
if (rest) {
if (!dest[key]) {
dest[key] = [];
}
array.forEach(function (item, index) {
if (!dest[key][index]) {
dest[key][index] = {};
}
getValue(rest, item, dest[key][index]);
});
} else {
dest[key] = array.map(function (item) {
return item && item.value;
});
}
})();
} else if (dotIndex > 0) {
// subobject field
var key = field.substring(0, dotIndex);
var rest = field.substring(dotIndex + 1);
if (!dest[key]) {
dest[key] = {};
}
getValue(rest, state && state[key] || {}, dest[key]);
} else {
dest[field] = state[field] && state[field].value;
}
};
var getValues = function getValues(fields, state) {
return fields.reduce(function (accumulator, field) {
getValue(field, state, accumulator);
return accumulator;
}, {});
};
exports.default = getValues;
/***/ },
/* 15 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
exports.__esModule = true;
var _fieldValue = __webpack_require__(1);
/**
* A different version of getValues() that does not need the fields array
*/
var getValuesFromState = function getValuesFromState(state) {
if (!state) {
return state;
}
var keys = Object.keys(state);
if (!keys.length) {
return undefined;
}
return keys.reduce(function (accumulator, key) {
var field = state[key];
if (field) {
if (field.hasOwnProperty && field.hasOwnProperty('value')) {
if (field.value !== undefined) {
accumulator[key] = field.value;
}
} else if (Array.isArray(field)) {
accumulator[key] = field.map(function (arrayField) {
return (0, _fieldValue.isFieldValue)(arrayField) ? arrayField.value : getValuesFromState(arrayField);
});
} else if (typeof field === 'object') {
var result = getValuesFromState(field);
if (result && Object.keys(result).length > 0) {
accumulator[key] = result;
}
}
}
return accumulator;
}, {});
};
exports.default = getValuesFromState;
/***/ },
/* 16 */
/***/ function(module, exports) {
'use strict';
exports.__esModule = true;
/**
* Reads any potentially deep value from an object using dot and array syntax
*/
var read = function read(path, object) {
if (!path || !object) {
return object;
}
var dotIndex = path.indexOf('.');
if (dotIndex === 0) {
return read(path.substring(1), object);
}
var openIndex = path.indexOf('[');
var closeIndex = path.indexOf(']');
if (dotIndex >= 0 && (openIndex < 0 || dotIndex < openIndex)) {
// iterate down object tree
return read(path.substring(dotIndex + 1), object[path.substring(0, dotIndex)]);
}
if (openIndex >= 0 && (dotIndex < 0 || openIndex < dotIndex)) {
if (closeIndex < 0) {
throw new Error('found [ but no ]');
}
var key = path.substring(0, openIndex);
var index = path.substring(openIndex + 1, closeIndex);
if (!index.length) {
return object[key];
}
if (openIndex === 0) {
return read(path.substring(closeIndex + 1), object[index]);
}
if (!object[key]) {
return undefined;
}
return read(path.substring(closeIndex + 1), object[key][index]);
}
return object[path];
};
exports.default = read;
/***/ },
/* 17 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
exports.__esModule = true;
exports.initialState = exports.globalErrorKey = undefined;
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; };
var _initialState, _behaviors;
var _actionTypes = __webpack_require__(4);
var _mapValues = __webpack_require__(5);
var _mapValues2 = _interopRequireDefault(_mapValues);
var _read = __webpack_require__(16);
var _read2 = _interopRequireDefault(_read);
var _write = __webpack_require__(18);
var _write2 = _interopRequireDefault(_write);
var _getValuesFromState = __webpack_require__(15);
var _getValuesFromState2 = _interopRequireDefault(_getValuesFromState);
var _initializeState = __webpack_require__(39);
var _initializeState2 = _interopRequireDefault(_initializeState);
var _resetState = __webpack_require__(45);
var _resetState2 = _interopRequireDefault(_resetState);
var _setErrors = __webpack_require__(46);
var _setErrors2 = _interopRequireDefault(_setErrors);
var _fieldValue = __webpack_require__(1);
var _normalizeFields = __webpack_require__(41);
var _normalizeFields2 = _interopRequireDefault(_normalizeFields);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
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; }
var globalErrorKey = exports.globalErrorKey = '_error';
var initialState = exports.initialState = (_initialState = {
_active: undefined,
_asyncValidating: false
}, _initialState[globalErrorKey] = undefined, _initialState._initialized = false, _initialState._submitting = false, _initialState._submitFailed = false, _initialState);
var behaviors = (_behaviors = {}, _behaviors[_actionTypes.ADD_ARRAY_VALUE] = function (state, _ref) {
var path = _ref.path;
var index = _ref.index;
var value = _ref.value;
var fields = _ref.fields;
var array = (0, _read2.default)(path, state);
var stateCopy = _extends({}, state);
var arrayCopy = array ? [].concat(array) : [];
var newValue = value !== null && typeof value === 'object' ? (0, _initializeState2.default)(value, fields || Object.keys(value)) : (0, _fieldValue.makeFieldValue)({ value: value });
if (index === undefined) {
arrayCopy.push(newValue);
} else {
arrayCopy.splice(index, 0, newValue);
}
return (0, _write2.default)(path, arrayCopy, stateCopy);
}, _behaviors[_actionTypes.BLUR] = function (state, _ref2) {
var field = _ref2.field;
var value = _ref2.value;
var touch = _ref2.touch;
// remove _active from state
var _active = state._active;
var stateCopy = _objectWithoutProperties(state, ['_active']); // eslint-disable-line prefer-const
return (0, _write2.default)(field, function (previous) {
var result = _extends({}, previous);
if (value !== undefined) {
result.value = value;
}
if (touch) {
result.touched = true;
}
return (0, _fieldValue.makeFieldValue)(result);
}, stateCopy);
}, _behaviors[_actionTypes.CHANGE] = function (state, _ref3) {
var field = _ref3.field;
var value = _ref3.value;
var touch = _ref3.touch;
return (0, _write2.default)(field, function (previous) {
var _previous$value = _extends({}, previous, { value: value });
var asyncError = _previous$value.asyncError;
var submitError = _previous$value.submitError;
var result = _objectWithoutProperties(_previous$value, ['asyncError', 'submitError']);
if (touch) {
result.touched = true;
}
return (0, _fieldValue.makeFieldValue)(result);
}, state);
}, _behaviors[_actionTypes.DESTROY] = function () {
return undefined;
}, _behaviors[_actionTypes.FOCUS] = function (state, _ref4) {
var field = _ref4.field;
var stateCopy = (0, _write2.default)(field, function (previous) {
return (0, _fieldValue.makeFieldValue)(_extends({}, previous, { visited: true }));
}, state);
stateCopy._active = field;
return stateCopy;
}, _behaviors[_actionTypes.INITIALIZE] = function (state, _ref5) {
var _extends2;
var data = _ref5.data;
var fields = _ref5.fields;
return _extends({}, (0, _initializeState2.default)(data, fields, state), (_extends2 = {
_asyncValidating: false,
_active: undefined
}, _extends2[globalErrorKey] = undefined, _extends2._initialized = true, _extends2._submitting = false, _extends2._submitFailed = false, _extends2));
}, _behaviors[_actionTypes.REMOVE_ARRAY_VALUE] = function (state, _ref6) {
var path = _ref6.path;
var index = _ref6.index;
var array = (0, _read2.default)(path, state);
var stateCopy = _extends({}, state);
var arrayCopy = array ? [].concat(array) : [];
if (index === undefined) {
arrayCopy.pop();
} else if (isNaN(index)) {
delete arrayCopy[index];
} else {
arrayCopy.splice(index, 1);
}
return (0, _write2.default)(path, arrayCopy, stateCopy);
}, _behaviors[_actionTypes.RESET] = function (state) {
var _extends3;
return _extends({}, (0, _resetState2.default)(state), (_extends3 = {
_active: undefined,
_asyncValidating: false
}, _extends3[globalErrorKey] = undefined, _extends3._initialized = state._initialized, _extends3._submitting = false, _extends3._submitFailed = false, _extends3));
}, _behaviors[_actionTypes.START_ASYNC_VALIDATION] = function (state, _ref7) {
var field = _ref7.field;
return _extends({}, state, {
_asyncValidating: field || true
});
}, _behaviors[_actionTypes.START_SUBMIT] = function (state) {
return _extends({}, state, {
_submitting: true
});
}, _behaviors[_actionTypes.STOP_ASYNC_VALIDATION] = function (state, _ref8) {
var _extends4;
var errors = _ref8.errors;
return _extends({}, (0, _setErrors2.default)(state, errors, 'asyncError'), (_extends4 = {
_asyncValidating: false
}, _extends4[globalErrorKey] = errors && errors[globalErrorKey], _extends4));
}, _behaviors[_actionTypes.STOP_SUBMIT] = function (state, _ref9) {
var _extends5;
var errors = _ref9.errors;
return _extends({}, (0, _setErrors2.default)(state, errors, 'submitError'), (_extends5 = {}, _extends5[globalErrorKey] = errors && errors[globalErrorKey], _extends5._submitting = false, _extends5._submitFailed = !!(errors && Object.keys(errors).length), _extends5));
}, _behaviors[_actionTypes.SUBMIT_FAILED] = function (state) {
return _extends({}, state, {
_submitFailed: true
});
}, _behaviors[_actionTypes.SWAP_ARRAY_VALUES] = function (state, _ref10) {
var path = _ref10.path;
var indexA = _ref10.indexA;
var indexB = _ref10.indexB;
var array = (0, _read2.default)(path, state);
var arrayLength = array.length;
if (indexA === indexB || isNaN(indexA) || isNaN(indexB) || indexA >= arrayLength || indexB >= arrayLength) {
return state; // do nothing
}
var stateCopy = _extends({}, state);
var arrayCopy = [].concat(array);
arrayCopy[indexA] = array[indexB];
arrayCopy[indexB] = array[indexA];
return (0, _write2.default)(path, arrayCopy, stateCopy);
}, _behaviors[_actionTypes.TOUCH] = function (state, _ref11) {
var fields = _ref11.fields;
return _extends({}, state, fields.reduce(function (accumulator, field) {
return (0, _write2.default)(field, function (value) {
return (0, _fieldValue.makeFieldValue)(_extends({}, value, { touched: true }));
}, accumulator);
}, state));
}, _behaviors[_actionTypes.UNTOUCH] = function (state, _ref12) {
var fields = _ref12.fields;
return _extends({}, state, fields.reduce(function (accumulator, field) {
return (0, _write2.default)(field, function (value) {
if (value) {
var touched = value.touched;
var rest = _objectWithoutProperties(value, ['touched']);
return (0, _fieldValue.makeFieldValue)(rest);
}
return (0, _fieldValue.makeFieldValue)(value);
}, accumulator);
}, state));
}, _behaviors);
var reducer = function reducer() {
var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];
var action = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
var behavior = behaviors[action.type];
return behavior ? behavior(state, action) : state;
};
function formReducer() {
var _extends11;
var state = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
var action = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
var form = action.form;
var key = action.key;
var rest = _objectWithoutProperties(action, ['form', 'key']); // eslint-disable-line no-redeclare
if (!form) {
return state;
}
if (key) {
var _extends8, _extends9;
if (action.type === _actionTypes.DESTROY) {
var _extends7;
return _extends({}, state, (_extends7 = {}, _extends7[form] = state[form] && Object.keys(state[form]).reduce(function (accumulator, stateKey) {
var _extends6;
return stateKey === key ? accumulator : _extends({}, accumulator, (_extends6 = {}, _extends6[stateKey] = state[form][stateKey], _extends6));
}, {}), _extends7));
}
return _extends({}, state, (_extends9 = {}, _extends9[form] = _extends({}, state[form], (_extends8 = {}, _extends8[key] = reducer((state[form] || {})[key], rest), _extends8)), _extends9));
}
if (action.type === _actionTypes.DESTROY) {
return Object.keys(state).reduce(function (accumulator, formName) {
var _extends10;
return formName === form ? accumulator : _extends({}, accumulator, (_extends10 = {}, _extends10[formName] = state[formName], _extends10));
}, {});
}
return _extends({}, state, (_extends11 = {}, _extends11[form] = reducer(state[form], rest), _extends11));
}
/**
* Adds additional functionality to the reducer
*/
function decorate(target) {
target.plugin = function plugin(reducers) {
var _this = this;
// use 'function' keyword to enable 'this'
return decorate(function () {
var state = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
var action = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
var result = _this(state, action);
return _extends({}, result, (0, _mapValues2.default)(reducers, function (pluginReducer, key) {
return pluginReducer(result[key] || initialState, action);
}));
});
};
target.normalize = function normalize(normalizers) {
var _this2 = this;
// use 'function' keyword to enable 'this'
return decorate(function () {
var state = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
var action = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
var result = _this2(state, action);
return _extends({}, result, (0, _mapValues2.default)(normalizers, function (formNormalizers, form) {
var runNormalize = function runNormalize(previous, currentResult) {
var previousValues = (0, _getValuesFromState2.default)(_extends({}, initialState, previous));
var formResult = _extends({}, initialState, currentResult);
var values = (0, _getValuesFromState2.default)(formResult);
return (0, _normalizeFields2.default)(formNormalizers, formResult, previous, values, previousValues);
};
if (action.key) {
var _extends12;
return _extends({}, result[form], (_extends12 = {}, _extends12[action.key] = runNormalize(state[form][action.key], result[form][action.key]), _extends12));
}
return runNormalize(state[form], result[form]);
}));
});
};
return target;
}
exports.default = decorate(formReducer);
/***/ },
/* 18 */
/***/ function(module, exports) {
'use strict';
exports.__esModule = true;
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; };
/**
* Writes any potentially deep value from an object using dot and array syntax,
* and returns a new copy of the object.
*/
var write = function write(path, value, object) {
var _extends7;
var dotIndex = path.indexOf('.');
if (dotIndex === 0) {
return write(path.substring(1), value, object);
}
var openIndex = path.indexOf('[');
var closeIndex = path.indexOf(']');
if (dotIndex >= 0 && (openIndex < 0 || dotIndex < openIndex)) {
var _extends2;
// is dot notation
var key = path.substring(0, dotIndex);
return _extends({}, object, (_extends2 = {}, _extends2[key] = write(path.substring(dotIndex + 1), value, object[key] || {}), _extends2));
}
if (openIndex >= 0 && (dotIndex < 0 || openIndex < dotIndex)) {
var _ret = function () {
var _extends6;
// is array notation
if (closeIndex < 0) {
throw new Error('found [ but no ]');
}
var key = path.substring(0, openIndex);
var index = path.substring(openIndex + 1, closeIndex);
var array = object[key] || [];
var rest = path.substring(closeIndex + 1);
if (index) {
var _extends4;
// indexed array
if (rest.length) {
var _extends3;
// need to keep recursing
var dest = array[index] || {};
var arrayCopy = [].concat(array);
arrayCopy[index] = write(rest, value, dest);
return {
v: _extends({}, object || {}, (_extends3 = {}, _extends3[key] = arrayCopy, _extends3))
};
}
var copy = [].concat(array);
copy[index] = typeof value === 'function' ? value(copy[index]) : value;
return {
v: _extends({}, object || {}, (_extends4 = {}, _extends4[key] = copy, _extends4))
};
}
// indexless array
if (rest.length) {
var _extends5;
// need to keep recursing
if ((!array || !array.length) && typeof value === 'function') {
return {
v: object
}; // don't even set a value under [key]
}
var _arrayCopy = array.map(function (dest) {
return write(rest, value, dest);
});
return {
v: _extends({}, object || {}, (_extends5 = {}, _extends5[key] = _arrayCopy, _extends5))
};
}
var result = void 0;
if (Array.isArray(value)) {
result = value;
} else if (object[key]) {
result = array.map(function (dest) {
return typeof value === 'function' ? value(dest) : value;
});
} else if (typeof value === 'function') {
return {
v: object
}; // don't even set a value under [key]
} else {
result = value;
}
return {
v: _extends({}, object || {}, (_extends6 = {}, _extends6[key] = result, _extends6))
};
}();
if (typeof _ret === "object") return _ret.v;
}
return _extends({}, object, (_extends7 = {}, _extends7[path] = typeof value === 'function' ? value(object[path]) : value, _extends7));
};
exports.default = write;
/***/ },
/* 19 */
/***/ function(module, exports, __webpack_require__) {
var pSlice = Array.prototype.slice;
var objectKeys = __webpack_require__(52);
var isArguments = __webpack_require__(51);
var deepEqual = module.exports = function (actual, expected, opts) {
if (!opts) opts = {};
// 7.1. All identical values are equivalent, as determined by ===.
if (actual === expected) {
return true;
} else if (actual instanceof Date && expected instanceof Date) {
return actual.getTime() === expected.getTime();
// 7.3. Other pairs that do not both pass typeof value == 'object',
// equivalence is determined by ==.
} else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {
return opts.strict ? actual === expected : actual == expected;
// 7.4. For all other Object pairs, including Array objects, equivalence is
// determined by having the same number of owned properties (as verified
// with Object.prototype.hasOwnProperty.call), the same set of keys
// (although not necessarily the same order), equivalent values for every
// corresponding key, and an identical 'prototype' property. Note: this
// accounts for both named and indexed properties on Arrays.
} else {
return objEquiv(actual, expected, opts);
}
}
function isUndefinedOrNull(value) {
return value === null || value === undefined;
}
function isBuffer (x) {
if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;
if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {
return false;
}
if (x.length > 0 && typeof x[0] !== 'number') return false;
return true;
}
function objEquiv(a, b, opts) {
var i, key;
if (isUndefinedOrNull(a) || isUndefinedOrNull(b))
return false;
// an identical 'prototype' property.
if (a.prototype !== b.prototype) return false;
//~~~I've managed to break Object.keys through screwy arguments passing.
// Converting to array solves the problem.
if (isArguments(a)) {
if (!isArguments(b)) {
return false;
}
a = pSlice.call(a);
b = pSlice.call(b);
return deepEqual(a, b, opts);
}
if (isBuffer(a)) {
if (!isBuffer(b)) {
return false;
}
if (a.length !== b.length) return false;
for (i = 0; i < a.length; i++) {
if (a[i] !== b[i]) return false;
}
return true;
}
try {
var ka = objectKeys(a),
kb = objectKeys(b);
} catch (e) {//happens when one is a string literal and the other isn't
return false;
}
// having the same number of owned properties (keys incorporates
// hasOwnProperty)
if (ka.length != kb.length)
return false;
//the same set of keys (although not necessarily the same order),
ka.sort();
kb.sort();
//~~~cheap key test
for (i = ka.length - 1; i >= 0; i--) {
if (ka[i] != kb[i])
return false;
}
//equivalent values for every corresponding key, and
//~~~possibly expensive deep test
for (i = ka.length - 1; i >= 0; i--) {
key = ka[i];
if (!deepEqual(a[key], b[key], opts)) return false;
}
return typeof a === typeof b;
}
/***/ },
/* 20 */
/***/ function(module, exports) {
/**
* Copyright 2015, Yahoo! Inc.
* Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
*/
'use strict';
var REACT_STATICS = {
childContextTypes: true,
contextTypes: true,
defaultProps: true,
displayName: true,
getDefaultProps: true,
mixins: true,
propTypes: true,
type: true
};
var KNOWN_STATICS = {
name: true,
length: true,
prototype: true,
caller: true,
arguments: true,
arity: true
};
module.exports = function hoistNonReactStatics(targetComponent, sourceComponent) {
var keys = Object.getOwnPropertyNames(sourceComponent);
for (var i=0; i<keys.length; ++i) {
if (!REACT_STATICS[keys[i]] && !KNOWN_STATICS[keys[i]]) {
try {
targetComponent[keys[i]] = sourceComponent[keys[i]];
} catch (error) {
}
}
}
return targetComponent;
};
/***/ },
/* 21 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
exports.__esModule = true;
var _react = __webpack_require__(3);
exports["default"] = _react.PropTypes.shape({
subscribe: _react.PropTypes.func.isRequired,
dispatch: _react.PropTypes.func.isRequired,
getState: _react.PropTypes.func.isRequired
});
/***/ },
/* 22 */
/***/ function(module, exports) {
"use strict";
exports.__esModule = true;
exports["default"] = compose;
/**
* Composes single-argument functions from right to left.
*
* @param {...Function} funcs The functions to compose.
* @returns {Function} A function obtained by composing functions from right to
* left. For example, compose(f, g, h) is identical to arg => f(g(h(arg))).
*/
function compose() {
for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) {
funcs[_key] = arguments[_key];
}
return function () {
if (funcs.length === 0) {
return arguments.length <= 0 ? undefined : arguments[0];
}
var last = funcs[funcs.length - 1];
var rest = funcs.slice(0, -1);
return rest.reduceRight(function (composed, f) {
return f(composed);
}, last.apply(undefined, arguments));
};
}
/***/ },
/* 23 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
exports.__esModule = true;
exports.ActionTypes = undefined;
exports["default"] = createStore;
var _isPlainObject = __webpack_require__(26);
var _isPlainObject2 = _interopRequireDefault(_isPlainObject);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
/**
* These are private action types reserved by Redux.
* For any unknown actions, you must return the current state.
* If the current state is undefined, you must return the initial state.
* Do not reference these action types directly in your code.
*/
var ActionTypes = exports.ActionTypes = {
INIT: '@@redux/INIT'
};
/**
* Creates a Redux store that holds the state tree.
* The only way to change the data in the store is to call `dispatch()` on it.
*
* There should only be a single store in your app. To specify how different
* parts of the state tree respond to actions, you may combine several reducers
* into a single reducer function by using `combineReducers`.
*
* @param {Function} reducer A function that returns the next state tree, given
* the current state tree and the action to handle.
*
* @param {any} [initialState] The initial state. You may optionally specify it
* to hydrate the state from the server in universal apps, or to restore a
* previously serialized user session.
* If you use `combineReducers` to produce the root reducer function, this must be
* an object with the same shape as `combineReducers` keys.
*
* @param {Function} enhancer The store enhancer. You may optionally specify it
* to enhance the store with third-party capabilities such as middleware,
* time travel, persistence, etc. The only store enhancer that ships with Redux
* is `applyMiddleware()`.
*
* @returns {Store} A Redux store that lets you read the state, dispatch actions
* and subscribe to changes.
*/
function createStore(reducer, initialState, enhancer) {
if (typeof initialState === 'function' && typeof enhancer === 'undefined') {
enhancer = initialState;
initialState = undefined;
}
if (typeof enhancer !== 'undefined') {
if (typeof enhancer !== 'function') {
throw new Error('Expected the enhancer to be a function.');
}
return enhancer(createStore)(reducer, initialState);
}
if (typeof reducer !== 'function') {
throw new Error('Expected the reducer to be a function.');
}
var currentReducer = reducer;
var currentState = initialState;
var currentListeners = [];
var nextListeners = currentListeners;
var isDispatching = false;
function ensureCanMutateNextListeners() {
if (nextListeners === currentListeners) {
nextListeners = currentListeners.slice();
}
}
/**
* Reads the state tree managed by the store.
*
* @returns {any} The current state tree of your application.
*/
function getState() {
return currentState;
}
/**
* Adds a change listener. It will be called any time an action is dispatched,
* and some part of the state tree may potentially have changed. You may then
* call `getState()` to read the current state tree inside the callback.
*
* You may call `dispatch()` from a change listener, with the following
* caveats:
*
* 1. The subscriptions are snapshotted just before every `dispatch()` call.
* If you subscribe or unsubscribe while the listeners are being invoked, this
* will not have any effect on the `dispatch()` that is currently in progress.
* However, the next `dispatch()` call, whether nested or not, will use a more
* recent snapshot of the subscription list.
*
* 2. The listener should not expect to see all states changes, as the state
* might have been updated multiple times during a nested `dispatch()` before
* the listener is called. It is, however, guaranteed that all subscribers
* registered before the `dispatch()` started will be called with the latest
* state by the time it exits.
*
* @param {Function} listener A callback to be invoked on every dispatch.
* @returns {Function} A function to remove this change listener.
*/
function subscribe(listener) {
if (typeof listener !== 'function') {
throw new Error('Expected listener to be a function.');
}
var isSubscribed = true;
ensureCanMutateNextListeners();
nextListeners.push(listener);
return function unsubscribe() {
if (!isSubscribed) {
return;
}
isSubscribed = false;
ensureCanMutateNextListeners();
var index = nextListeners.indexOf(listener);
nextListeners.splice(index, 1);
};
}
/**
* Dispatches an action. It is the only way to trigger a state change.
*
* The `reducer` function, used to create the store, will be called with the
* current state tree and the given `action`. Its return value will
* be considered the **next** state of the tree, and the change listeners
* will be notified.
*
* The base implementation only supports plain object actions. If you want to
* dispatch a Promise, an Observable, a thunk, or something else, you need to
* wrap your store creating function into the corresponding middleware. For
* example, see the documentation for the `redux-thunk` package. Even the
* middleware will eventually dispatch plain object actions using this method.
*
* @param {Object} action A plain object representing “what changed”. It is
* a good idea to keep actions serializable so you can record and replay user
* sessions, or use the time travelling `redux-devtools`. An action must have
* a `type` property which may not be `undefined`. It is a good idea to use
* string constants for action types.
*
* @returns {Object} For convenience, the same action object you dispatched.
*
* Note that, if you use a custom middleware, it may wrap `dispatch()` to
* return something else (for example, a Promise you can await).
*/
function dispatch(action) {
if (!(0, _isPlainObject2["default"])(action)) {
throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.');
}
if (typeof action.type === 'undefined') {
throw new Error('Actions may not have an undefined "type" property. ' + 'Have you misspelled a constant?');
}
if (isDispatching) {
throw new Error('Reducers may not dispatch actions.');
}
try {
isDispatching = true;
currentState = currentReducer(currentState, action);
} finally {
isDispatching = false;
}
var listeners = currentListeners = nextListeners;
for (var i = 0; i < listeners.length; i++) {
listeners[i]();
}
return action;
}
/**
* Replaces the reducer currently used by the store to calculate the state.
*
* You might need this if your app implements code splitting and you want to
* load some of the reducers dynamically. You might also need this if you
* implement a hot reloading mechanism for Redux.
*
* @param {Function} nextReducer The reducer for the store to use instead.
* @returns {void}
*/
function replaceReducer(nextReducer) {
if (typeof nextReducer !== 'function') {
throw new Error('Expected the nextReducer to be a function.');
}
currentReducer = nextReducer;
dispatch({ type: ActionTypes.INIT });
}
// When a store is created, an "INIT" action is dispatched so that every
// reducer returns their initial state. This effectively populates
// the initial state tree.
dispatch({ type: ActionTypes.INIT });
return {
dispatch: dispatch,
subscribe: subscribe,
getState: getState,
replaceReducer: replaceReducer
};
}
/***/ },
/* 24 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
exports.__esModule = true;
exports.compose = exports.applyMiddleware = exports.bindActionCreators = exports.combineReducers = exports.createStore = undefined;
var _createStore = __webpack_require__(23);
var _createStore2 = _interopRequireDefault(_createStore);
var _combineReducers = __webpack_require__(66);
var _combineReducers2 = _interopRequireDefault(_combineReducers);
var _bindActionCreators = __webpack_require__(65);
var _bindActionCreators2 = _interopRequireDefault(_bindActionCreators);
var _applyMiddleware = __webpack_require__(64);
var _applyMiddleware2 = _interopRequireDefault(_applyMiddleware);
var _compose = __webpack_require__(22);
var _compose2 = _interopRequireDefault(_compose);
var _warning = __webpack_require__(25);
var _warning2 = _interopRequireDefault(_warning);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
/*
* This is a dummy function to check if the function name has been altered by minification.
* If the function has been minified and NODE_ENV !== 'production', warn the us