Skip to content

Commit 35d299c

Browse files
committed
add createReducer for v0.15
#89
1 parent 626e3a2 commit 35d299c

File tree

13 files changed

+771
-801
lines changed

13 files changed

+771
-801
lines changed

packages/reshow-flux-base/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "reshow-flux-base",
3-
"version": "0.15.0",
3+
"version": "0.15.1",
44
"description": "Pure flux dispatch mechanism",
55
"main": "./build/cjs/index.js",
66
"module": "./build/es/index.js",

packages/reshow-flux-base/src/createReducer.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ const createReducer = (reduce, initState = {}) => {
3030
}
3131
if (startingState !== endingState) {
3232
state.current = endingState;
33-
mitt.emit(state);
33+
mitt.emit(state, action);
3434
}
3535
};
3636
const store = {

packages/reshow-flux/src/index.js

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
export { default as useConnect } from "./useConnect";
22
export { default as ReduceStore } from "./ReduceStore";
3-
export { default as ImmutableStore, Map, Set, getMap, mergeMap } from "./ImmutableStore";
3+
export {
4+
default as ImmutableStore,
5+
Map,
6+
Set,
7+
getMap,
8+
mergeMap,
9+
} from "./ImmutableStore";
410
export { default as getStores } from "./getStores";
511
export { Dispatcher } from "reshow-flux-base";

src/index.js

+1-9
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,10 @@
1-
// Flux
2-
// Connect A.K.A Facebook's flux Container.create
3-
export { ReduceStore, Dispatcher } from "reshow-flux";
4-
51
// Stores
6-
export { default as pageStore } from "./stores/pageStore";
2+
export { default as pageStore, dispatch } from "./stores/pageStore";
73
export { default as realTimeStore } from "./stores/realTimeStore";
84
export { default as localStorageStore } from "./stores/localStorageStore";
95
export { default as sessionStorageStore } from "./stores/sessionStorageStore";
106
export { default as messageStore } from "./stores/messageStore";
117

12-
// Dispatch
13-
export { default as dispatcher, dispatch } from "./dispatcher";
14-
export { storageDispatch } from "./storageDispatcher";
15-
168
// Ajax
179
export { AjaxLink as ReLink, AjaxForm as ReForm } from "organism-react-ajax";
1810

src/storageDispatcher.js

-16
This file was deleted.

src/stores/localStorageStore.js

+7-25
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,11 @@
1-
import { ReduceStore } from "reshow-flux";
1+
import { createReducer } from "reshow-flux-base";
22
import get from "get-object-value";
33
import { localStorage, Storage } from "get-storage";
44

5-
import storageDispatcher from "../storageDispatcher";
5+
const [store, localDispatch] = createReducer((state, action) => {
6+
const params = get(action, ["params"]);
7+
return state.merge(params);
8+
}, new Storage(localStorage));
69

7-
class LocalStorageStore extends ReduceStore {
8-
getInitialState() {
9-
return new Storage(localStorage);
10-
}
11-
12-
updateStorage(state, action) {
13-
const params = get(action, ["params"]);
14-
return state.merge(params);
15-
}
16-
17-
reduce(state, action) {
18-
switch (action.type) {
19-
case "local":
20-
return this.updateStorage(state, action);
21-
default:
22-
return state;
23-
}
24-
}
25-
}
26-
27-
export default new LocalStorageStore(storageDispatcher);
28-
29-
export { LocalStorageStore };
10+
export default store;
11+
export { localDispatch };

src/stores/messageStore.js

+21-22
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
import { ReduceStore } from "reshow-flux";
1+
import { ImmutableStore } from "reshow-flux";
22
import { Map, List } from "immutable";
33
import get from "get-object-value";
44
import callfunc from "call-func";
55
import { T_NULL, IS_ARRAY, KEYS } from "reshow-constant";
66

7-
import dispatcher, { dispatch } from "../dispatcher";
8-
97
let alertCount = 0;
108

119
const toMessage = (message) => {
@@ -21,7 +19,7 @@ const toMessage = (message) => {
2119

2220
const getMessage = (action) => toMessage(get(action, ["params", "message"]));
2321

24-
class MessageStore extends ReduceStore {
22+
class MessageStore {
2523
dialogCallback = T_NULL;
2624
alertMap = {};
2725

@@ -89,24 +87,25 @@ class MessageStore extends ReduceStore {
8987
this.alertMap[message.id] = message;
9088
return state.set("alerts", this.getAlertList());
9189
}
90+
}
9291

93-
reduce(state, action) {
94-
switch (action.type) {
95-
case "dialog/start":
96-
return this.dialogStart(state, action);
97-
case "dialog/end":
98-
return this.dialogEnd(state, action);
99-
case "alert/reset":
100-
return this.alertReset(state, action);
101-
case "alert/del":
102-
return this.alertDel(state, action);
103-
case "alert/add":
104-
return this.alertAdd(state, action);
105-
default:
106-
return state;
107-
}
92+
const [store, messageDispatch] = ImmutableStore((state, action) => {
93+
const oMess = new MessageStore();
94+
switch (action.type) {
95+
case "dialog/start":
96+
return oMess.dialogStart(state, action);
97+
case "dialog/end":
98+
return oMess.dialogEnd(state, action);
99+
case "alert/reset":
100+
return oMess.alertReset(state, action);
101+
case "alert/del":
102+
return oMess.alertDel(state, action);
103+
case "alert/add":
104+
return oMess.alertAdd(state, action);
105+
default:
106+
return state;
108107
}
109-
}
108+
});
110109

111-
// Export a singleton instance of the store
112-
export default new MessageStore(dispatcher);
110+
export default store;
111+
export { messageDispatch };

src/stores/pageStore.js

+37-22
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,41 @@
1-
import { ReduceStore } from "reshow-flux";
2-
import dispatcher from "../dispatcher";
1+
import { ImmutableStore, mergeMap } from "reshow-flux";
2+
import { KEYS } from "reshow-constant";
3+
import { realTimeDispatch } from "./realTimeStore";
4+
import { messageDispatch } from "./messageStore";
5+
import { sessionDispatch } from "./sessionStorageStore";
6+
import { localDispatch } from "./localStorageStore";
37

4-
const keys = Object.keys;
5-
6-
class PageStore extends ReduceStore {
7-
reduce(state, action) {
8-
switch (action.type) {
9-
case "config/set":
10-
return state.merge(action.params);
11-
case "config/reset":
12-
return state.clear().merge(action.params);
13-
case "realTime":
8+
const [store, dispatch] = ImmutableStore((state, action) => {
9+
switch (action.type) {
10+
case "dialog/start":
11+
case "dialog/end":
12+
case "alert/reset":
13+
case "alert/del":
14+
case "alert/add":
15+
messageDispatch(action);
16+
return state;
17+
case "realTime":
18+
realTimeDispatch(action);
19+
return state;
20+
case "local":
21+
localDispatch(action);
22+
return state;
23+
case "session":
24+
sessionDispatch(action);
25+
return state;
26+
case "config/set":
27+
return mergeMap(state, action.params);
28+
case "config/reset":
29+
return mergeMap(state.clear(), action.params);
30+
return state.clear().merge(action.params);
31+
default:
32+
if (KEYS(action)) {
33+
return mergeMap(state, action);
34+
} else {
1435
return state;
15-
default:
16-
if (keys(action)) {
17-
return state.merge(action);
18-
} else {
19-
return state;
20-
}
21-
}
36+
}
2237
}
23-
}
38+
});
2439

25-
// Export a singleton instance of the store
26-
export default new PageStore(dispatcher);
40+
export default store;
41+
export { dispatch };

src/stores/realTimeStore.js

+10-14
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,13 @@
1-
"use strict";
1+
import { ImmutableStore } from "reshow-flux";
22

3-
import { ReduceStore } from "reshow-flux";
4-
import dispatcher from "../dispatcher";
5-
6-
class RealTimeStore extends ReduceStore {
7-
reduce(state, action) {
8-
switch (action.type) {
9-
case "realTime":
10-
return action.params;
11-
default:
12-
return [];
13-
}
3+
const [store, realTimeDispatch] = ImmutableStore((state, action) => {
4+
switch (action.type) {
5+
case "realTime":
6+
return action.params;
7+
default:
8+
return [];
149
}
15-
}
10+
});
1611

17-
export default new RealTimeStore(dispatcher);
12+
export default store;
13+
export { realTimeDispatch };

src/stores/sessionStorageStore.js

+8-18
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,11 @@
1+
import { createReducer } from "reshow-flux-base";
2+
import get from "get-object-value";
13
import { sessionStorage, Storage } from "get-storage";
24

3-
import { LocalStorageStore } from "./localStorageStore";
4-
import storageDispatcher from "../storageDispatcher";
5+
const [store, sessionDispatch] = createReducer((state, action) => {
6+
const params = get(action, ["params"]);
7+
return state.merge(params);
8+
}, new Storage(sessionStorage));
59

6-
class SessionStorageStore extends LocalStorageStore {
7-
getInitialState() {
8-
return new Storage(sessionStorage);
9-
}
10-
11-
reduce(state, action) {
12-
switch (action.type) {
13-
case "session":
14-
return this.updateStorage(state, action);
15-
default:
16-
return state;
17-
}
18-
}
19-
}
20-
21-
export default new SessionStorageStore(storageDispatcher);
10+
export default store;
11+
export { sessionDispatch };

ui/organisms/__tests__/RealTimeReturnTest.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { mount, cleanIt } from "reshow-unit";
66

77
class TestEl extends PureComponent {
88
render() {
9-
const props = {...this.props};
9+
const props = { ...this.props };
1010
delete props["--realTimeUrl--"];
1111
return <div {...props} />;
1212
}
@@ -56,7 +56,7 @@ describe("Test RealTimeReturn", () => {
5656
expect(uFake.el.props.data).to.equal("bar");
5757
dispatch({ data: "foo" });
5858
setTimeout(() => {
59-
expect(uFake.el.props.data).to.equal("foo");
59+
expect(uFake.el.props.data).to.equal("bar");
6060
done();
6161
}, 5);
6262
}, 5);
@@ -68,7 +68,7 @@ describe("Test RealTimeReturn", () => {
6868
dispatch({ type: "realTime", params: { r: { data: "bar" } } });
6969
setTimeout(() => {
7070
expect(uFake.el.props.data).to.equal("bar");
71-
dispatch({ data: "foo" });
71+
dispatch("realTime");
7272
setTimeout(() => {
7373
expect(uFake.el.props.data).to.be.null;
7474
done();

ui/organisms/__tests__/StorageReturnTest.js

+3-4
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,9 @@ import {
88
Return,
99
localStorageStore,
1010
sessionStorageStore,
11-
storageDispatch,
11+
dispatch,
1212
} from "../../../src/index";
1313

14-
1514
class TestEl extends PureComponent {
1615
show = 0;
1716
render() {
@@ -44,7 +43,7 @@ describe("Test Storage Return", () => {
4443
const vDom = <FakeComponent storage={localStorageStore} />;
4544
const uFake = mount(vDom).instance();
4645
const uString = "test123";
47-
storageDispatch("local", { data: uString });
46+
dispatch("local", { data: uString });
4847
setTimeout(() => {
4948
expect(uFake.el.props.data).to.equal(uString);
5049
done();
@@ -55,7 +54,7 @@ describe("Test Storage Return", () => {
5554
const vDom = <FakeComponent storage={sessionStorageStore} />;
5655
const uFake = mount(vDom).instance();
5756
const uString = "test456";
58-
storageDispatch("session", { data: uString });
57+
dispatch("session", { data: uString });
5958
setTimeout(() => {
6059
expect(uFake.el.props.data).to.equal(uString);
6160
done();

0 commit comments

Comments
 (0)