Skip to content

Commit ad1fe4e

Browse files
author
mmasterson
committed
#8 Multiple Store Support POC
1 parent 893ffb9 commit ad1fe4e

File tree

2 files changed

+49
-38
lines changed

2 files changed

+49
-38
lines changed

force-app/main/default/aura/Redux/Redux.cmp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<aura:component description="Redux">
22
<ltng:require scripts="{!$Resource.redux}"/>
33
<aura:method name="createStore" action="{!c.createStore}">
4-
<aura:attribute name="name" type="string" />
4+
<aura:attribute name="name" type="string" default="redux" />
55
<aura:attribute name="rootReducer" type="Map" />
66
<aura:attribute name="initialState" type="Map" />
77
<aura:attribute name="middleware" type="Map" />

force-app/main/default/aura/Redux/ReduxController.js

Lines changed: 48 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
({
2+
doInit: function(component, event, helper) {
3+
4+
},
5+
26
createStore: function(component, event) {
7+
var reduxName = component.get("v.name");
38
var params = event.getParam("arguments");
49

510
if(params && Redux) {
@@ -13,85 +18,90 @@
1318
var reducerObject = {};
1419
reducerObject[reducerName] = rootReducer;
1520

16-
if(window.reducerQueue) {
17-
combinedReducer = Redux.combineReducers(Object.assign({}, reducerObject, window.reducerQueue));
18-
window.reducerRegistry = Object.assign({}, window.reducerRegistry, reducerObject, window.reducerQueue);
19-
} else {
21+
if(window.reducerQueue && window.reducerQueue[reduxName]) {
22+
combinedReducer = Redux.combineReducers(Object.assign({}, reducerObject, window.reducerQueue[reduxName]));
23+
window.reducerRegistry[reduxName] = Object.assign({}, window.reducerRegistry[reduxName], reducerObject, window.reducerQueue[reduxName]);
24+
} else if(window.reducerRegistry && window.reducerRegistry[reduxName]) {
2025
combinedReducer = Redux.combineReducers(reducerObject);
21-
window.reducerRegistry = Object.assign({}, window.reducerRegistry, reducerObject);
26+
window.reducerRegistry[reduxName] = Object.assign({}, window.reducerRegistry[reduxName], reducerObject);
2227
}
2328

2429

2530
if(!window.reduxStore) {
2631
if (rootReducer && initialState && middleware) {
27-
window.reduxStore = Redux.createStore(combinedReducer, initialState, Redux.compose(Redux.applyMiddleware(middleware)));
32+
window.reduxStore[reduxName] = Redux.createStore(combinedReducer, initialState, Redux.compose(Redux.applyMiddleware(middleware)));
2833
} else if (rootReducer && initialState && !middleware) {
29-
window.reduxStore = Redux.createStore(combinedReducer, initialState);
34+
window.reduxStore[reduxName] = Redux.createStore(combinedReducer, initialState);
3035
} else if (rootReducer && !initialState && !middleware) {
31-
window.reduxStore = Redux.createStore(combinedReducer);
36+
window.reduxStore[reduxName] = Redux.createStore(combinedReducer);
3237
}
3338
} else {
3439
component.registerReducer(reducerName, rootReducer)
3540
}
3641

37-
if(window.subscriberQueue) {
38-
window.subscriberQueue.map(function(subscriber) {
42+
if(window.subscriberQueue && window.subscriberQueue[reduxName]) {
43+
window.subscriberQueue[reduxName].map(function(subscriber) {
3944
component.connect(subscriber.mapStateToAttributes, subscriber.target);
4045
});
4146
}
4247

43-
if(window.dispatchQueue) {
44-
window.dispatchQueue.map(function(action) {
48+
if(window.dispatchQueue && window.dispatchQueue[reduxName]) {
49+
window.dispatchQueue[reduxName].map(function(action) {
4550
component.dispatch(action);
4651
});
4752
}
4853
}
4954
},
5055

5156
getState: function() {
52-
if(window.reduxStore) {
53-
return window.reduxStore.getState();
57+
var reduxName = component.get("v.name");
58+
if(window.reduxStore && window.reduxStore[reduxName]) {
59+
return window.reduxStore[reduxName].getState();
5460
} else {
5561
return null;
5662
}
5763
},
5864

5965
dispatch: function(component, event) {
66+
var reduxName = component.get("v.name");
6067
var params = event.getParam("arguments");
6168

6269
var action = params ? params.action : null;
6370
if(action) {
64-
if(window.reduxStore) {
65-
window.reduxStore.dispatch(action);
71+
if(window.reduxStore && window.reduxStore[reduxName]) {
72+
window.reduxStore[reduxName].dispatch(action);
6673
} else {
67-
if(window.dispatchQueue) {
68-
window.dispatchQueue.push(action);
74+
if(window.dispatchQueue && window.dispatchQueue[reduxName]) {
75+
window.dispatchQueue[reduxName].push(action);
6976
} else {
70-
window.dispatchQueue = [action];
77+
window.dispatchQueue[reduxName] = [action];
7178
}
7279
}
7380
}
7481
},
7582

7683
subscribe: function(component, event) {
84+
var reduxName = component.get("v.name");
7785
var params = event.getParam("arguments");
7886
var listener = params ? params.listener : null;
7987

80-
if(listener && window.reduxStore) {
81-
window.reduxStore.subscribe(listener);
88+
if(listener && window.reduxStore && window.reduxStore[reduxName]) {
89+
window.reduxStore[reduxName].subscribe(listener);
8290
}
8391
},
8492

8593
replaceReducer: function(component, event) {
94+
var reduxName = component.get("v.name");
8695
var params = event.getParam("arguments");
8796
var nextReducer = params ? params.nextReducer : null;
8897

89-
if(nextReducer && window.reduxStore) {
90-
window.reduxStore.replaceReducer(nextReducer);
98+
if(nextReducer && window.reduxStore && window.reduxStore[reduxName]) {
99+
window.reduxStore[reduxName].replaceReducer(nextReducer);
91100
}
92101
},
93102

94103
registerReducer: function(component, event) {
104+
var reduxName = component.get("v.name");
95105
var params = event.getParam("arguments");
96106
var name = params ? params.name : null;
97107
var reducer = params ? params.reducer : null;
@@ -100,21 +110,22 @@
100110
var reducerObject = {};
101111
reducerObject[name] = reducer;
102112

103-
if(window.reduxStore) {
104-
var newRootReducer = Redux.combineReducers(Object.assign({}, window.reducerRegistry, reducerObject));
105-
window.reducerRegistry = Object.assign({}, window.reducerRegistry, reducerObject);
106-
window.reduxStore.replaceReducer(newRootReducer);
113+
if(window.reduxStore && window.reduxStore[reduxName]) {
114+
var newRootReducer = Redux.combineReducers(Object.assign({}, window.reducerRegistry[reduxName], reducerObject));
115+
window.reducerRegistry[reduxName] = Object.assign({}, window.reducerRegistry[reduxName], reducerObject);
116+
window.reduxStore[reduxName].replaceReducer(newRootReducer);
107117
} else {
108-
if(window.reducerQueue){
109-
window.reducerQueue = Object.assign({}, window.reducerQueue, reducerObject);
118+
if(window.reducerQueue && window.reducerQueue[reduxName]){
119+
window.reducerQueue[reduxName] = Object.assign({}, window.reducerQueue, reducerObject);
110120
} else {
111-
window.reducerQueue = reducerObject;
121+
window.reducerQueue[reduxName] = reducerObject;
112122
}
113123
}
114124
}
115125
},
116126

117127
connect: function(component, event) {
128+
var reduxName = component.get("v.name");
118129
var params = event.getParam("arguments");
119130
var mapStateToAttributes = params ? params.mapStateToAttributes : null;
120131
var target = params && params.target ? params.target : event.getSource();
@@ -123,10 +134,10 @@
123134
mapStateToAttributes = mapStateToAttributes();
124135
}
125136

126-
if(window.reduxStore) {
137+
if(window.reduxStore && window.reduxStore[reduxName]) {
127138
function handleChanges(){
128139
if(target.isValid()) {
129-
var state = window.reduxStore.getState();
140+
var state = window.reduxStore[reduxName].getState();
130141

131142
for(var key in mapStateToAttributes) {
132143
if(mapStateToAttributes.hasOwnProperty(key)) {
@@ -147,16 +158,16 @@
147158

148159
handleChanges();
149160

150-
window.reduxStore.subscribe(handleChanges);
151-
target.dispatch = window.reduxStore.dispatch;
161+
window.reduxStore[reduxName].subscribe(handleChanges);
162+
target.dispatch = window.reduxStore[reduxName].dispatch;
152163
} else {
153-
if(window.subscriberQueue) {
154-
window.subscriberQueue.push({
164+
if(window.subscriberQueue && window.subscriberQueue[reduxName]) {
165+
window.subscriberQueue[reduxName].push({
155166
target: target,
156167
mapStateToAttributes: mapStateToAttributes
157168
});
158169
} else {
159-
window.subscriberQueue = [{
170+
window.subscriberQueue[reduxName] = [{
160171
target: target,
161172
mapStateToAttributes: mapStateToAttributes
162173
}];

0 commit comments

Comments
 (0)