@@ -291,37 +291,56 @@ export const ChannelList = <
291291
292292 const [ forceUpdate , setForceUpdate ] = useState ( 0 ) ;
293293 const { client, enableOfflineSupport } = useChatContext < StreamChatGenerics > ( ) ;
294- const channelManager = useMemo (
295- ( ) =>
296- client . createChannelManager ( {
297- eventHandlerOverrides : {
298- channelDeletedHandler : onChannelDeleted ,
299- channelHiddenHandler : onChannelHidden ,
300- channelTruncatedHandler : onChannelTruncated ,
301- channelVisibleHandler : onChannelVisible ,
302- memberUpdatedHandler : onChannelMemberUpdated
303- ? ( setChannels , event ) =>
304- onChannelMemberUpdated ( lockChannelOrder , setChannels , event , { filters, sort } )
305- : undefined ,
306- newMessageHandler : onNewMessage
307- ? ( setChannels , event ) =>
308- onNewMessage ( lockChannelOrder , setChannels , event , { filters, sort } )
309- : undefined ,
310- notificationAddedToChannelHandler : onAddedToChannel
311- ? ( setChannels , event ) => onAddedToChannel ( setChannels , event , { filters, sort } )
312- : undefined ,
313- notificationNewMessageHandler : onNewMessageNotification
314- ? ( setChannels , event ) =>
315- onNewMessageNotification ( setChannels , event , { filters, sort } )
316- : undefined ,
317- notificationRemovedFromChannelHandler : onRemovedFromChannel ,
318- } ,
319- options : { lockChannelOrder } ,
320- } ) ,
321- // FIXME: Move the setting of the overrides down to the LLC too
322- // eslint-disable-next-line react-hooks/exhaustive-deps
323- [ client ] ,
324- ) ;
294+ const channelManager = useMemo ( ( ) => client . createChannelManager ( { } ) , [ client ] ) ;
295+
296+ /**
297+ * This hook sets the event handler overrides in the channelManager internally
298+ * whenever they change. We do this to avoid recreating the channelManager instance
299+ * every time these change, as we want to keep it as static as possible.
300+ * This protects us from something like defining the overrides as inline functions
301+ * causing the manager instance to be recreated over and over again.
302+ */
303+ useEffect ( ( ) => {
304+ channelManager . setEventHandlerOverrides ( {
305+ channelDeletedHandler : onChannelDeleted ,
306+ channelHiddenHandler : onChannelHidden ,
307+ channelTruncatedHandler : onChannelTruncated ,
308+ channelVisibleHandler : onChannelVisible ,
309+ memberUpdatedHandler : onChannelMemberUpdated
310+ ? ( setChannels , event ) =>
311+ onChannelMemberUpdated ( lockChannelOrder , setChannels , event , { filters, sort } )
312+ : undefined ,
313+ newMessageHandler : onNewMessage
314+ ? ( setChannels , event ) =>
315+ onNewMessage ( lockChannelOrder , setChannels , event , { filters, sort } )
316+ : undefined ,
317+ notificationAddedToChannelHandler : onAddedToChannel
318+ ? ( setChannels , event ) => onAddedToChannel ( setChannels , event , { filters, sort } )
319+ : undefined ,
320+ notificationNewMessageHandler : onNewMessageNotification
321+ ? ( setChannels , event ) => onNewMessageNotification ( setChannels , event , { filters, sort } )
322+ : undefined ,
323+ notificationRemovedFromChannelHandler : onRemovedFromChannel ,
324+ } ) ;
325+ } , [
326+ channelManager ,
327+ filters ,
328+ lockChannelOrder ,
329+ onAddedToChannel ,
330+ onChannelDeleted ,
331+ onChannelHidden ,
332+ onChannelMemberUpdated ,
333+ onChannelTruncated ,
334+ onChannelVisible ,
335+ onNewMessage ,
336+ onNewMessageNotification ,
337+ onRemovedFromChannel ,
338+ sort ,
339+ ] ) ;
340+
341+ useEffect ( ( ) => {
342+ channelManager . setOptions ( { lockChannelOrder } ) ;
343+ } , [ channelManager , lockChannelOrder ] ) ;
325344
326345 useEffect ( ( ) => {
327346 channelManager . registerSubscriptions ( ) ;
0 commit comments