From 03956406fb85499212fcc6c8b3f3d3cb7c48c7a8 Mon Sep 17 00:00:00 2001 From: Johan Lindskogen Date: Tue, 6 Jul 2021 07:44:50 +0000 Subject: [PATCH] Add types for mergeProps file --- src/connect/mergeProps.js | 44 -------------------------------- src/connect/mergeProps.ts | 53 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 44 deletions(-) delete mode 100644 src/connect/mergeProps.js create mode 100644 src/connect/mergeProps.ts diff --git a/src/connect/mergeProps.js b/src/connect/mergeProps.js deleted file mode 100644 index ca21ea0a6..000000000 --- a/src/connect/mergeProps.js +++ /dev/null @@ -1,44 +0,0 @@ -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] diff --git a/src/connect/mergeProps.ts b/src/connect/mergeProps.ts new file mode 100644 index 000000000..a6aeac91d --- /dev/null +++ b/src/connect/mergeProps.ts @@ -0,0 +1,53 @@ +import { Dispatch } from 'redux' +import verifyPlainObject from '../utils/verifyPlainObject' + +type MergeProps = (stateProps: TStateProps, dispatchProps: TDispatchProps, ownProps: TOwnProps) => TMergedProps + +export function defaultMergeProps(stateProps: TStateProps, dispatchProps: TDispatchProps, ownProps: TOwnProps) { + return { ...ownProps, ...stateProps, ...dispatchProps } +} + +interface InitMergeOptions { + displayName: string; + pure?: boolean; + areMergedPropsEqual: (a: any, b: any) => boolean; +} + +export function wrapMergePropsFunc(mergeProps: MergeProps): (dispatch: Dispatch, options: InitMergeOptions) => MergeProps { + return function initMergePropsProxy( + dispatch, + { displayName, pure, areMergedPropsEqual } + ) { + let hasRunOnce = false + let mergedProps: TMergedProps + + return function mergePropsProxy(stateProps: TStateProps, dispatchProps: TDispatchProps, ownProps: TOwnProps) { + 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: MergeProps) { + return typeof mergeProps === 'function' + ? wrapMergePropsFunc(mergeProps) + : undefined +} + +export function whenMergePropsIsOmitted(mergeProps?: MergeProps) { + return !mergeProps ? () => defaultMergeProps : undefined +} + +export default [whenMergePropsIsFunction, whenMergePropsIsOmitted] as const