Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80698 views
1
/**
2
* This file is provided by Facebook for testing and evaluation purposes
3
* only. Facebook reserves all rights not expressly granted.
4
*
5
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
6
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
7
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
8
* FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
9
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
10
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
11
*/
12
13
var MessageComposer = require('./MessageComposer.react');
14
var MessageListItem = require('./MessageListItem.react');
15
var MessageStore = require('../stores/MessageStore');
16
var React = require('react');
17
var ThreadStore = require('../stores/ThreadStore');
18
19
function getStateFromStores() {
20
return {
21
messages: MessageStore.getAllForCurrentThread(),
22
thread: ThreadStore.getCurrent()
23
};
24
}
25
26
function getMessageListItem(message) {
27
return (
28
<MessageListItem
29
key={message.id}
30
message={message}
31
/>
32
);
33
}
34
35
var MessageSection = React.createClass({
36
37
getInitialState: function() {
38
return getStateFromStores();
39
},
40
41
componentDidMount: function() {
42
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
},
51
52
render: function() {
53
var messageListItems = this.state.messages.map(getMessageListItem);
54
return (
55
<div className="message-section">
56
<h3 className="message-thread-heading">{this.state.thread.name}</h3>
57
<ul className="message-list" ref="messageList">
58
{messageListItems}
59
</ul>
60
<MessageComposer threadID={this.state.thread.id}/>
61
</div>
62
);
63
},
64
65
componentDidUpdate: function() {
66
this._scrollToBottom();
67
},
68
69
_scrollToBottom: function() {
70
var ul = this.refs.messageList.getDOMNode();
71
ul.scrollTop = ul.scrollHeight;
72
},
73
74
/**
75
* Event handler for 'change' events coming from the MessageStore
76
*/
77
_onChange: function() {
78
this.setState(getStateFromStores());
79
}
80
81
});
82
83
module.exports = MessageSection;
84
85