@@ -2,6 +2,7 @@ import Connector from './connector';
22import invariant from 'invariant' ;
33import { createStore , applyMiddleware , compose , combineReducers } from 'redux' ;
44import digestMiddleware from './digestMiddleware' ;
5+ import wrapStore from './storeWrapper' ;
56
67import curry from 'lodash.curry' ;
78import isFunction from 'lodash.isfunction' ;
@@ -20,6 +21,11 @@ export default function ngReduxProvider() {
2021 let _storeEnhancers = undefined ;
2122 let _initialState = undefined ;
2223 let _reducerIsObject = undefined ;
24+ let _providedStore = undefined ;
25+
26+ this . provideStore = ( store ) => {
27+ _providedStore = store ;
28+ }
2329
2430 this . createStoreWith = ( reducer , middlewares , storeEnhancers , initialState ) => {
2531 invariant (
@@ -42,45 +48,56 @@ export default function ngReduxProvider() {
4248 } ;
4349
4450 this . $get = ( $injector ) => {
45- const resolveMiddleware = middleware => isString ( middleware )
46- ? $injector . get ( middleware )
47- : middleware ;
51+ if ( _providedStore ) {
52+ const emptyStore = createNgReduxStore ( $injector , [ ] , [ ] , state => state , undefined ) ;
4853
49- const resolvedMiddleware = map ( _middlewares , resolveMiddleware ) ;
54+ return wrapStore ( _providedStore , emptyStore ) ;
55+ }
5056
51- const resolveStoreEnhancer = storeEnhancer => isString ( storeEnhancer )
52- ? $injector . get ( storeEnhancer )
53- : storeEnhancer ;
57+ return createNgReduxStore ( $injector , _middlewares , _storeEnhancers , _reducer , _initialState ) ;
5458
55- const resolvedStoreEnhancer = map ( _storeEnhancers , resolveStoreEnhancer ) ;
59+ } ;
5660
57- if ( _reducerIsObject ) {
58- const getReducerKey = key => isString ( _reducer [ key ] )
59- ? $injector . get ( _reducer [ key ] )
60- : _reducer [ key ] ;
61+ this . $get . $inject = [ '$injector' ] ;
62+ }
6163
62- const resolveReducerKey = ( result , key ) => assign ( { } , result ,
63- { [ key ] : getReducerKey ( key ) }
64- ) ;
64+ function createNgReduxStore ( $injector , _middlewares , _storeEnhancers , _reducer , _initialState ) {
65+ const resolveMiddleware = middleware => isString ( middleware )
66+ ? $injector . get ( middleware )
67+ : middleware ;
6568
66- const reducersObj = Object
67- . keys ( _reducer )
68- . reduce ( resolveReducerKey , { } ) ;
69+ const resolvedMiddleware = map ( _middlewares , resolveMiddleware ) ;
6970
70- _reducer = combineReducers ( reducersObj ) ;
71- }
71+ const resolveStoreEnhancer = storeEnhancer => isString ( storeEnhancer )
72+ ? $injector . get ( storeEnhancer )
73+ : storeEnhancer ;
7274
73- const finalCreateStore = resolvedStoreEnhancer ? compose ( ... resolvedStoreEnhancer ) ( createStore ) : createStore ;
75+ const resolvedStoreEnhancer = map ( _storeEnhancers , resolveStoreEnhancer ) ;
7476
75- //digestMiddleware needs to be the last one.
76- resolvedMiddleware . push ( digestMiddleware ( $injector . get ( '$rootScope' ) ) ) ;
77+ if ( _reducerIsObject ) {
78+ const getReducerKey = key => isString ( _reducer [ key ] )
79+ ? $injector . get ( _reducer [ key ] )
80+ : _reducer [ key ] ;
7781
78- const store = _initialState
79- ? applyMiddleware ( ... resolvedMiddleware ) ( finalCreateStore ) ( _reducer , _initialState )
80- : applyMiddleware ( ... resolvedMiddleware ) ( finalCreateStore ) ( _reducer ) ;
82+ const resolveReducerKey = ( result , key ) => assign ( { } , result ,
83+ { [ key ] : getReducerKey ( key ) }
84+ ) ;
8185
82- return assign ( { } , store , { connect : Connector ( store ) } ) ;
83- } ;
86+ const reducersObj = Object
87+ . keys ( _reducer )
88+ . reduce ( resolveReducerKey , { } ) ;
8489
85- this . $get . $inject = [ '$injector' ] ;
90+ _reducer = combineReducers ( reducersObj ) ;
91+ }
92+
93+ const finalCreateStore = resolvedStoreEnhancer ? compose ( ...resolvedStoreEnhancer ) ( createStore ) : createStore ;
94+
95+ //digestMiddleware needs to be the last one.
96+ resolvedMiddleware . push ( digestMiddleware ( $injector . get ( '$rootScope' ) ) ) ;
97+
98+ const store = _initialState
99+ ? applyMiddleware ( ...resolvedMiddleware ) ( finalCreateStore ) ( _reducer , _initialState )
100+ : applyMiddleware ( ...resolvedMiddleware ) ( finalCreateStore ) ( _reducer ) ;
101+
102+ return assign ( { } , store , { connect : Connector ( store ) } ) ;
86103}
0 commit comments