'use client'; import React from 'react'; import { Plus, MessageSquare } from 'lucide-react'; import { cn } from '@/lib/utils'; import { ScrollArea } from '@/components/ui/scroll-area'; import type { ControlCenterConversation } from '@/types/control-center'; interface ConversationSidebarProps { /** List of conversations to display */ conversations: ControlCenterConversation[]; /** ID of the currently selected conversation */ currentId?: string; /** Callback when a conversation is selected */ onSelect: (id: string) => void; /** Callback when the user wants to start a new conversation */ onNew: () => void; } /** * Format a date string to relative time (e.g., "2 hours ago", "Yesterday") */ function formatRelativeTime(dateString: string): string { const date = new Date(dateString); const now = new Date(); const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000); if (diffInSeconds < 60) { return 'Just now'; } const diffInMinutes = Math.floor(diffInSeconds / 60); if (diffInMinutes < 60) { return `${diffInMinutes} minute${diffInMinutes !== 1 ? 's' : ''} ago`; } const diffInHours = Math.floor(diffInMinutes / 60); if (diffInHours < 24) { return `${diffInHours} hour${diffInHours !== 1 ? 's' : ''} ago`; } const diffInDays = Math.floor(diffInHours / 24); if (diffInDays === 1) { return 'Yesterday'; } if (diffInDays < 7) { return `${diffInDays} days ago`; } const diffInWeeks = Math.floor(diffInDays / 7); if (diffInWeeks < 4) { return `${diffInWeeks} week${diffInWeeks !== 1 ? 's' : ''} ago`; } const diffInMonths = Math.floor(diffInDays / 30); if (diffInMonths < 12) { return `${diffInMonths} month${diffInMonths !== 1 ? 's' : ''} ago`; } const diffInYears = Math.floor(diffInDays / 365); return `${diffInYears} year${diffInYears !== 1 ? 's' : ''} ago`; } /** * ConversationSidebar - Displays conversation history for the Control Center * * Shows a scrollable list of past conversations with relative timestamps, * plus a button to start new conversations. */ export const ConversationSidebar: React.FC = ({ conversations, currentId, onSelect, onNew, }) => { return (
{/* Header with New Chat button */}
{/* Conversation list */}
{conversations.length === 0 ? ( // Empty state

No conversations yet

Start a new chat to begin exploring your GHL account

) : ( // Conversation items
{conversations.map((conversation) => { const isSelected = conversation.id === currentId; const displayTitle = conversation.title || 'New conversation'; return ( ); })}
)}
); }; export default ConversationSidebar;