From 713284af7ffe3fcbdcd6fa6e398c725945c500e2 Mon Sep 17 00:00:00 2001 From: Taylor Mitchell-St Joseph Date: Wed, 1 Mar 2017 08:30:43 +0000 Subject: [PATCH 1/2] Added typescript definition file --- index.d.ts | 21 +++++++++++++++++++++ package.json | 3 +++ 2 files changed, 24 insertions(+) create mode 100644 index.d.ts diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..bc3023b --- /dev/null +++ b/index.d.ts @@ -0,0 +1,21 @@ +// Type definitions for redux-injector +// Project: https://github.com/randallknutson/redux-injector +// Definitions by: Taylor Mitchell-St Joseph + +import * as Redux from 'redux'; + +declare module 'redux-injector' { + + interface createInjectStoreFn { + (reducer: any, enhancer?: Redux.StoreEnhancer): Redux.Store; + (reducer: any, preloadedState: S, enhancer?: Redux.StoreEnhancer): Redux.Store; + } + + interface injectReducerFn { + (key: string, reducers: any, force?: boolean): void; + } + + const createInjectStore: createInjectStoreFn; + const injectReducer: injectReducerFn; + +} \ No newline at end of file diff --git a/package.json b/package.json index 37ce419..7e01deb 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,9 @@ "version": "0.1.0", "description": "Allows dynamically injecting reducers into a redux store at runtime.", "main": "lib/ReduxInjector.js", + "typescript": { + "definition": "index.d.ts" + }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "build": "babel ./src --ignore=*.spec.js --out-dir ./lib --presets es2015,react,stage-2", From 0839a2c78dd0f4d8005b15bef80630555256f24d Mon Sep 17 00:00:00 2001 From: Taylor Mitchell-St Joseph Date: Mon, 13 Mar 2017 15:21:44 +0000 Subject: [PATCH 2/2] Added rejectReducer functionality --- index.d.ts | 5 +++++ src/ReduxInjector.js | 10 +++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/index.d.ts b/index.d.ts index bc3023b..7a94bac 100644 --- a/index.d.ts +++ b/index.d.ts @@ -15,7 +15,12 @@ declare module 'redux-injector' { (key: string, reducers: any, force?: boolean): void; } + interface rejectReducerFn { + (key: string): void; + } + const createInjectStore: createInjectStoreFn; const injectReducer: injectReducerFn; + const rejectReducer: rejectReducerFn; } \ No newline at end of file diff --git a/src/ReduxInjector.js b/src/ReduxInjector.js index 4d3e506..6a3a9b0 100644 --- a/src/ReduxInjector.js +++ b/src/ReduxInjector.js @@ -1,5 +1,5 @@ import { createStore, combineReducers } from 'redux'; -import { set, has } from 'lodash'; +import { set, has, unset } from 'lodash'; let store = {}; let combine = combineReducers; @@ -53,3 +53,11 @@ export function injectReducer(key, reducer, force = false) { set(store.injectedReducers, key, reducer); store.replaceReducer(combineReducersRecurse(store.injectedReducers)); } + +export function rejectReducer(key) { + // If key doesn't exist, do nothing + if (!has(store.injectedReducers, key)) return; + + unset(store.injectedReducers, key); + store.replaceReducer(combineReducersRecurse(store.injectedReducers)); +} \ No newline at end of file