From d9200e1e24be129d5b7ca9959d79a5ed34746f74 Mon Sep 17 00:00:00 2001 From: tony-go Date: Wed, 7 Jul 2021 22:07:52 +0200 Subject: [PATCH 1/4] chore(mapDispatchToProps): port to typescript --- ...apDispatchToProps.js => mapDispatchToProps.ts} | 15 +++++++++++---- src/connect/wrapMapToProps.ts | 10 ++++++++-- src/utils/bindActionCreators.ts | 2 +- 3 files changed, 20 insertions(+), 7 deletions(-) rename src/connect/{mapDispatchToProps.js => mapDispatchToProps.ts} (57%) diff --git a/src/connect/mapDispatchToProps.js b/src/connect/mapDispatchToProps.ts similarity index 57% rename from src/connect/mapDispatchToProps.js rename to src/connect/mapDispatchToProps.ts index ee393abff..53b6f506f 100644 --- a/src/connect/mapDispatchToProps.js +++ b/src/connect/mapDispatchToProps.ts @@ -1,21 +1,28 @@ +import { ActionCreator, ActionCreatorsMapObject, Dispatch } from 'redux' import bindActionCreators from '../utils/bindActionCreators' import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps' -export function whenMapDispatchToPropsIsFunction(mapDispatchToProps) { +export function whenMapDispatchToPropsIsFunction( + mapDispatchToProps: ActionCreatorsMapObject | ActionCreator +) { return typeof mapDispatchToProps === 'function' ? wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps') : undefined } -export function whenMapDispatchToPropsIsMissing(mapDispatchToProps) { +export function whenMapDispatchToPropsIsMissing( + mapDispatchToProps: ActionCreatorsMapObject | ActionCreator +) { return !mapDispatchToProps ? wrapMapToPropsConstant((dispatch) => ({ dispatch })) : undefined } -export function whenMapDispatchToPropsIsObject(mapDispatchToProps) { +export function whenMapDispatchToPropsIsObject( + mapDispatchToProps: ActionCreatorsMapObject | ActionCreator +) { return mapDispatchToProps && typeof mapDispatchToProps === 'object' - ? wrapMapToPropsConstant((dispatch) => + ? wrapMapToPropsConstant((dispatch: Dispatch) => bindActionCreators(mapDispatchToProps, dispatch) ) : undefined diff --git a/src/connect/wrapMapToProps.ts b/src/connect/wrapMapToProps.ts index bb11089dc..be02a4918 100644 --- a/src/connect/wrapMapToProps.ts +++ b/src/connect/wrapMapToProps.ts @@ -1,4 +1,4 @@ -import { Dispatch } from 'redux' +import { ActionCreatorsMapObject, Dispatch, ActionCreator } from 'redux' import { FixTypeLater } from '../types' import verifyPlainObject from '../utils/verifyPlainObject' @@ -20,7 +20,13 @@ export function wrapMapToPropsConstant( // could be a dispatch function in some cases (ex: whenMapDispatchToPropsIsMissing) // and a state object in some others (ex: whenMapStateToPropsIsMissing) // eslint-disable-next-line no-unused-vars - getConstant: (dispatch: Dispatch) => { dispatch?: Dispatch } + getConstant: (dispatch: Dispatch) => + | { + dispatch?: Dispatch + dependsOnOwnProps?: boolean + } + | ActionCreatorsMapObject + | ActionCreator ) { return function initConstantSelector(dispatch: Dispatch) { const constant = getConstant(dispatch) diff --git a/src/utils/bindActionCreators.ts b/src/utils/bindActionCreators.ts index 3ab75f823..f1901a8c9 100644 --- a/src/utils/bindActionCreators.ts +++ b/src/utils/bindActionCreators.ts @@ -17,7 +17,7 @@ function bindActionCreator( export default function bindActionCreators( actionCreators: ActionCreator | ActionCreatorsMapObject, dispatch: Dispatch -) { +): ActionCreatorsMapObject | ActionCreator { if (typeof actionCreators === 'function') { return bindActionCreator(actionCreators, dispatch) } From b1e300f97325ad6ca2d182a96fd460445c0e4257 Mon Sep 17 00:00:00 2001 From: tony-go Date: Wed, 7 Jul 2021 22:24:50 +0200 Subject: [PATCH 2/4] chore: resolve conflicts --- src/utils/bindActionCreators.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/utils/bindActionCreators.ts b/src/utils/bindActionCreators.ts index f1901a8c9..bb13fd108 100644 --- a/src/utils/bindActionCreators.ts +++ b/src/utils/bindActionCreators.ts @@ -15,14 +15,11 @@ function bindActionCreator( } export default function bindActionCreators( - actionCreators: ActionCreator | ActionCreatorsMapObject, + actionCreators: ActionCreatorsMapObject, dispatch: Dispatch -): ActionCreatorsMapObject | ActionCreator { - if (typeof actionCreators === 'function') { - return bindActionCreator(actionCreators, dispatch) - } - +): ActionCreatorsMapObject { const boundActionCreators: ActionCreatorsMapObject = {} + for (const key in actionCreators) { const actionCreator = actionCreators[key] if (typeof actionCreator === 'function') { From 5331a1e743e63a3f71c4c77f3d5df3ec70e49f63 Mon Sep 17 00:00:00 2001 From: tony-go Date: Thu, 8 Jul 2021 08:50:29 +0200 Subject: [PATCH 3/4] fix: types --- src/connect/mapDispatchToProps.ts | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/connect/mapDispatchToProps.ts b/src/connect/mapDispatchToProps.ts index 53b6f506f..d6f779d10 100644 --- a/src/connect/mapDispatchToProps.ts +++ b/src/connect/mapDispatchToProps.ts @@ -1,25 +1,29 @@ -import { ActionCreator, ActionCreatorsMapObject, Dispatch } from 'redux' +import { ActionCreatorsMapObject, Dispatch } from 'redux' import bindActionCreators from '../utils/bindActionCreators' -import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps' +import { + MapToProps, + wrapMapToPropsConstant, + wrapMapToPropsFunc, +} from './wrapMapToProps' export function whenMapDispatchToPropsIsFunction( - mapDispatchToProps: ActionCreatorsMapObject | ActionCreator + mapDispatchToProps: ActionCreatorsMapObject | MapToProps ) { return typeof mapDispatchToProps === 'function' ? wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps') : undefined } -export function whenMapDispatchToPropsIsMissing( - mapDispatchToProps: ActionCreatorsMapObject | ActionCreator -) { +export function whenMapDispatchToPropsIsMissing(mapDispatchToProps: undefined) { return !mapDispatchToProps - ? wrapMapToPropsConstant((dispatch) => ({ dispatch })) + ? wrapMapToPropsConstant((dispatch: Dispatch) => ({ + dispatch, + })) : undefined } export function whenMapDispatchToPropsIsObject( - mapDispatchToProps: ActionCreatorsMapObject | ActionCreator + mapDispatchToProps: ActionCreatorsMapObject ) { return mapDispatchToProps && typeof mapDispatchToProps === 'object' ? wrapMapToPropsConstant((dispatch: Dispatch) => From eb877352d4d7595e901e9d9fde492f710ca85169 Mon Sep 17 00:00:00 2001 From: tony-go Date: Thu, 8 Jul 2021 08:57:24 +0200 Subject: [PATCH 4/4] fix: add FixTypeLater --- src/connect/mapDispatchToProps.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/connect/mapDispatchToProps.ts b/src/connect/mapDispatchToProps.ts index d6f779d10..aee587812 100644 --- a/src/connect/mapDispatchToProps.ts +++ b/src/connect/mapDispatchToProps.ts @@ -1,13 +1,10 @@ import { ActionCreatorsMapObject, Dispatch } from 'redux' +import { FixTypeLater } from '../types' import bindActionCreators from '../utils/bindActionCreators' -import { - MapToProps, - wrapMapToPropsConstant, - wrapMapToPropsFunc, -} from './wrapMapToProps' +import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps' export function whenMapDispatchToPropsIsFunction( - mapDispatchToProps: ActionCreatorsMapObject | MapToProps + mapDispatchToProps: ActionCreatorsMapObject | FixTypeLater ) { return typeof mapDispatchToProps === 'function' ? wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps')