gambit
Version:
A hyper-thin library to help building API driven redux apps
72 lines (52 loc) • 2.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.connectComponent = undefined;
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _reactRedux = require('react-redux');
var _forIn = require('lodash/forIn');
var _forIn2 = _interopRequireDefault(_forIn);
var _invariant = require('invariant');
var _invariant2 = _interopRequireDefault(_invariant);
var _GeneralConstants = require('./GeneralConstants');
var _GeneralConstants2 = _interopRequireDefault(_GeneralConstants);
var _dict = require('./dict');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function mapStateToProps() {
var fetch = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
var containerName = arguments[1];
return function (state, props) {
var obj = {};
(0, _forIn2.default)(fetch, function (value, key) {
(0, _invariant2.default)(typeof value.as === 'function', (0, _dict.noFunctionAs)(value.as, key, containerName));
obj[key] = value.as(state, props);
});
return obj;
};
}
function mergeProps() {
var methods = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
var containerName = arguments[1];
return function (stateProps, _ref, ownProps) {
var dispatch = _ref.dispatch;
var megaProps = (0, _extends3.default)({}, ownProps, stateProps);
var otherMethods = {};
(0, _forIn2.default)(methods, function (value, key) {
otherMethods[key] = value(dispatch, megaProps);
});
otherMethods.monitor = function (id, props, state) {
return dispatch({
type: _GeneralConstants2.default.MONITORED_VALUE_CHANGED,
id: id,
props: props,
state: state
});
};
return (0, _extends3.default)({}, megaProps, otherMethods);
};
}
var connectComponent = exports.connectComponent = function connectComponent(Component, fetch, methods, name) {
return (0, _reactRedux.connect)(mapStateToProps(fetch, name), null, mergeProps(methods, name))(Component);
};