@@ -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