@@ -14,6 +14,7 @@ class Messages extends Component {
1414 messages : [ ] ,
1515 limit : 5 ,
1616 } ;
17+ this . unsubscribe = null ;
1718 }
1819
1920 componentDidMount ( ) {
@@ -23,42 +24,40 @@ class Messages extends Component {
2324 onListenForMessages = ( ) => {
2425 this . setState ( { loading : true } ) ;
2526
26- this . props . firebase
27+ this . unsubscribe = this . props . firebase
2728 . messages ( )
28- . orderByChild ( 'createdAt' )
29- . limitToLast ( this . state . limit )
30- . on ( 'value' , snapshot => {
31- const messageObject = snapshot . val ( ) ;
32-
33- if ( messageObject ) {
34- const messageList = Object . keys ( messageObject ) . map ( key => ( {
35- ...messageObject [ key ] ,
36- uid : key ,
37- } ) ) ;
38-
39- this . setState ( {
40- messages : messageList ,
41- loading : false ,
42- } ) ;
43- } else {
44- this . setState ( { messages : null , loading : false } ) ;
29+ . orderBy ( 'createdAt' , 'desc' )
30+ . limit ( this . state . limit ) // firestore doesn't have limitLast, so we use combination of order desc and limit
31+ . onSnapshot ( snapshot => {
32+ let messages ;
33+
34+ if ( snapshot . size ) {
35+ messages = [ ] ;
36+ snapshot . forEach ( doc =>
37+ messages . push ( { ...doc . data ( ) , uid : doc . id } ) ,
38+ ) ;
4539 }
40+
41+ this . setState ( {
42+ messages,
43+ loading : false ,
44+ } ) ;
4645 } ) ;
4746 } ;
4847
4948 componentWillUnmount ( ) {
50- this . props . firebase . messages ( ) . off ( ) ;
49+ this . unsubscribe ( ) ;
5150 }
5251
5352 onChangeText = event => {
5453 this . setState ( { text : event . target . value } ) ;
5554 } ;
5655
5756 onCreateMessage = ( event , authUser ) => {
58- this . props . firebase . messages ( ) . push ( {
57+ this . props . firebase . messages ( ) . add ( {
5958 text : this . state . text ,
6059 userId : authUser . uid ,
61- createdAt : this . props . firebase . serverValue . TIMESTAMP ,
60+ createdAt : this . props . firebase . fieldValue . serverTimestamp ( ) ,
6261 } ) ;
6362
6463 this . setState ( { text : '' } ) ;
@@ -67,15 +66,15 @@ class Messages extends Component {
6766 } ;
6867
6968 onEditMessage = ( message , text ) => {
70- this . props . firebase . message ( message . uid ) . set ( {
69+ this . props . firebase . message ( message . uid ) . update ( {
7170 ...message ,
7271 text,
73- editedAt : this . props . firebase . serverValue . TIMESTAMP ,
72+ editedAt : this . props . firebase . fieldValue . serverTimestamp ( ) ,
7473 } ) ;
7574 } ;
7675
7776 onRemoveMessage = uid => {
78- this . props . firebase . message ( uid ) . remove ( ) ;
77+ this . props . firebase . message ( uid ) . delete ( ) ;
7978 } ;
8079
8180 onNextPage = ( ) => {
@@ -106,7 +105,7 @@ class Messages extends Component {
106105 messages = { messages . map ( message => ( {
107106 ...message ,
108107 user : users
109- ? users [ message . userId ]
108+ ? users [ message . userId ] || { }
110109 : { userId : message . userId } ,
111110 } ) ) }
112111 onEditMessage = { this . onEditMessage }
0 commit comments