From 7ac5ed4bada1bb895d9051a3f6f6c928ce671164 Mon Sep 17 00:00:00 2001 From: Jeroen Vannevel Date: Sat, 26 Jun 2021 18:08:20 +0100 Subject: [PATCH 01/12] useStore & useReduxContext --- src/hooks/{useReduxContext.js => useReduxContext.ts} | 0 src/hooks/{useStore.js => useStore.ts} | 7 +++++-- 2 files changed, 5 insertions(+), 2 deletions(-) rename src/hooks/{useReduxContext.js => useReduxContext.ts} (100%) rename src/hooks/{useStore.js => useStore.ts} (79%) diff --git a/src/hooks/useReduxContext.js b/src/hooks/useReduxContext.ts similarity index 100% rename from src/hooks/useReduxContext.js rename to src/hooks/useReduxContext.ts diff --git a/src/hooks/useStore.js b/src/hooks/useStore.ts similarity index 79% rename from src/hooks/useStore.js rename to src/hooks/useStore.ts index 0f0eb83bc..ccfd9415c 100644 --- a/src/hooks/useStore.js +++ b/src/hooks/useStore.ts @@ -1,5 +1,7 @@ import { useContext } from 'react' +import { Action, AnyAction, Store } from 'redux' import { ReactReduxContext } from '../components/Context' +import type { FixTypeLater } from '../types' import { useReduxContext as useDefaultReduxContext } from './useReduxContext' /** @@ -8,13 +10,14 @@ import { useReduxContext as useDefaultReduxContext } from './useReduxContext' * @param {React.Context} [context=ReactReduxContext] Context passed to your ``. * @returns {Function} A `useStore` hook bound to the specified context. */ -export function createStoreHook(context = ReactReduxContext) { + +export function createStoreHook(context = ReactReduxContext) { const useReduxContext = context === ReactReduxContext ? useDefaultReduxContext : () => useContext(context) return function useStore() { - const { store } = useReduxContext() + const { store } = useReduxContext()! return store } } From 351a5cf0b2c6d9d6a824aaf901740d5e5900cba6 Mon Sep 17 00:00:00 2001 From: Jeroen Vannevel Date: Sat, 26 Jun 2021 18:15:50 +0100 Subject: [PATCH 02/12] useDispatch --- src/hooks/{useDispatch.js => useDispatch.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/hooks/{useDispatch.js => useDispatch.ts} (100%) diff --git a/src/hooks/useDispatch.js b/src/hooks/useDispatch.ts similarity index 100% rename from src/hooks/useDispatch.js rename to src/hooks/useDispatch.ts From 05a7a79393e62f1729ce8009578582dacc2f154c Mon Sep 17 00:00:00 2001 From: Jeroen Vannevel Date: Sat, 26 Jun 2021 18:17:11 +0100 Subject: [PATCH 03/12] warning.ts --- src/utils/{warning.js => warning.ts} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/utils/{warning.js => warning.ts} (92%) diff --git a/src/utils/warning.js b/src/utils/warning.ts similarity index 92% rename from src/utils/warning.js rename to src/utils/warning.ts index 0fdfb0257..92d3d638b 100644 --- a/src/utils/warning.js +++ b/src/utils/warning.ts @@ -4,7 +4,7 @@ * @param {String} message The warning message. * @returns {void} */ -export default function warning(message) { +export default function warning(message: string) { /* eslint-disable no-console */ if (typeof console !== 'undefined' && typeof console.error === 'function') { console.error(message) From 214074457535487ad5c4f06f504a4905be9db147 Mon Sep 17 00:00:00 2001 From: Jeroen Vannevel Date: Sat, 26 Jun 2021 18:17:52 +0100 Subject: [PATCH 04/12] isPlainObject --- src/utils/{isPlainObject.js => isPlainObject.ts} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/utils/{isPlainObject.js => isPlainObject.ts} (88%) diff --git a/src/utils/isPlainObject.js b/src/utils/isPlainObject.ts similarity index 88% rename from src/utils/isPlainObject.js rename to src/utils/isPlainObject.ts index 3c2ee2faf..2157ea089 100644 --- a/src/utils/isPlainObject.js +++ b/src/utils/isPlainObject.ts @@ -2,7 +2,7 @@ * @param {any} obj The object to inspect. * @returns {boolean} True if the argument appears to be a plain object. */ -export default function isPlainObject(obj) { +export default function isPlainObject(obj: unknown) { if (typeof obj !== 'object' || obj === null) return false let proto = Object.getPrototypeOf(obj) From e961d2320e6e21073e30c9adb9f41fa11529620d Mon Sep 17 00:00:00 2001 From: Jeroen Vannevel Date: Sat, 26 Jun 2021 18:18:22 +0100 Subject: [PATCH 05/12] verifyPlainObject --- src/utils/{verifyPlainObject.js => verifyPlainObject.ts} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/utils/{verifyPlainObject.js => verifyPlainObject.ts} (69%) diff --git a/src/utils/verifyPlainObject.js b/src/utils/verifyPlainObject.ts similarity index 69% rename from src/utils/verifyPlainObject.js rename to src/utils/verifyPlainObject.ts index 8e98b39c2..2a8823dc9 100644 --- a/src/utils/verifyPlainObject.js +++ b/src/utils/verifyPlainObject.ts @@ -1,7 +1,7 @@ import isPlainObject from './isPlainObject' import warning from './warning' -export default function verifyPlainObject(value, displayName, methodName) { +export default function verifyPlainObject(value: unknown, displayName: string, methodName: string) { if (!isPlainObject(value)) { warning( `${methodName}() in ${displayName} must return a plain object. Instead received ${value}.` From 7f5756ba1366b15d40254282efeafb3c3828473c Mon Sep 17 00:00:00 2001 From: Jeroen Vannevel Date: Sat, 26 Jun 2021 18:18:40 +0100 Subject: [PATCH 06/12] useIsomorphicLayoutEffect --- ...{useIsomorphicLayoutEffect.js => useIsomorphicLayoutEffect.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/utils/{useIsomorphicLayoutEffect.js => useIsomorphicLayoutEffect.ts} (100%) diff --git a/src/utils/useIsomorphicLayoutEffect.js b/src/utils/useIsomorphicLayoutEffect.ts similarity index 100% rename from src/utils/useIsomorphicLayoutEffect.js rename to src/utils/useIsomorphicLayoutEffect.ts From ab3b6a29c37d6149a5071deca02fad2d4128482d Mon Sep 17 00:00:00 2001 From: Jeroen Vannevel Date: Sat, 26 Jun 2021 18:18:56 +0100 Subject: [PATCH 07/12] useIsomorphicLayoutEffect.native --- ...LayoutEffect.native.js => useIsomorphicLayoutEffect.native.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/utils/{useIsomorphicLayoutEffect.native.js => useIsomorphicLayoutEffect.native.ts} (100%) diff --git a/src/utils/useIsomorphicLayoutEffect.native.js b/src/utils/useIsomorphicLayoutEffect.native.ts similarity index 100% rename from src/utils/useIsomorphicLayoutEffect.native.js rename to src/utils/useIsomorphicLayoutEffect.native.ts From de89335394adc9ae40bddb1312d00559759ad535 Mon Sep 17 00:00:00 2001 From: Jeroen Vannevel Date: Sat, 26 Jun 2021 18:24:08 +0100 Subject: [PATCH 08/12] shallowEqual --- src/utils/{shallowEqual.js => shallowEqual.ts} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename src/utils/{shallowEqual.js => shallowEqual.ts} (86%) diff --git a/src/utils/shallowEqual.js b/src/utils/shallowEqual.ts similarity index 86% rename from src/utils/shallowEqual.js rename to src/utils/shallowEqual.ts index a2cbe04a3..e50c6be52 100644 --- a/src/utils/shallowEqual.js +++ b/src/utils/shallowEqual.ts @@ -1,4 +1,4 @@ -function is(x, y) { +function is(x: unknown, y: unknown) { if (x === y) { return x !== 0 || y !== 0 || 1 / x === 1 / y } else { @@ -6,7 +6,7 @@ function is(x, y) { } } -export default function shallowEqual(objA, objB) { +export default function shallowEqual(objA: any, objB: any) { if (is(objA, objB)) return true if ( From 8f4cd39447ba3c2a49239153e180225c74d2eebf Mon Sep 17 00:00:00 2001 From: Jeroen Vannevel Date: Sat, 26 Jun 2021 18:24:43 +0100 Subject: [PATCH 09/12] unnecessary type params --- src/hooks/useStore.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/hooks/useStore.ts b/src/hooks/useStore.ts index ccfd9415c..cd486b460 100644 --- a/src/hooks/useStore.ts +++ b/src/hooks/useStore.ts @@ -1,7 +1,5 @@ import { useContext } from 'react' -import { Action, AnyAction, Store } from 'redux' import { ReactReduxContext } from '../components/Context' -import type { FixTypeLater } from '../types' import { useReduxContext as useDefaultReduxContext } from './useReduxContext' /** @@ -11,7 +9,7 @@ import { useReduxContext as useDefaultReduxContext } from './useReduxContext' * @returns {Function} A `useStore` hook bound to the specified context. */ -export function createStoreHook(context = ReactReduxContext) { +export function createStoreHook(context = ReactReduxContext) { const useReduxContext = context === ReactReduxContext ? useDefaultReduxContext From 14cf3e68b4e77e4d0f4805993eadbee35747245c Mon Sep 17 00:00:00 2001 From: Jeroen Vannevel Date: Sat, 26 Jun 2021 18:29:44 +0100 Subject: [PATCH 10/12] batch --- src/utils/{batch.js => batch.ts} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename src/utils/{batch.js => batch.ts} (65%) diff --git a/src/utils/batch.js b/src/utils/batch.ts similarity index 65% rename from src/utils/batch.js rename to src/utils/batch.ts index cf39ca940..134e635f9 100644 --- a/src/utils/batch.js +++ b/src/utils/batch.ts @@ -1,12 +1,12 @@ // Default to a dummy "batch" implementation that just runs the callback -function defaultNoopBatch(callback) { +function defaultNoopBatch(callback: () => void) { callback() } let batch = defaultNoopBatch // Allow injecting another batching function later -export const setBatch = (newBatch) => (batch = newBatch) +export const setBatch = (newBatch: (callback: () => void) => void) => (batch = newBatch) // Supply a getter just to skip dealing with ESM bindings export const getBatch = () => batch From aa3fbe3e824607df87fabed0ba7cb002bb24ed89 Mon Sep 17 00:00:00 2001 From: Jeroen Vannevel Date: Sat, 26 Jun 2021 18:38:15 +0100 Subject: [PATCH 11/12] bindActionCreators --- src/utils/bindActionCreators.js | 10 ---------- src/utils/bindActionCreators.ts | 25 +++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 10 deletions(-) delete mode 100644 src/utils/bindActionCreators.js create mode 100644 src/utils/bindActionCreators.ts diff --git a/src/utils/bindActionCreators.js b/src/utils/bindActionCreators.js deleted file mode 100644 index 3e641d1c7..000000000 --- a/src/utils/bindActionCreators.js +++ /dev/null @@ -1,10 +0,0 @@ -export default function bindActionCreators(actionCreators, dispatch) { - const boundActionCreators = {} - for (const key in actionCreators) { - const actionCreator = actionCreators[key] - if (typeof actionCreator === 'function') { - boundActionCreators[key] = (...args) => dispatch(actionCreator(...args)) - } - } - return boundActionCreators -} diff --git a/src/utils/bindActionCreators.ts b/src/utils/bindActionCreators.ts new file mode 100644 index 000000000..5b7ff86c5 --- /dev/null +++ b/src/utils/bindActionCreators.ts @@ -0,0 +1,25 @@ +import { ActionCreator, ActionCreatorsMapObject, AnyAction, Dispatch } from "redux" + +function bindActionCreator( + actionCreator: ActionCreator, + dispatch: Dispatch +) { + return function (this: any, ...args: any[]) { + return dispatch(actionCreator.apply(this, args)) + } +} + +export default function bindActionCreators(actionCreators: ActionCreator | ActionCreatorsMapObject, dispatch: Dispatch) { + if (typeof actionCreators === 'function') { + return bindActionCreator(actionCreators, dispatch) + } + + const boundActionCreators: ActionCreatorsMapObject = {} + for (const key in actionCreators) { + const actionCreator = actionCreators[key] + if (typeof actionCreator === 'function') { + boundActionCreators[key] = (...args) => dispatch(actionCreator(...args)) + } + } + return boundActionCreators +} \ No newline at end of file From 0badcdec03c4ec57c7fb05be3a5094978ae5db2d Mon Sep 17 00:00:00 2001 From: Jeroen Vannevel Date: Sat, 26 Jun 2021 18:41:53 +0100 Subject: [PATCH 12/12] minor styling --- src/hooks/useStore.ts | 1 - src/utils/bindActionCreators.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/hooks/useStore.ts b/src/hooks/useStore.ts index cd486b460..85fd238d8 100644 --- a/src/hooks/useStore.ts +++ b/src/hooks/useStore.ts @@ -8,7 +8,6 @@ import { useReduxContext as useDefaultReduxContext } from './useReduxContext' * @param {React.Context} [context=ReactReduxContext] Context passed to your ``. * @returns {Function} A `useStore` hook bound to the specified context. */ - export function createStoreHook(context = ReactReduxContext) { const useReduxContext = context === ReactReduxContext diff --git a/src/utils/bindActionCreators.ts b/src/utils/bindActionCreators.ts index 5b7ff86c5..d6d509809 100644 --- a/src/utils/bindActionCreators.ts +++ b/src/utils/bindActionCreators.ts @@ -22,4 +22,4 @@ export default function bindActionCreators(actionCreators: ActionCreator | } } return boundActionCreators -} \ No newline at end of file +}