@@ -174,9 +174,27 @@ const ChannelListProvider: React.FC<ChannelListProviderProps> = (props: ChannelL
174
174
175
175
const [ channelSource , setChannelSource ] = useState < GroupChannelListQuerySb > ( ) ;
176
176
const [ sdkChannelHandlerId , setSdkChannelHandlerId ] = useState < string | null > ( null ) ;
177
- const [ typingHandlerId , setTypingHandlerId ] = useState < string | null > ( null ) ;
178
177
const [ typingChannels , setTypingChannels ] = useState < Array < GroupChannel > > ( [ ] ) ;
179
178
179
+ const [ channelsTomarkAsRead , setChannelsToMarkAsRead ] = useState ( [ ] ) ;
180
+ useEffect ( ( ) => {
181
+ // https://stackoverflow.com/a/60907638
182
+ let isMounted = true ;
183
+ if ( channelsTomarkAsRead ?. length > 0 ) {
184
+ channelsTomarkAsRead ?. forEach ( ( c , idx ) => {
185
+ // Plan-based rate limits - minimum limit is 5 requests per second
186
+ setTimeout ( ( ) => {
187
+ if ( isMounted ) {
188
+ c ?. markAsDelivered ( ) ;
189
+ }
190
+ } , 2000 * idx ) ;
191
+ } ) ;
192
+ }
193
+ return ( ) => {
194
+ isMounted = false ;
195
+ }
196
+ } , [ channelsTomarkAsRead ] ) ;
197
+
180
198
useEffect ( ( ) => {
181
199
const subscriber = pubSubHandler ( pubSub , channelListDispatcher ) ;
182
200
return ( ) => {
@@ -198,6 +216,7 @@ const ChannelListProvider: React.FC<ChannelListProviderProps> = (props: ChannelL
198
216
logger,
199
217
sortChannelList,
200
218
disableAutoSelect,
219
+ setChannelsToMarkAsRead,
201
220
} ) ;
202
221
} else {
203
222
logger . info ( 'ChannelList: Removing channelHandlers' ) ;
@@ -222,8 +241,9 @@ const ChannelListProvider: React.FC<ChannelListProviderProps> = (props: ChannelL
222
241
} , [ sdkIntialized , userFilledChannelListQuery , sortChannelList ] ) ;
223
242
224
243
useEffect ( ( ) => {
244
+ let typingHandlerId = null ;
225
245
if ( sdk ?. groupChannel ?. addGroupChannelHandler ) {
226
- const handlerId = uuidv4 ( )
246
+ typingHandlerId = uuidv4 ( ) ;
227
247
const handler = new GroupChannelHandler ( {
228
248
onTypingStatusUpdated : ( channel ) => {
229
249
const typingMemberCount = channel ?. getTypingUsers ( ) ?. length
@@ -273,11 +293,10 @@ const ChannelListProvider: React.FC<ChannelListProviderProps> = (props: ChannelL
273
293
} ) ;
274
294
} ,
275
295
} ) ;
276
- sdk ?. groupChannel ?. addGroupChannelHandler ( handlerId , handler )
277
- setTypingHandlerId ( handlerId )
296
+ sdk ?. groupChannel ?. addGroupChannelHandler ( typingHandlerId , handler ) ;
278
297
}
279
298
return ( ) => {
280
- if ( sdk ?. groupChannel ?. removeGroupChannelHandler ) {
299
+ if ( sdk ?. groupChannel ?. removeGroupChannelHandler && typingHandlerId ) {
281
300
sdk . groupChannel . removeGroupChannelHandler ( typingHandlerId ) ;
282
301
}
283
302
}
0 commit comments