@@ -3,13 +3,13 @@ import {useSelector} from 'react-redux';
33import { useTheme } from '../hooks/useTheme' ;
44import { RootState } from '../store' ;
55import { isArchive } from '../services/appConfig' ;
6- import WebSocketService from '../services/websocket' ;
6+
7+ import { debounce , resetTabState , updateTabs } from '../utils/tabHandling' ;
8+ import WebSocketService from "../services/websocket" ;
79import Prism from 'prismjs' ;
8- import { Message } from ' ../types/messages' ;
10+ import { Message } from " ../types/messages" ;
911import Spinner from './common/Spinner' ;
1012import './MessageList.css' ;
11- import mermaid from 'mermaid' ;
12- import { debouncedUpdate } from '../store/slices/messageSlice' ;
1313
1414const DEBUG_LOGGING = process . env . NODE_ENV === 'development' ;
1515const CONTAINER_ID = 'message-list-' + Math . random ( ) . toString ( 36 ) . substr ( 2 , 9 ) ;
@@ -237,37 +237,24 @@ const MessageList: React.FC<MessageListProps> = ({messages: propMessages}) => {
237237 mounted = false ;
238238 } ;
239239 } , [ messages , verboseMode ] ) ;
240-
241- useTheme ( ) ;
242-
243-
244- console . log ( '[MessageList]: Rendering component' ) ;
245-
246- // --- Mermaid and Tabs Effect ---
247- React . useLayoutEffect ( ( ) => {
248- // Always update tabs after DOM update
249- debouncedUpdate ( ) ;
250- if ( ! messageListRef . current ) {
251- console . error ( `[MessageList ${ CONTAINER_ID } ] Critical: messageListRef is null` ) ;
252- return ;
253- }
240+ const debouncedUpdateTabs = React . useCallback (
241+ debounce ( ( ) => {
254242 try {
255- // Always re-render all mermaid blocks, not just unprocessed ones, to avoid disappearing diagrams
256- const mermaidBlocks = messageListRef . current . querySelectorAll ( '.mermaid' ) ;
257- if ( mermaidBlocks . length > 0 ) {
258- console . info ( "[MessageList] Rendering mermaid diagrams" ) ;
259- mermaid . initialize ( { startOnLoad : true } ) ;
260- mermaidBlocks . forEach ( ( el ) => {
261- el . classList . add ( 'mermaid-processed' ) ;
262- el . classList . remove ( 'mermaid' ) ;
263- } ) ;
264- console . info ( "[MessageList] Mermaid diagrams rendered successfully" ) ;
265- }
243+ updateTabs ( ) ;
266244 } catch ( error ) {
267- console . error ( `[MessageList ${ CONTAINER_ID } ] Failed to render mermaid diagram` , error ) ;
245+ console . error ( `[MessageList ${ CONTAINER_ID } ] Failed to update tabs` , error ) ;
246+ resetTabState ( ) ;
268247 }
269- // Use only dependencies that affect DOM: finalMessages, verboseMode, theme, etc.
270- } , [ finalMessages , verboseMode , currentTheme ] ) ;
248+ } , 250 ) ,
249+ [ ]
250+ ) ;
251+
252+ useTheme ( ) ;
253+ console . log ( 'MessageList' , 'Rendering component' , { hasPropMessages : ! ! propMessages } ) ;
254+
255+ React . useEffect ( ( ) => {
256+ debouncedUpdateTabs ( ) ;
257+ } , [ finalMessages ] ) ;
271258
272259 return (
273260 < div
0 commit comments