@@ -14,6 +14,7 @@ class Messages extends Component {
14
14
messages : [ ] ,
15
15
limit : 5 ,
16
16
} ;
17
+ this . unsubscribe = null ;
17
18
}
18
19
19
20
componentDidMount ( ) {
@@ -23,42 +24,40 @@ class Messages extends Component {
23
24
onListenForMessages = ( ) => {
24
25
this . setState ( { loading : true } ) ;
25
26
26
- this . props . firebase
27
+ this . unsubscribe = this . props . firebase
27
28
. 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
+ ) ;
45
39
}
40
+
41
+ this . setState ( {
42
+ messages,
43
+ loading : false ,
44
+ } ) ;
46
45
} ) ;
47
46
} ;
48
47
49
48
componentWillUnmount ( ) {
50
- this . props . firebase . messages ( ) . off ( ) ;
49
+ this . unsubscribe ( ) ;
51
50
}
52
51
53
52
onChangeText = event => {
54
53
this . setState ( { text : event . target . value } ) ;
55
54
} ;
56
55
57
56
onCreateMessage = ( event , authUser ) => {
58
- this . props . firebase . messages ( ) . push ( {
57
+ this . props . firebase . messages ( ) . add ( {
59
58
text : this . state . text ,
60
59
userId : authUser . uid ,
61
- createdAt : this . props . firebase . serverValue . TIMESTAMP ,
60
+ createdAt : this . props . firebase . fieldValue . serverTimestamp ( ) ,
62
61
} ) ;
63
62
64
63
this . setState ( { text : '' } ) ;
@@ -67,15 +66,15 @@ class Messages extends Component {
67
66
} ;
68
67
69
68
onEditMessage = ( message , text ) => {
70
- this . props . firebase . message ( message . uid ) . set ( {
69
+ this . props . firebase . message ( message . uid ) . update ( {
71
70
...message ,
72
71
text,
73
- editedAt : this . props . firebase . serverValue . TIMESTAMP ,
72
+ editedAt : this . props . firebase . fieldValue . serverTimestamp ( ) ,
74
73
} ) ;
75
74
} ;
76
75
77
76
onRemoveMessage = uid => {
78
- this . props . firebase . message ( uid ) . remove ( ) ;
77
+ this . props . firebase . message ( uid ) . delete ( ) ;
79
78
} ;
80
79
81
80
onNextPage = ( ) => {
@@ -106,7 +105,7 @@ class Messages extends Component {
106
105
messages = { messages . map ( message => ( {
107
106
...message ,
108
107
user : users
109
- ? users [ message . userId ]
108
+ ? users [ message . userId ] || { }
110
109
: { userId : message . userId } ,
111
110
} ) ) }
112
111
onEditMessage = { this . onEditMessage }
0 commit comments