UNPKG

@kabbi/react-redux-form

Version:
135 lines (92 loc) 3.48 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.clearGetFormCache = undefined; exports.getFormStateKey = getFormStateKey; var _get = require('../utils/get'); var _get2 = _interopRequireDefault(_get); var _isPlainObject = require('../utils/is-plain-object'); var _isPlainObject2 = _interopRequireDefault(_isPlainObject); var _pathStartsWith = require('../utils/path-starts-with'); var _pathStartsWith2 = _interopRequireDefault(_pathStartsWith); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var defaultStrategy = { get: _get2.default, keys: function keys(state) { return Object.keys(state); }, isObject: function isObject(state) { return (0, _isPlainObject2.default)(state); } }; function joinPaths() { for (var _len = arguments.length, paths = Array(_len), _key = 0; _key < _len; _key++) { paths[_key] = arguments[_key]; } return paths.filter(function (path) { return !!path && path.length; }).join('.'); } function getFormStateKey(state, model) { var s = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultStrategy; var currentPath = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ''; var deepCandidateKeys = []; var result = null; s.keys(state).some(function (key) { var subState = s.get(state, key); if (subState && s.get(subState, '$form')) { var subStateModel = s.get(subState, '$form.model'); if ((0, _pathStartsWith2.default)(model, subStateModel) || subStateModel === '') { var localPath = (0, _pathStartsWith.pathDifference)(model, subStateModel); var resultPath = [currentPath, key]; var currentState = subState; localPath.every(function (segment) { if (s.get(currentState, segment) && s.get(currentState, segment + '.$form')) { currentState = s.get(currentState, segment); resultPath.push(segment); return true; } return false; }); result = joinPaths.apply(undefined, resultPath); return true; } return false; } if (s.isObject(subState)) { deepCandidateKeys.push(key); } return false; }); if (result) return result; deepCandidateKeys.some(function (key) { result = getFormStateKey(s.get(state, key), model, s, joinPaths(currentPath, key)); return !!result; }); if (result) return result; return null; } var formStateKeyCache = {}; var clearGetFormCache = exports.clearGetFormCache = function clearGetFormCache() { return formStateKeyCache = {}; }; // eslint-disable-line no-return-assign var getFormStateKeyCached = function () { return function (state, modelString) { var s = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultStrategy; if (formStateKeyCache[modelString]) return formStateKeyCache[modelString]; var result = getFormStateKey(state, modelString, s); formStateKeyCache[modelString] = result; // eslint-disable-line no-return-assign return result; }; }(); function getForm(state, modelString) { var s = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultStrategy; var formStateKey = getFormStateKeyCached(state, modelString, s); if (!formStateKey) { return null; } var form = s.get(state, formStateKey); return form; } exports.default = getForm;