Skip to content

Commit d42dd74

Browse files
committed
refresh messages after reconnection
1 parent 7ee8a38 commit d42dd74

1 file changed

Lines changed: 55 additions & 34 deletions

File tree

  • react-native-sample/SendBirdReactNativeSample/src/pages

react-native-sample/SendBirdReactNativeSample/src/pages/chat.js

Lines changed: 55 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ export default class Chat extends Component {
3434
text: '',
3535
disabled: true,
3636
show: false,
37-
lastMessage: null
37+
lastMessage: null,
38+
hasRendered: false,
3839
};
3940
this._onBackPress = this._onBackPress.bind(this);
4041
this._onSend = this._onSend.bind(this);
@@ -45,48 +46,68 @@ export default class Chat extends Component {
4546
}
4647

4748
componentWillUnmount() {
48-
sb.removeChannelHandler('MessageHandler');
49+
sb.removeChannelHandler('ChatView');
50+
sb.removeConnectionHandler('ChatView')
4951
}
5052

5153
componentDidMount() {
54+
console.log("componentDidMount");
5255
var _SELF = this;
53-
_SELF._getChannelMessage();
54-
if (_SELF.state.channel.channelType == 'group') {
55-
_SELF.state.channel.markAsRead();
56-
}
56+
if (!_SELF.state.hasRendered){
57+
_SELF.state.hasRendered = true;
58+
_SELF._getChannelMessage(false);
59+
if (_SELF.state.channel.channelType == 'group') {
60+
_SELF.state.channel.markAsRead();
61+
}
5762

58-
// channel handler
59-
var ChannelHandler = new sb.ChannelHandler();
60-
ChannelHandler.onMessageReceived = function(channel, message){
61-
if (channel.url == _SELF.state.channel.url) {
62-
var _messages = [];
63-
if (message.sender.userId == _SELF.state.lastMessage.sender.userId) {
64-
message.sender.isDisplay = false;
65-
_messages.push(message);
66-
} else {
67-
_messages.push(message);
63+
// channel handler
64+
var ChannelHandler = new sb.ChannelHandler();
65+
ChannelHandler.onMessageReceived = function(channel, message){
66+
if (channel.url == _SELF.state.channel.url) {
67+
var _messages = [];
68+
if (message.sender.userId == _SELF.state.lastMessage.sender.userId) {
69+
message.sender.isDisplay = false;
70+
_messages.push(message);
71+
} else {
72+
_messages.push(message);
73+
}
74+
var _newMessageList = _messages.concat(_SELF.state.messages);
75+
_SELF.setState({
76+
messages: _newMessageList,
77+
dataSource: _SELF.state.dataSource.cloneWithRows(_newMessageList)
78+
});
79+
_SELF.state.lastMessage = message;
80+
if (_SELF.state.channel.channelType == 'group') {
81+
_SELF.state.channel.markAsRead();
82+
_SELF.state.channel.lastMessage = message;
83+
}
6884
}
85+
};
6986

70-
var _newMessageList = _messages.concat(_SELF.state.messages);
71-
_SELF.setState({
72-
messages: _newMessageList,
73-
dataSource: _SELF.state.dataSource.cloneWithRows(_newMessageList)
74-
});
75-
_SELF.state.lastMessage = message;
76-
_SELF.state.channel.lastMessage = message;
87+
ChannelHandler.onUserJoined = function(channel, user) {
88+
_SELF.props.route.refresh(_SELF.state.channel);
89+
};
90+
ChannelHandler.onUserLeft = function(channel, user) {
91+
_SELF.props.route.refresh(_SELF.state.channel);
92+
};
93+
sb.addChannelHandler('ChatView', ChannelHandler);
94+
95+
var ConnectionHandler = new sb.ConnectionHandler();
96+
ConnectionHandler.onReconnectSucceeded = function(){
97+
_SELF._getChannelMessage(true);
7798
}
78-
};
79-
ChannelHandler.onUserJoined = function(channel, user) {
80-
_SELF.props.route.refresh(_SELF.state.channel);
81-
};
82-
ChannelHandler.onUserLeft = function(channel, user) {
83-
_SELF.props.route.refresh(_SELF.state.channel);
84-
};
85-
sb.addChannelHandler('MessageHandler', ChannelHandler);
99+
sb.addConnectionHandler('ChatView', ConnectionHandler);
100+
}
86101
}
87-
88-
_getChannelMessage() {
102+
103+
_getChannelMessage(refresh) {
89104
var _SELF = this;
105+
106+
if(refresh){
107+
_SELF.state.messageQuery = _SELF.props.route.channel.createPreviousMessageListQuery();
108+
_SELF.state.messages = [];
109+
}
110+
90111
if (!this.state.messageQuery.hasMore) {
91112
return;
92113
}
@@ -264,7 +285,7 @@ export default class Chat extends Component {
264285
<View style={[styles.chatContainer, {transform: [{ scaleY: -1 }]}]}>
265286
<ListView
266287
enableEmptySections={true}
267-
onEndReached={() => this._getChannelMessage()}
288+
onEndReached={() => this._getChannelMessage(false)}
268289
onEndReachedThreshold={PULLDOWN_DISTANCE}
269290
dataSource={this.state.dataSource}
270291
renderRow={(rowData) => {

0 commit comments

Comments
 (0)