Skip to content

Commit 32aab0b

Browse files
committed
Use FluentJS
1 parent 9e53321 commit 32aab0b

12 files changed

+139
-297
lines changed

examples/fluent-chat/js/actions/ChatMessageActionCreators.js

+7-11
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,19 @@
1010
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1111
*/
1212

13+
var Fluent = require('fluent-js');
1314
var ChatAppDispatcher = require('../dispatcher/ChatAppDispatcher');
14-
var ChatConstants = require('../constants/ChatConstants');
1515
var ChatWebAPIUtils = require('../utils/ChatWebAPIUtils');
1616
var ChatMessageUtils = require('../utils/ChatMessageUtils');
1717

18-
var ActionTypes = ChatConstants.ActionTypes;
18+
class ChatMessageActions extends Fluent.Actions {
1919

20-
module.exports = {
21-
22-
createMessage: function(text, currentThreadID) {
23-
ChatAppDispatcher.dispatch({
24-
type: ActionTypes.CREATE_MESSAGE,
25-
text: text,
26-
currentThreadID: currentThreadID
27-
});
20+
createMessage(text, currentThreadID) {
21+
this.dispatch(text, currentThreadID);
2822
var message = ChatMessageUtils.getCreatedMessageData(text, currentThreadID);
2923
ChatWebAPIUtils.createMessage(message);
3024
}
3125

32-
};
26+
}
27+
28+
module.exports = new ChatMessageActions(ChatAppDispatcher);

examples/fluent-chat/js/actions/ChatServerActionCreators.js

+10-16
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,19 @@
1010
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1111
*/
1212

13+
var Fluent = require('fluent-js');
1314
var ChatAppDispatcher = require('../dispatcher/ChatAppDispatcher');
14-
var ChatConstants = require('../constants/ChatConstants');
1515

16-
var ActionTypes = ChatConstants.ActionTypes;
16+
class ChatServerActions extends Fluent.Actions {
1717

18-
module.exports = {
19-
20-
receiveAll: function(rawMessages) {
21-
ChatAppDispatcher.dispatch({
22-
type: ActionTypes.RECEIVE_RAW_MESSAGES,
23-
rawMessages: rawMessages
24-
});
25-
},
18+
receiveAll(rawMessages) {
19+
this.dispatch(rawMessages);
20+
}
2621

27-
receiveCreatedMessage: function(createdMessage) {
28-
ChatAppDispatcher.dispatch({
29-
type: ActionTypes.RECEIVE_RAW_CREATED_MESSAGE,
30-
rawMessage: createdMessage
31-
});
22+
receiveCreatedMessage(createdMessage) {
23+
this.dispatch(createdMessage);
3224
}
3325

34-
};
26+
}
27+
28+
module.exports = new ChatServerActions(ChatAppDispatcher, true);

examples/fluent-chat/js/actions/ChatThreadActionCreators.js

+7-10
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,15 @@
1010
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1111
*/
1212

13+
var Fluent = require('fluent-js');
1314
var ChatAppDispatcher = require('../dispatcher/ChatAppDispatcher');
14-
var ChatConstants = require('../constants/ChatConstants');
1515

16-
var ActionTypes = ChatConstants.ActionTypes;
16+
class ChatThreadActions extends Fluent.Actions {
1717

18-
module.exports = {
19-
20-
clickThread: function(threadID) {
21-
ChatAppDispatcher.dispatch({
22-
type: ActionTypes.CLICK_THREAD,
23-
threadID: threadID
24-
});
18+
clickThread(threadID) {
19+
this.dispatch(threadID);
2520
}
2621

27-
};
22+
}
23+
24+
module.exports = new ChatThreadActions(ChatAppDispatcher);

examples/fluent-chat/js/components/MessageSection.react.js

+18-22
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1111
*/
1212

13+
var Fluent = require('fluent-js');
1314
var MessageComposer = require('./MessageComposer.react');
1415
var MessageListItem = require('./MessageListItem.react');
1516
var MessageStore = require('../stores/MessageStore');
@@ -32,24 +33,19 @@ function getMessageListItem(message) {
3233
);
3334
}
3435

35-
var MessageSection = React.createClass({
36+
class MessageSection extends React.Component {
3637

37-
getInitialState: function() {
38-
return getStateFromStores();
39-
},
38+
constructor(props) {
39+
super(props);
40+
this.state = getStateFromStores();
41+
this.onChange = this._onChange;
42+
}
4043

41-
componentDidMount: function() {
44+
componentDidMount() {
4245
this._scrollToBottom();
43-
MessageStore.addChangeListener(this._onChange);
44-
ThreadStore.addChangeListener(this._onChange);
45-
},
46-
47-
componentWillUnmount: function() {
48-
MessageStore.removeChangeListener(this._onChange);
49-
ThreadStore.removeChangeListener(this._onChange);
50-
},
46+
}
5147

52-
render: function() {
48+
render() {
5349
var messageListItems = this.state.messages.map(getMessageListItem);
5450
return (
5551
<div className="message-section">
@@ -60,24 +56,24 @@ var MessageSection = React.createClass({
6056
<MessageComposer threadID={this.state.thread.id}/>
6157
</div>
6258
);
63-
},
59+
}
6460

65-
componentDidUpdate: function() {
61+
componentDidUpdate() {
6662
this._scrollToBottom();
67-
},
63+
}
6864

69-
_scrollToBottom: function() {
65+
_scrollToBottom() {
7066
var ul = this.refs.messageList.getDOMNode();
7167
ul.scrollTop = ul.scrollHeight;
72-
},
68+
}
7369

7470
/**
7571
* Event handler for 'change' events coming from the MessageStore
7672
*/
77-
_onChange: function() {
73+
_onChange() {
7874
this.setState(getStateFromStores());
7975
}
8076

81-
});
77+
}
8278

83-
module.exports = MessageSection;
79+
module.exports = Fluent.connectToStores(React, MessageSection, [MessageStore, ThreadStore], 'onChange');

examples/fluent-chat/js/components/ThreadSection.react.js

+12-19
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
*/
1212

1313
var React = require('react');
14+
var Fluent = require('fluent-js');
1415
var ThreadListItem = require('../components/ThreadListItem.react');
1516
var ThreadStore = require('../stores/ThreadStore');
1617
var UnreadThreadStore = require('../stores/UnreadThreadStore');
@@ -23,23 +24,15 @@ function getStateFromStores() {
2324
};
2425
}
2526

26-
var ThreadSection = React.createClass({
27+
class ThreadSection extends React.Component {
2728

28-
getInitialState: function() {
29-
return getStateFromStores();
30-
},
31-
32-
componentDidMount: function() {
33-
ThreadStore.addChangeListener(this._onChange);
34-
UnreadThreadStore.addChangeListener(this._onChange);
35-
},
36-
37-
componentWillUnmount: function() {
38-
ThreadStore.removeChangeListener(this._onChange);
39-
UnreadThreadStore.removeChangeListener(this._onChange);
40-
},
29+
constructor(props) {
30+
super(props);
31+
this.state = getStateFromStores();
32+
this.onChange = this._onChange;
33+
}
4134

42-
render: function() {
35+
render() {
4336
var threadListItems = this.state.threads.map(function(thread) {
4437
return (
4538
<ThreadListItem
@@ -63,15 +56,15 @@ var ThreadSection = React.createClass({
6356
</ul>
6457
</div>
6558
);
66-
},
59+
}
6760

6861
/**
6962
* Event handler for 'change' events coming from the stores
7063
*/
71-
_onChange: function() {
64+
_onChange() {
7265
this.setState(getStateFromStores());
7366
}
7467

75-
});
68+
}
7669

77-
module.exports = ThreadSection;
70+
module.exports = Fluent.connectToStores(React, ThreadSection, [ThreadStore, UnreadThreadStore], 'onChange');

examples/fluent-chat/js/constants/ChatConstants.js

-24
This file was deleted.

examples/fluent-chat/js/dispatcher/ChatAppDispatcher.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@
1010
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1111
*/
1212

13-
var Dispatcher = require('flux').Dispatcher;
13+
var Dispatcher = require('fluent-js').Dispatcher;
1414

1515
module.exports = new Dispatcher();

examples/fluent-chat/js/stores/MessageStore.js

+29-50
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,10 @@
1010
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1111
*/
1212

13+
var Fluent = require('fluent-js');
1314
var ChatAppDispatcher = require('../dispatcher/ChatAppDispatcher');
14-
var ChatConstants = require('../constants/ChatConstants');
1515
var ChatMessageUtils = require('../utils/ChatMessageUtils');
16-
var EventEmitter = require('events').EventEmitter;
1716
var ThreadStore = require('../stores/ThreadStore');
18-
var assign = require('object-assign');
19-
20-
var ActionTypes = ChatConstants.ActionTypes;
21-
var CHANGE_EVENT = 'change';
2217

2318
var _messages = {};
2419

@@ -41,35 +36,20 @@ function _markAllInThreadRead(threadID) {
4136
}
4237
}
4338

44-
var MessageStore = assign({}, EventEmitter.prototype, {
45-
46-
emitChange: function() {
47-
this.emit(CHANGE_EVENT);
48-
},
39+
class MessageStore extends Fluent.Store {
4940

50-
/**
51-
* @param {function} callback
52-
*/
53-
addChangeListener: function(callback) {
54-
this.on(CHANGE_EVENT, callback);
55-
},
56-
57-
removeChangeListener: function(callback) {
58-
this.removeListener(CHANGE_EVENT, callback);
59-
},
60-
61-
get: function(id) {
41+
get(id) {
6242
return _messages[id];
63-
},
43+
}
6444

65-
getAll: function() {
45+
getAll() {
6646
return _messages;
67-
},
47+
}
6848

6949
/**
7050
* @param {string} threadID
7151
*/
72-
getAllForThread: function(threadID) {
52+
getAllForThread(threadID) {
7353
var threadMessages = [];
7454
for (var id in _messages) {
7555
if (_messages[id].threadID === threadID) {
@@ -85,44 +65,43 @@ var MessageStore = assign({}, EventEmitter.prototype, {
8565
return 0;
8666
});
8767
return threadMessages;
88-
},
68+
}
8969

90-
getAllForCurrentThread: function() {
70+
getAllForCurrentThread() {
9171
return this.getAllForThread(ThreadStore.getCurrentID());
9272
}
9373

94-
});
74+
}
9575

96-
MessageStore.dispatchToken = ChatAppDispatcher.register(function(action) {
76+
var actionHandlers = {
9777

98-
switch(action.type) {
78+
viewActionHandlers: {
9979

100-
case ActionTypes.CLICK_THREAD:
101-
ChatAppDispatcher.waitFor([ThreadStore.dispatchToken]);
80+
clickThread(threadID) {
81+
this.waitFor([ThreadStore]);
10282
_markAllInThreadRead(ThreadStore.getCurrentID());
103-
MessageStore.emitChange();
104-
break;
83+
},
10584

106-
case ActionTypes.CREATE_MESSAGE:
85+
createMessage(text, currentThreadID) {
10786
var message = ChatMessageUtils.getCreatedMessageData(
108-
action.text,
109-
action.currentThreadID
87+
text,
88+
currentThreadID
11089
);
11190
_messages[message.id] = message;
112-
MessageStore.emitChange();
113-
break;
91+
}
92+
93+
},
11494

115-
case ActionTypes.RECEIVE_RAW_MESSAGES:
116-
_addMessages(action.rawMessages);
117-
ChatAppDispatcher.waitFor([ThreadStore.dispatchToken]);
95+
serverActionHandlers: {
96+
97+
receiveAll(rawMessages) {
98+
_addMessages(rawMessages);
99+
this.waitFor([ThreadStore]);
118100
_markAllInThreadRead(ThreadStore.getCurrentID());
119-
MessageStore.emitChange();
120-
break;
101+
}
121102

122-
default:
123-
// do nothing
124103
}
125104

126-
});
105+
};
127106

128-
module.exports = MessageStore;
107+
module.exports = new MessageStore(ChatAppDispatcher, actionHandlers);

0 commit comments

Comments
 (0)