|
- import verifyPlainObject from '../utils/verifyPlainObject'
-
- export function defaultMergeProps(stateProps, dispatchProps, ownProps) {
- return { ...ownProps, ...stateProps, ...dispatchProps }
- }
-
- export function wrapMergePropsFunc(mergeProps) {
- return function initMergePropsProxy(
- dispatch,
- { displayName, pure, areMergedPropsEqual }
- ) {
- let hasRunOnce = false
- let mergedProps
-
- return function mergePropsProxy(stateProps, dispatchProps, ownProps) {
- const nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps)
-
- if (hasRunOnce) {
- if (!pure || !areMergedPropsEqual(nextMergedProps, mergedProps))
- mergedProps = nextMergedProps
- } else {
- hasRunOnce = true
- mergedProps = nextMergedProps
-
- if (process.env.NODE_ENV !== 'production')
- verifyPlainObject(mergedProps, displayName, 'mergeProps')
- }
-
- return mergedProps
- }
- }
- }
-
- export function whenMergePropsIsFunction(mergeProps) {
- return typeof mergeProps === 'function'
- ? wrapMergePropsFunc(mergeProps)
- : undefined
- }
-
- export function whenMergePropsIsOmitted(mergeProps) {
- return !mergeProps ? () => defaultMergeProps : undefined
- }
-
- export default [whenMergePropsIsFunction, whenMergePropsIsOmitted]
|