@@ -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 providedStoreMiddleware from './providedStoreMiddleware' ;
56import wrapStore from './storeWrapper' ;
67
78import curry from 'lodash.curry' ;
@@ -25,6 +26,8 @@ export default function ngReduxProvider() {
2526
2627 this . provideStore = ( store ) => {
2728 _providedStore = store ;
29+ _reducer = ( state , action ) => action . payload ;
30+ _middlewares = [ providedStoreMiddleware ( _providedStore ) ] ;
2831 }
2932
3033 this . createStoreWith = ( reducer , middlewares , storeEnhancers , initialState ) => {
@@ -48,56 +51,46 @@ export default function ngReduxProvider() {
4851 } ;
4952
5053 this . $get = ( $injector ) => {
51- if ( _providedStore ) {
52- const emptyStore = createNgReduxStore ( $injector , [ ] , [ ] , state => state , undefined ) ;
54+ const resolveMiddleware = middleware => isString ( middleware )
55+ ? $injector . get ( middleware )
56+ : middleware ;
5357
54- return wrapStore ( _providedStore , emptyStore ) ;
55- }
56-
57- return createNgReduxStore ( $injector , _middlewares , _storeEnhancers , _reducer , _initialState ) ;
58-
59- } ;
60-
61- this . $get . $inject = [ '$injector' ] ;
62- }
58+ const resolvedMiddleware = map ( _middlewares , resolveMiddleware ) ;
6359
64- function createNgReduxStore ( $injector , _middlewares , _storeEnhancers , _reducer , _initialState ) {
65- const resolveMiddleware = middleware => isString ( middleware )
66- ? $injector . get ( middleware )
67- : middleware ;
60+ const resolveStoreEnhancer = storeEnhancer => isString ( storeEnhancer )
61+ ? $injector . get ( storeEnhancer )
62+ : storeEnhancer ;
6863
69- const resolvedMiddleware = map ( _middlewares , resolveMiddleware ) ;
64+ const resolvedStoreEnhancer = map ( _storeEnhancers , resolveStoreEnhancer ) ;
7065
71- const resolveStoreEnhancer = storeEnhancer => isString ( storeEnhancer )
72- ? $injector . get ( storeEnhancer )
73- : storeEnhancer ;
66+ if ( _reducerIsObject ) {
67+ const getReducerKey = key => isString ( _reducer [ key ] )
68+ ? $injector . get ( _reducer [ key ] )
69+ : _reducer [ key ] ;
7470
75- const resolvedStoreEnhancer = map ( _storeEnhancers , resolveStoreEnhancer ) ;
71+ const resolveReducerKey = ( result , key ) => assign ( { } , result ,
72+ { [ key ] : getReducerKey ( key ) }
73+ ) ;
7674
77- if ( _reducerIsObject ) {
78- const getReducerKey = key => isString ( _reducer [ key ] )
79- ? $injector . get ( _reducer [ key ] )
80- : _reducer [ key ] ;
75+ const reducersObj = Object
76+ . keys ( _reducer )
77+ . reduce ( resolveReducerKey , { } ) ;
8178
82- const resolveReducerKey = ( result , key ) => assign ( { } , result ,
83- { [ key ] : getReducerKey ( key ) }
84- ) ;
85-
86- const reducersObj = Object
87- . keys ( _reducer )
88- . reduce ( resolveReducerKey , { } ) ;
79+ _reducer = combineReducers ( reducersObj ) ;
80+ }
8981
90- _reducer = combineReducers ( reducersObj ) ;
91- }
82+ const finalCreateStore = resolvedStoreEnhancer ? compose ( ...resolvedStoreEnhancer ) ( createStore ) : createStore ;
9283
93- const finalCreateStore = resolvedStoreEnhancer ? compose ( ...resolvedStoreEnhancer ) ( createStore ) : createStore ;
84+ //digestMiddleware needs to be the last one.
85+ resolvedMiddleware . push ( digestMiddleware ( $injector . get ( '$rootScope' ) ) ) ;
9486
95- //digestMiddleware needs to be the last one.
96- resolvedMiddleware . push ( digestMiddleware ( $injector . get ( '$rootScope' ) ) ) ;
87+ const store = applyMiddleware ( ...resolvedMiddleware ) ( finalCreateStore ) ( _reducer , _initialState || undefined )
88+ const mergedStore = assign ( { } , store , { connect : Connector ( store ) } ) ;
89+
90+ if ( _providedStore ) wrapStore ( _providedStore , mergedStore )
9791
98- const store = _initialState
99- ? applyMiddleware ( ...resolvedMiddleware ) ( finalCreateStore ) ( _reducer , _initialState )
100- : applyMiddleware ( ...resolvedMiddleware ) ( finalCreateStore ) ( _reducer ) ;
92+ return mergedStore ;
93+ } ;
10194
102- return assign ( { } , store , { connect : Connector ( store ) } ) ;
95+ this . $get . $inject = [ '$injector' ] ;
10396}
0 commit comments