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.
76 lines
3.0 KiB
76 lines
3.0 KiB
"use strict"; |
|
|
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; |
|
|
|
exports.__esModule = true; |
|
exports.getDependsOnOwnProps = getDependsOnOwnProps; |
|
exports.wrapMapToPropsConstant = wrapMapToPropsConstant; |
|
exports.wrapMapToPropsFunc = wrapMapToPropsFunc; |
|
|
|
var _verifyPlainObject = _interopRequireDefault(require("../utils/verifyPlainObject")); |
|
|
|
function wrapMapToPropsConstant(getConstant) { |
|
return function initConstantSelector(dispatch, options) { |
|
var constant = getConstant(dispatch, options); |
|
|
|
function constantSelector() { |
|
return constant; |
|
} |
|
|
|
constantSelector.dependsOnOwnProps = false; |
|
return constantSelector; |
|
}; |
|
} // dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args |
|
// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine |
|
// whether mapToProps needs to be invoked when props have changed. |
|
// |
|
// A length of one signals that mapToProps does not depend on props from the parent component. |
|
// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and |
|
// therefore not reporting its length accurately.. |
|
|
|
|
|
function getDependsOnOwnProps(mapToProps) { |
|
return mapToProps.dependsOnOwnProps !== null && mapToProps.dependsOnOwnProps !== undefined ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1; |
|
} // Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction, |
|
// this function wraps mapToProps in a proxy function which does several things: |
|
// |
|
// * Detects whether the mapToProps function being called depends on props, which |
|
// is used by selectorFactory to decide if it should reinvoke on props changes. |
|
// |
|
// * On first call, handles mapToProps if returns another function, and treats that |
|
// new function as the true mapToProps for subsequent calls. |
|
// |
|
// * On first call, verifies the first result is a plain object, in order to warn |
|
// the developer that their mapToProps function is not returning a valid result. |
|
// |
|
|
|
|
|
function wrapMapToPropsFunc(mapToProps, methodName) { |
|
return function initProxySelector(dispatch, _ref) { |
|
var displayName = _ref.displayName; |
|
|
|
var proxy = function mapToPropsProxy(stateOrDispatch, ownProps) { |
|
return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch); |
|
}; // allow detectFactoryAndVerify to get ownProps |
|
|
|
|
|
proxy.dependsOnOwnProps = true; |
|
|
|
proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) { |
|
proxy.mapToProps = mapToProps; |
|
proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps); |
|
var props = proxy(stateOrDispatch, ownProps); |
|
|
|
if (typeof props === 'function') { |
|
proxy.mapToProps = props; |
|
proxy.dependsOnOwnProps = getDependsOnOwnProps(props); |
|
props = proxy(stateOrDispatch, ownProps); |
|
} |
|
|
|
if (process.env.NODE_ENV !== 'production') (0, _verifyPlainObject["default"])(props, displayName, methodName); |
|
return props; |
|
}; |
|
|
|
return proxy; |
|
}; |
|
} |