'use client'; import React, { useEffect, useRef } from 'react'; import { useChatContext } from './ChatProvider'; import { AIMessageBubble } from './AIMessageBubble'; import { UserMessageBubble } from './UserMessageBubble'; import { cn } from '@/lib/utils'; import type { ControlCenterMessage } from '@/types/control-center'; // ============================================================================= // Types // ============================================================================= interface MessageListProps { className?: string; } // ============================================================================= // System Message Component // ============================================================================= interface SystemMessageProps { message: ControlCenterMessage; } function SystemMessage({ message }: SystemMessageProps) { return (
{message.content}
); } // ============================================================================= // Empty State Component // ============================================================================= function EmptyState() { return (

Start a Conversation

Ask me anything about your CRM data, create automations, or get help managing your commercial real estate business.

); } // ============================================================================= // Loading Indicator // ============================================================================= function LoadingIndicator() { return (
); } // ============================================================================= // Main Component // ============================================================================= export function MessageList({ className }: MessageListProps) { const { currentConversation, isLoading, isStreaming, streamingContent, } = useChatContext(); const scrollRef = useRef(null); const messagesEndRef = useRef(null); // Auto-scroll to bottom when new messages arrive or streaming updates useEffect(() => { if (messagesEndRef.current) { messagesEndRef.current.scrollIntoView({ behavior: 'smooth' }); } }, [currentConversation?.messages, streamingContent]); const messages = currentConversation?.messages || []; const hasMessages = messages.length > 0 || isStreaming || streamingContent; return (
{!hasMessages && !isLoading ? ( ) : (
{messages.map((message) => { switch (message.role) { case 'user': return ( ); case 'assistant': return ( ); case 'system': return ( ); default: return null; } })} {/* Show streaming content */} {isStreaming && streamingContent && ( )} {/* Show loading indicator when waiting for response but not yet streaming */} {isLoading && !isStreaming && !streamingContent && ( )} {/* Scroll anchor */}
)}
); } export default MessageList;