Skip to content

Commit d3b232d

Browse files
committed
implement subapps with subspace
1 parent af58362 commit d3b232d

File tree

6 files changed

+77
-18
lines changed

6 files changed

+77
-18
lines changed

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,11 @@
3737
"react-dom": "^15.6.1",
3838
"react-error-overlay": "^1.0.9",
3939
"react-redux": "^5.0.6",
40+
"react-redux-subspace": "^2.0.3-alpha",
4041
"react-test-renderer": "^15.6.1",
4142
"redux": "^3.7.2",
43+
"redux-subspace": "^2.0.3-alpha",
44+
"redux-thunk": "^2.2.0",
4245
"style-loader": "0.18.2",
4346
"sw-precache-webpack-plugin": "0.11.3",
4447
"url-loader": "0.5.9",

src/App.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,25 @@
11
import React, { Component } from "react";
22
import UserCreator from "./UserCreator";
33
import { connect } from "react-redux";
4+
import { SubspaceProvider } from "react-redux-subspace";
45

56
class App extends Component {
67
render() {
78
const { users } = this.props;
89
return (
910
<div>
10-
<UserCreator />
11-
<UserCreator />
12-
<UserCreator />
11+
<SubspaceProvider mapState={state => state.app.userCreator1} namespace="userCreator1">
12+
<UserCreator />
13+
</SubspaceProvider>
14+
15+
<SubspaceProvider mapState={state => state.app.userCreator2} namespace="userCreator2">
16+
<UserCreator />
17+
</SubspaceProvider>
18+
19+
<SubspaceProvider mapState={state => state.app.userCreator3} namespace="userCreator3">
20+
<UserCreator />
21+
</SubspaceProvider>
22+
1323
<div id="userList">
1424
{users.map(({ name }) =>
1525
<div key={name} className="user">

src/UserCreator/actions.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { globalAction } from "redux-subspace";
2+
import { userCreated } from "../state/users";
13
export const UPDATE_NAME_FIELD = "USER_CREATOR/UPDATE_NAME_FIELD";
24
export function updateNameField(name) {
35
return {
@@ -6,9 +8,9 @@ export function updateNameField(name) {
68
};
79
}
810

9-
export const CREATE_USER = "USER_CREATOR/CREATE_USER";
1011
export function createUser() {
11-
return {
12-
type: CREATE_USER
12+
return (dispatch, getState, a, b) => {
13+
const user = getState();
14+
dispatch(globalAction(userCreated(user)));
1315
};
1416
}

src/state/app.js

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
export default function(state = [], action) {
2-
switch (action.type) {
3-
default:
4-
return state;
5-
}
6-
}
1+
import { combineReducers } from "redux";
2+
import { namespaced } from "redux-subspace";
3+
import userCreatorReducer from "../UserCreator/reducer";
4+
5+
export default combineReducers({
6+
userCreator1: namespaced("userCreator1")(userCreatorReducer),
7+
userCreator2: namespaced("userCreator2")(userCreatorReducer),
8+
userCreator3: namespaced("userCreator3")(userCreatorReducer)
9+
});

src/store.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
1-
import { combineReducers, createStore } from "redux";
2-
1+
import { compose, combineReducers, createStore } from "redux";
2+
import { applyMiddleware } from "redux-subspace";
33
import appReducer from "./state/app";
44
import usersReducer from "./state/users";
5+
import thunk from "redux-thunk";
6+
7+
const enhancers = [applyMiddleware(thunk)];
8+
9+
if (window.__REDUX_DEVTOOLS_EXTENSION__) {
10+
enhancers.push(window.__REDUX_DEVTOOLS_EXTENSION__());
11+
}
512

613
export default () =>
714
createStore(
815
combineReducers({
916
app: appReducer,
1017
users: usersReducer
1118
}),
12-
window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
19+
compose(...enhancers)
1320
);

yarn.lock

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1255,6 +1255,10 @@ chalk@^2.0.1:
12551255
escape-string-regexp "^1.0.5"
12561256
supports-color "^4.0.0"
12571257

1258+
change-emitter@^0.1.2:
1259+
version "0.1.6"
1260+
resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515"
1261+
12581262
cheerio@^0.22.0:
12591263
version "0.22.0"
12601264
resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e"
@@ -2478,7 +2482,7 @@ fb-watchman@^2.0.0:
24782482
dependencies:
24792483
bser "^2.0.0"
24802484

2481-
fbjs@^0.8.9:
2485+
fbjs@^0.8.1, fbjs@^0.8.9:
24822486
version "0.8.14"
24832487
resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.14.tgz#d1dbe2be254c35a91e09f31f9cd50a40b2a0ed1c"
24842488
dependencies:
@@ -2897,6 +2901,10 @@ [email protected]:
28972901
version "2.16.3"
28982902
resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
28992903

2904+
hoist-non-react-statics@^1.0.0:
2905+
version "1.2.0"
2906+
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb"
2907+
29002908
hoist-non-react-statics@^2.2.1:
29012909
version "2.3.0"
29022910
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.3.0.tgz#ede16318c2ff1f9fe3a025396ba06fd4c44608bb"
@@ -4979,7 +4987,7 @@ [email protected], promise@^7.1.1:
49794987
dependencies:
49804988
asap "~2.0.3"
49814989

4982-
prop-types@^15.5.10:
4990+
prop-types@^15.5.0, prop-types@^15.5.10:
49834991
version "15.5.10"
49844992
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154"
49854993
dependencies:
@@ -5119,6 +5127,15 @@ react-error-overlay@^1.0.9:
51195127
settle-promise "1.0.0"
51205128
source-map "0.5.6"
51215129

5130+
react-redux-subspace@^2.0.3-alpha:
5131+
version "2.0.3-alpha"
5132+
resolved "https://registry.yarnpkg.com/react-redux-subspace/-/react-redux-subspace-2.0.3-alpha.tgz#df1e1bab58ee4d253927a6b3c21e4a2dc73a9237"
5133+
dependencies:
5134+
hoist-non-react-statics "^2.2.1"
5135+
prop-types "^15.5.0"
5136+
recompose "^0.24.0"
5137+
redux-subspace "^2.0.3-alpha"
5138+
51225139
react-redux@^5.0.6:
51235140
version "5.0.6"
51245141
resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.6.tgz#23ed3a4f986359d68b5212eaaa681e60d6574946"
@@ -5213,6 +5230,15 @@ rechoir@^0.6.2:
52135230
dependencies:
52145231
resolve "^1.1.6"
52155232

5233+
recompose@^0.24.0:
5234+
version "0.24.0"
5235+
resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.24.0.tgz#262e93f974439eb17e7779824d88cce90492a5dd"
5236+
dependencies:
5237+
change-emitter "^0.1.2"
5238+
fbjs "^0.8.1"
5239+
hoist-non-react-statics "^1.0.0"
5240+
symbol-observable "^1.0.4"
5241+
52165242
52175243
version "2.2.1"
52185244
resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.1.tgz#90ef231d0778c5ce093c9a48d74e5c5422d13a99"
@@ -5240,6 +5266,14 @@ reduce-function-call@^1.0.1:
52405266
dependencies:
52415267
balanced-match "^0.4.2"
52425268

5269+
redux-subspace@^2.0.3-alpha:
5270+
version "2.0.3-alpha"
5271+
resolved "https://registry.yarnpkg.com/redux-subspace/-/redux-subspace-2.0.3-alpha.tgz#c785e931224e122fe3ce4f744c79f7c9ed43a54f"
5272+
5273+
redux-thunk@^2.2.0:
5274+
version "2.2.0"
5275+
resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.2.0.tgz#e615a16e16b47a19a515766133d1e3e99b7852e5"
5276+
52435277
redux@^3.7.2:
52445278
version "3.7.2"
52455279
resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b"
@@ -5905,7 +5939,7 @@ sw-toolbox@^3.4.0:
59055939
path-to-regexp "^1.0.1"
59065940
serviceworker-cache-polyfill "^4.0.0"
59075941

5908-
symbol-observable@^1.0.3:
5942+
symbol-observable@^1.0.3, symbol-observable@^1.0.4:
59095943
version "1.0.4"
59105944
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d"
59115945

0 commit comments

Comments
 (0)