You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
4.9 KiB
99 lines
4.9 KiB
import _extends from "@babel/runtime/helpers/esm/extends"; |
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; |
|
var _excluded = ["pure", "areStatesEqual", "areOwnPropsEqual", "areStatePropsEqual", "areMergedPropsEqual"]; |
|
import connectAdvanced from '../components/connectAdvanced'; |
|
import shallowEqual from '../utils/shallowEqual'; |
|
import defaultMapDispatchToPropsFactories from './mapDispatchToProps'; |
|
import defaultMapStateToPropsFactories from './mapStateToProps'; |
|
import defaultMergePropsFactories from './mergeProps'; |
|
import defaultSelectorFactory from './selectorFactory'; |
|
/* |
|
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 |
|
|
|
|
|
export function createConnect(_temp) { |
|
var _ref = _temp === void 0 ? {} : _temp, |
|
_ref$connectHOC = _ref.connectHOC, |
|
connectHOC = _ref$connectHOC === void 0 ? connectAdvanced : _ref$connectHOC, |
|
_ref$mapStateToPropsF = _ref.mapStateToPropsFactories, |
|
mapStateToPropsFactories = _ref$mapStateToPropsF === void 0 ? defaultMapStateToPropsFactories : _ref$mapStateToPropsF, |
|
_ref$mapDispatchToPro = _ref.mapDispatchToPropsFactories, |
|
mapDispatchToPropsFactories = _ref$mapDispatchToPro === void 0 ? defaultMapDispatchToPropsFactories : _ref$mapDispatchToPro, |
|
_ref$mergePropsFactor = _ref.mergePropsFactories, |
|
mergePropsFactories = _ref$mergePropsFactor === void 0 ? defaultMergePropsFactories : _ref$mergePropsFactor, |
|
_ref$selectorFactory = _ref.selectorFactory, |
|
selectorFactory = _ref$selectorFactory === void 0 ? defaultSelectorFactory : _ref$selectorFactory; |
|
|
|
return function connect(mapStateToProps, mapDispatchToProps, mergeProps, _ref2) { |
|
if (_ref2 === void 0) { |
|
_ref2 = {}; |
|
} |
|
|
|
var _ref3 = _ref2, |
|
_ref3$pure = _ref3.pure, |
|
pure = _ref3$pure === void 0 ? true : _ref3$pure, |
|
_ref3$areStatesEqual = _ref3.areStatesEqual, |
|
areStatesEqual = _ref3$areStatesEqual === void 0 ? strictEqual : _ref3$areStatesEqual, |
|
_ref3$areOwnPropsEqua = _ref3.areOwnPropsEqual, |
|
areOwnPropsEqual = _ref3$areOwnPropsEqua === void 0 ? shallowEqual : _ref3$areOwnPropsEqua, |
|
_ref3$areStatePropsEq = _ref3.areStatePropsEqual, |
|
areStatePropsEqual = _ref3$areStatePropsEq === void 0 ? shallowEqual : _ref3$areStatePropsEq, |
|
_ref3$areMergedPropsE = _ref3.areMergedPropsEqual, |
|
areMergedPropsEqual = _ref3$areMergedPropsE === void 0 ? shallowEqual : _ref3$areMergedPropsE, |
|
extraOptions = _objectWithoutPropertiesLoose(_ref3, _excluded); |
|
|
|
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)); |
|
}; |
|
} |
|
export default /*#__PURE__*/createConnect(); |