@@ -2,6 +2,7 @@ import Connector from './connector';
2
2
import invariant from 'invariant' ;
3
3
import { createStore , applyMiddleware , compose , combineReducers } from 'redux' ;
4
4
import digestMiddleware from './digestMiddleware' ;
5
+ import wrapStore from './storeWrapper' ;
5
6
6
7
import curry from 'lodash.curry' ;
7
8
import isFunction from 'lodash.isfunction' ;
@@ -20,6 +21,11 @@ export default function ngReduxProvider() {
20
21
let _storeEnhancers = undefined ;
21
22
let _initialState = undefined ;
22
23
let _reducerIsObject = undefined ;
24
+ let _providedStore = undefined ;
25
+
26
+ this . provideStore = ( store ) => {
27
+ _providedStore = store ;
28
+ }
23
29
24
30
this . createStoreWith = ( reducer , middlewares , storeEnhancers , initialState ) => {
25
31
invariant (
@@ -42,45 +48,56 @@ export default function ngReduxProvider() {
42
48
} ;
43
49
44
50
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 ) ;
48
53
49
- const resolvedMiddleware = map ( _middlewares , resolveMiddleware ) ;
54
+ return wrapStore ( _providedStore , emptyStore ) ;
55
+ }
50
56
51
- const resolveStoreEnhancer = storeEnhancer => isString ( storeEnhancer )
52
- ? $injector . get ( storeEnhancer )
53
- : storeEnhancer ;
57
+ return createNgReduxStore ( $injector , _middlewares , _storeEnhancers , _reducer , _initialState ) ;
54
58
55
- const resolvedStoreEnhancer = map ( _storeEnhancers , resolveStoreEnhancer ) ;
59
+ } ;
56
60
57
- if ( _reducerIsObject ) {
58
- const getReducerKey = key => isString ( _reducer [ key ] )
59
- ? $injector . get ( _reducer [ key ] )
60
- : _reducer [ key ] ;
61
+ this . $get . $inject = [ '$injector' ] ;
62
+ }
61
63
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 ;
65
68
66
- const reducersObj = Object
67
- . keys ( _reducer )
68
- . reduce ( resolveReducerKey , { } ) ;
69
+ const resolvedMiddleware = map ( _middlewares , resolveMiddleware ) ;
69
70
70
- _reducer = combineReducers ( reducersObj ) ;
71
- }
71
+ const resolveStoreEnhancer = storeEnhancer => isString ( storeEnhancer )
72
+ ? $injector . get ( storeEnhancer )
73
+ : storeEnhancer ;
72
74
73
- const finalCreateStore = resolvedStoreEnhancer ? compose ( ... resolvedStoreEnhancer ) ( createStore ) : createStore ;
75
+ const resolvedStoreEnhancer = map ( _storeEnhancers , resolveStoreEnhancer ) ;
74
76
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 ] ;
77
81
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
+ ) ;
81
85
82
- return assign ( { } , store , { connect : Connector ( store ) } ) ;
83
- } ;
86
+ const reducersObj = Object
87
+ . keys ( _reducer )
88
+ . reduce ( resolveReducerKey , { } ) ;
84
89
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 ) } ) ;
86
103
}
0 commit comments