50 lines
1.3 KiB
JavaScript
50 lines
1.3 KiB
JavaScript
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
|
|
]
|