128 lines
5.8 KiB
JavaScript
128 lines
5.8 KiB
JavaScript
|
'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.createConnect = createConnect;
|
||
|
|
||
|
var _connectAdvanced = require('../components/connectAdvanced');
|
||
|
|
||
|
var _connectAdvanced2 = _interopRequireDefault(_connectAdvanced);
|
||
|
|
||
|
var _shallowEqual = require('../utils/shallowEqual');
|
||
|
|
||
|
var _shallowEqual2 = _interopRequireDefault(_shallowEqual);
|
||
|
|
||
|
var _mapDispatchToProps = require('./mapDispatchToProps');
|
||
|
|
||
|
var _mapDispatchToProps2 = _interopRequireDefault(_mapDispatchToProps);
|
||
|
|
||
|
var _mapStateToProps = require('./mapStateToProps');
|
||
|
|
||
|
var _mapStateToProps2 = _interopRequireDefault(_mapStateToProps);
|
||
|
|
||
|
var _mergeProps = require('./mergeProps');
|
||
|
|
||
|
var _mergeProps2 = _interopRequireDefault(_mergeProps);
|
||
|
|
||
|
var _selectorFactory = require('./selectorFactory');
|
||
|
|
||
|
var _selectorFactory2 = _interopRequireDefault(_selectorFactory);
|
||
|
|
||
|
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; }
|
||
|
|
||
|
/*
|
||
|
connect is a facade over connectAdvanced. It turns its args into a compatible
|
||
|
selectorFactory, which has the signature:
|
||
|
|
||
|
(dispatch, options) => (nextState, nextOwnProps) => nextFinalProps
|
||
|
|
||
|
connect passes its args to connectAdvanced as options, which will in turn pass them to
|
||
|
selectorFactory each time a Connect component instance is instantiated or hot reloaded.
|
||
|
|
||
|
selectorFactory returns a final props selector from its mapStateToProps,
|
||
|
mapStateToPropsFactories, mapDispatchToProps, mapDispatchToPropsFactories, mergeProps,
|
||
|
mergePropsFactories, and pure args.
|
||
|
|
||
|
The resulting final props selector is called by the Connect component instance whenever
|
||
|
it receives new props or store state.
|
||
|
*/
|
||
|
|
||
|
function match(arg, factories, name) {
|
||
|
for (var i = factories.length - 1; i >= 0; i--) {
|
||
|
var result = factories[i](arg);
|
||
|
if (result) return result;
|
||
|
}
|
||
|
|
||
|
return function (dispatch, options) {
|
||
|
throw new Error('Invalid value of type ' + typeof arg + ' for ' + name + ' argument when connecting component ' + options.wrappedComponentName + '.');
|
||
|
};
|
||
|
}
|
||
|
|
||
|
function strictEqual(a, b) {
|
||
|
return a === b;
|
||
|
}
|
||
|
|
||
|
// createConnect with default args builds the 'official' connect behavior. Calling it with
|
||
|
// different options opens up some testing and extensibility scenarios
|
||
|
function createConnect() {
|
||
|
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
||
|
_ref$connectHOC = _ref.connectHOC,
|
||
|
connectHOC = _ref$connectHOC === undefined ? _connectAdvanced2.default : _ref$connectHOC,
|
||
|
_ref$mapStateToPropsF = _ref.mapStateToPropsFactories,
|
||
|
mapStateToPropsFactories = _ref$mapStateToPropsF === undefined ? _mapStateToProps2.default : _ref$mapStateToPropsF,
|
||
|
_ref$mapDispatchToPro = _ref.mapDispatchToPropsFactories,
|
||
|
mapDispatchToPropsFactories = _ref$mapDispatchToPro === undefined ? _mapDispatchToProps2.default : _ref$mapDispatchToPro,
|
||
|
_ref$mergePropsFactor = _ref.mergePropsFactories,
|
||
|
mergePropsFactories = _ref$mergePropsFactor === undefined ? _mergeProps2.default : _ref$mergePropsFactor,
|
||
|
_ref$selectorFactory = _ref.selectorFactory,
|
||
|
selectorFactory = _ref$selectorFactory === undefined ? _selectorFactory2.default : _ref$selectorFactory;
|
||
|
|
||
|
return function connect(mapStateToProps, mapDispatchToProps, mergeProps) {
|
||
|
var _ref2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},
|
||
|
_ref2$pure = _ref2.pure,
|
||
|
pure = _ref2$pure === undefined ? true : _ref2$pure,
|
||
|
_ref2$areStatesEqual = _ref2.areStatesEqual,
|
||
|
areStatesEqual = _ref2$areStatesEqual === undefined ? strictEqual : _ref2$areStatesEqual,
|
||
|
_ref2$areOwnPropsEqua = _ref2.areOwnPropsEqual,
|
||
|
areOwnPropsEqual = _ref2$areOwnPropsEqua === undefined ? _shallowEqual2.default : _ref2$areOwnPropsEqua,
|
||
|
_ref2$areStatePropsEq = _ref2.areStatePropsEqual,
|
||
|
areStatePropsEqual = _ref2$areStatePropsEq === undefined ? _shallowEqual2.default : _ref2$areStatePropsEq,
|
||
|
_ref2$areMergedPropsE = _ref2.areMergedPropsEqual,
|
||
|
areMergedPropsEqual = _ref2$areMergedPropsE === undefined ? _shallowEqual2.default : _ref2$areMergedPropsE,
|
||
|
extraOptions = _objectWithoutProperties(_ref2, ['pure', 'areStatesEqual', 'areOwnPropsEqual', 'areStatePropsEqual', 'areMergedPropsEqual']);
|
||
|
|
||
|
var initMapStateToProps = match(mapStateToProps, mapStateToPropsFactories, 'mapStateToProps');
|
||
|
var initMapDispatchToProps = match(mapDispatchToProps, mapDispatchToPropsFactories, 'mapDispatchToProps');
|
||
|
var initMergeProps = match(mergeProps, mergePropsFactories, 'mergeProps');
|
||
|
|
||
|
return connectHOC(selectorFactory, _extends({
|
||
|
// used in error messages
|
||
|
methodName: 'connect',
|
||
|
|
||
|
// used to compute Connect's displayName from the wrapped component's displayName.
|
||
|
getDisplayName: function getDisplayName(name) {
|
||
|
return 'Connect(' + name + ')';
|
||
|
},
|
||
|
|
||
|
// if mapStateToProps is falsy, the Connect component doesn't subscribe to store state changes
|
||
|
shouldHandleStateChanges: Boolean(mapStateToProps),
|
||
|
|
||
|
// passed through to selectorFactory
|
||
|
initMapStateToProps: initMapStateToProps,
|
||
|
initMapDispatchToProps: initMapDispatchToProps,
|
||
|
initMergeProps: initMergeProps,
|
||
|
pure: pure,
|
||
|
areStatesEqual: areStatesEqual,
|
||
|
areOwnPropsEqual: areOwnPropsEqual,
|
||
|
areStatePropsEqual: areStatePropsEqual,
|
||
|
areMergedPropsEqual: areMergedPropsEqual
|
||
|
|
||
|
}, extraOptions));
|
||
|
};
|
||
|
}
|
||
|
|
||
|
exports.default = createConnect();
|