'use client' import { cn } from '@/lib/utils' import { ChatList } from './chat-list' import { ChatPanel } from './chat-panel' import { EmptyScreen } from './empty-screen' import { useLocalStorage } from '@/lib/hooks/use-local-storage' import { useEffect, useState } from 'react' import { useUIState, useAIState } from '@aigxion/isdk/rsc' import { Session } from '@/lib/types' import { usePathname, useRouter } from 'next/navigation' import { Message } from '@/lib/chat/actions' import { useScrollAnchor } from '@/lib/hooks/use-scroll-anchor' import { toast } from 'sonner' export interface ChatProps extends React.ComponentProps<'div'> { initialMessages?: Message[] id?: string session?: Session missingKeys: string[] } export function Chat({ id, className, session, missingKeys }: ChatProps) { const router = useRouter() const path = usePathname() const [input, setInput] = useState('') const [messages] = useUIState() const [aiState] = useAIState() const [_, setNewChatId] = useLocalStorage('newChatId', id) useEffect(() => { if (session?.user) { if (!path.includes('chat') && messages.length === 1) { window.history.replaceState({}, '', `/chat/${id}`) } } }, [id, path, session?.user, messages]) useEffect(() => { const messagesLength = aiState.messages?.length if (messagesLength === 2) { router.refresh() } }, [aiState.messages, router]) useEffect(() => { setNewChatId(id) }) useEffect(() => { missingKeys.map(key => { toast.error(`Missing ${key} environment variable!`) }) }, [missingKeys]) const { messagesRef, scrollRef, visibilityRef, isAtBottom, scrollToBottom } = useScrollAnchor() return (
{messages.length ? ( ) : ( )}
) }