"use client"; import { useState, useEffect } from 'react'; import RAHChat from '@/components/agents/RAHChat'; import PaneHeader from './PaneHeader'; import { ChatPaneProps } from './types'; import type { ChatMessage } from '@/components/agents/hooks/useSSEChat'; export default function ChatPane({ slot, isActive, onPaneAction, onCollapse, onSwapPanes, openTabsData, activeTabId, activeDimension, onClearDimension, onNodeClick, delegations, chatMessages: externalMessages, setChatMessages: externalSetMessages, highlightedPassage, onClearPassage, }: ChatPaneProps) { const [rahMode, setRahMode] = useState<'easy' | 'hard'>('easy'); const [hasStarted, setHasStarted] = useState(false); // Use lifted state if provided, otherwise fall back to local state const [internalMessages, setInternalMessages] = useState([]); const rahMessages = (externalMessages as ChatMessage[]) ?? internalMessages; // eslint-disable-next-line @typescript-eslint/no-explicit-any const setRahMessages = (externalSetMessages as any) ?? setInternalMessages; // Load mode from localStorage useEffect(() => { if (typeof window === 'undefined') return; const stored = window.localStorage.getItem('rah-mode'); if (stored === 'easy' || stored === 'hard') { setRahMode(stored); } }, []); // Persist mode to localStorage useEffect(() => { if (typeof window === 'undefined') return; window.localStorage.setItem('rah-mode', rahMode); }, [rahMode]); // Listen for mode toggle events useEffect(() => { const handler = (event: Event) => { const detail = (event as CustomEvent<{ mode: 'easy' | 'hard' }>).detail; if (detail?.mode) { setRahMode(detail.mode); } }; window.addEventListener('rah:mode-toggle', handler as EventListener); return () => { window.removeEventListener('rah:mode-toggle', handler as EventListener); }; }, []); // Auto-start if there are existing messages useEffect(() => { if (rahMessages.length > 0 && !hasStarted) { setHasStarted(true); } }, [rahMessages.length, hasStarted]); return (
{!hasStarted ? (
{/* Start Chat button */}
) : ( )}
); }