@@ -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,37 @@ 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 } ) ;
45- }
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 messageList = [ ] ;
33+
34+ snapshot . forEach ( doc =>
35+ messageList . push ( { ...doc . data ( ) , uid : doc . id } ) ,
36+ ) ;
37+
38+ this . setState ( {
39+ messages : messageList . reverse ( ) ,
40+ loading : false ,
41+ } ) ;
4642 } ) ;
4743 } ;
4844
4945 componentWillUnmount ( ) {
50- this . props . firebase . messages ( ) . off ( ) ;
46+ this . unsubscribe && this . unsubscribe ( ) ;
5147 }
5248
5349 onChangeText = event => {
5450 this . setState ( { text : event . target . value } ) ;
5551 } ;
5652
5753 onCreateMessage = ( event , authUser ) => {
58- this . props . firebase . messages ( ) . push ( {
54+ this . props . firebase . messages ( ) . add ( {
5955 text : this . state . text ,
6056 userId : authUser . uid ,
61- createdAt : this . props . firebase . serverValue . TIMESTAMP ,
57+ createdAt : this . props . firebase . fieldValue . serverTimestamp ( ) ,
6258 } ) ;
6359
6460 this . setState ( { text : '' } ) ;
@@ -67,15 +63,15 @@ class Messages extends Component {
6763 } ;
6864
6965 onEditMessage = ( message , text ) => {
70- this . props . firebase . message ( message . uid ) . set ( {
66+ this . props . firebase . message ( message . uid ) . update ( {
7167 ...message ,
7268 text,
73- editedAt : this . props . firebase . serverValue . TIMESTAMP ,
69+ editedAt : this . props . firebase . fieldValue . serverTimestamp ( ) ,
7470 } ) ;
7571 } ;
7672
7773 onRemoveMessage = uid => {
78- this . props . firebase . message ( uid ) . remove ( ) ;
74+ this . props . firebase . message ( uid ) . delete ( ) ;
7975 } ;
8076
8177 onNextPage = ( ) => {
@@ -106,7 +102,7 @@ class Messages extends Component {
106102 messages = { messages . map ( message => ( {
107103 ...message ,
108104 user : users
109- ? users [ message . userId ]
105+ ? users [ message . userId ] || { }
110106 : { userId : message . userId } ,
111107 } ) ) }
112108 onEditMessage = { this . onEditMessage }
0 commit comments