@kabbi/react-redux-form
Version:
Create Forms Easily with React and Redux
95 lines (66 loc) • 2.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.trackable = exports.createTrack = undefined;
var _findKey = require('../utils/find-key');
var _findKey2 = _interopRequireDefault(_findKey);
var _get2 = require('../utils/get');
var _get3 = _interopRequireDefault(_get2);
var _iteratee = require('../utils/iteratee');
var _iteratee2 = _interopRequireDefault(_iteratee);
var _isMulti = require('../utils/is-multi');
var _isMulti2 = _interopRequireDefault(_isMulti);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); }
var defaultStrategy = {
get: _get3.default
};
function createTrack() {
var s = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultStrategy;
return function track(model) {
for (var _len = arguments.length, predicates = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
predicates[_key - 1] = arguments[_key];
}
var isPartial = model[0] === '.';
return function (fullState, parentModel) {
var childModel = isPartial ? model.slice(1) : model;
var state = isPartial ? s.get(fullState, parentModel) : fullState;
var _childModel$split = childModel.split(/\[\]\.?/),
_childModel$split2 = _toArray(_childModel$split),
parentModelPath = _childModel$split2[0],
childModelPaths = _childModel$split2.slice(1);
var fullPath = parentModelPath;
var subState = s.get(state, fullPath);
predicates.forEach(function (predicate, i) {
var childModelPath = childModelPaths[i];
var predicateIteratee = (0, _iteratee2.default)(predicate);
var subPath = childModelPath ? (0, _findKey2.default)(subState, predicateIteratee) + '.' + childModelPath : '' + (0, _findKey2.default)(subState, predicateIteratee);
subState = s.get(subState, subPath);
fullPath += '.' + subPath;
});
if ((0, _isMulti2.default)(childModel) && predicates.length < childModelPaths.length) {
fullPath += '[]';
}
return isPartial ? parentModel + '.' + fullPath : fullPath;
};
};
}
var track = createTrack();
function trackable(actionCreator) {
return function (model) {
for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
args[_key2 - 1] = arguments[_key2];
}
if (typeof model === 'function') {
return function (dispatch, getState) {
var modelPath = model(getState());
dispatch(actionCreator.apply(undefined, [modelPath].concat(args)));
};
}
return actionCreator.apply(undefined, [model].concat(args));
};
}
exports.default = track;
exports.createTrack = createTrack;
exports.trackable = trackable;