@@ -8,7 +8,7 @@ import * as ImagePicker from 'expo-image-picker'
8
8
import type { ImagePickerAsset } from 'expo-image-picker'
9
9
import { PermissionStatus } from 'expo-modules-core'
10
10
import moment from 'moment'
11
- import React , { useCallback , useMemo , useRef , useState } from 'react'
11
+ import React , { useRef , useState } from 'react'
12
12
import {
13
13
Button ,
14
14
FlatList ,
@@ -30,10 +30,11 @@ import {
30
30
DecodedMessage ,
31
31
StaticAttachmentContent ,
32
32
ReplyContent ,
33
- useClient ,
33
+ Client ,
34
34
} from 'xmtp-react-native-sdk'
35
35
36
36
import { NavigationParamList } from './Navigation'
37
+ import { useXmtp } from './XmtpContext'
37
38
import {
38
39
useConversation ,
39
40
useMessage ,
@@ -56,7 +57,7 @@ export default function ConversationScreen({
56
57
} : NativeStackScreenProps < NavigationParamList , 'conversation' > ) {
57
58
const { topic } = route . params
58
59
const messageListRef = useRef < FlatList > ( null )
59
- const {
60
+ let {
60
61
data : messages ,
61
62
refetch : refreshMessages ,
62
63
isFetching,
@@ -73,15 +74,10 @@ export default function ConversationScreen({
73
74
fileUri : attachment ?. image ?. uri || attachment ?. file ?. uri ,
74
75
mimeType : attachment ?. file ?. mimeType ,
75
76
} )
76
-
77
- const filteredMessages = useMemo (
78
- ( ) =>
79
- ( messages ?? [ ] ) ?. filter (
80
- ( message ) => ! hiddenMessageTypes . includes ( message . contentTypeId )
81
- ) ,
82
- [ messages ]
77
+ messages = ( messages || [ ] ) . filter (
78
+ ( message ) => ! hiddenMessageTypes . includes ( message . contentTypeId )
83
79
)
84
-
80
+ // console.log("messages", JSON.stringify(messages, null, 2));
85
81
const sendMessage = async ( content : any ) => {
86
82
setSending ( true )
87
83
console . log ( 'Sending message' , content )
@@ -106,22 +102,16 @@ export default function ConversationScreen({
106
102
const sendRemoteAttachmentMessage = ( ) =>
107
103
sendMessage ( { remoteAttachment } ) . then ( ( ) => setAttachment ( null ) )
108
104
const sendTextMessage = ( ) => sendMessage ( { text } ) . then ( ( ) => setText ( '' ) )
109
- const scrollToMessageId = useCallback (
110
- ( messageId : string ) => {
111
- const index = ( filteredMessages || [ ] ) . findIndex (
112
- ( m ) => m . id === messageId
113
- )
114
- if ( index === - 1 ) {
115
- return
116
- }
117
- return messageListRef . current ?. scrollToIndex ( {
118
- index,
119
- animated : true ,
120
- } )
121
- } ,
122
- [ filteredMessages ]
123
- )
124
-
105
+ const scrollToMessageId = ( messageId : string ) => {
106
+ const index = ( messages || [ ] ) . findIndex ( ( m ) => m . id === messageId )
107
+ if ( index === - 1 ) {
108
+ return
109
+ }
110
+ return messageListRef . current ?. scrollToIndex ( {
111
+ index,
112
+ animated : true ,
113
+ } )
114
+ }
125
115
return (
126
116
< SafeAreaView style = { { flex : 1 } } >
127
117
< KeyboardAvoidingView
@@ -152,7 +142,7 @@ export default function ConversationScreen({
152
142
contentContainerStyle = { { paddingBottom : 100 } }
153
143
refreshing = { isFetching || isRefetching }
154
144
onRefresh = { refreshMessages }
155
- data = { filteredMessages }
145
+ data = { messages }
156
146
inverted
157
147
keyboardDismissMode = "none"
158
148
keyExtractor = { ( message ) => message . id }
@@ -164,9 +154,9 @@ export default function ConversationScreen({
164
154
onReply = { ( ) => setReplyingTo ( message . id ) }
165
155
onMessageReferencePress = { scrollToMessageId }
166
156
showSender = {
167
- index === ( filteredMessages || [ ] ) . length - 1 ||
168
- ( index + 1 < ( filteredMessages || [ ] ) . length &&
169
- filteredMessages ! [ index + 1 ] . senderAddress !==
157
+ index === ( messages || [ ] ) . length - 1 ||
158
+ ( index + 1 < ( messages || [ ] ) . length &&
159
+ messages ! [ index + 1 ] . senderAddress !==
170
160
message . senderAddress )
171
161
}
172
162
/>
@@ -1056,7 +1046,7 @@ function MessageContents({
1056
1046
contentTypeId : string
1057
1047
content : any
1058
1048
} ) {
1059
- const { client } = useClient ( )
1049
+ const { client } : { client : Client < any > } = useXmtp ( )
1060
1050
1061
1051
if ( contentTypeId === 'xmtp.org/text:1.0' ) {
1062
1052
const text : string = content
@@ -1090,8 +1080,8 @@ function MessageContents({
1090
1080
if ( contentTypeId === 'xmtp.org/reply:1.0' ) {
1091
1081
const replyContent : ReplyContent = content
1092
1082
const replyContentType = replyContent . contentType
1093
- const codec = client ? .codecRegistry [ replyContentType ]
1094
- const actualReplyContent = codec ? .decode ( replyContent . content )
1083
+ const codec = client . codecRegistry [ replyContentType ]
1084
+ const actualReplyContent = codec . decode ( replyContent . content )
1095
1085
1096
1086
return (
1097
1087
< View >
0 commit comments