File size: 1,737 Bytes
780df80
 
79ae05b
 
780df80
 
 
 
 
 
 
549f1d3
fcd8ded
79ae05b
780df80
 
 
549f1d3
780df80
 
 
 
 
 
 
 
79ae05b
780df80
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
"use client";
import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert";
import { useChatContext } from "@/lib/store/ChatContext";
import React from "react";
import ChatHistory from "./ChatHistory";
import MessageInput from "./MessageInput";
import ResearchControls from "./ResearchControls";
import ChatLayout from "./ui/ChatLayout";
import ConversationList from "./ui/ConversationList";

const ChatInterface = () => {
  const { chatState, conversations, abortResearch, userInputRef, researchOptions, sendMessage, newConversation, selectConversation, deleteConversation, deleteAllConversations, setResearchOptions, connectionMode } = useChatContext();

  const sidebar = <ConversationList conversations={conversations} onNewConversation={newConversation} onSelectConversation={selectConversation} onDeleteConversation={deleteConversation} onDeleteAllConversations={deleteAllConversations} />;

  const mainContent = (
    <div className="flex flex-col w-full h-full relative" tabIndex={-1}>
      <ChatHistory messages={chatState.messages} isLoading={chatState.isLoading} connectionMode={connectionMode} />

      {chatState.error && (
        <Alert variant="destructive" className="mx-2 my-2 mb-28 w-90 bg-red-950 text-red-50">
          <AlertTitle>Error</AlertTitle>
          <AlertDescription>{chatState.error}</AlertDescription>
        </Alert>
      )}

      <MessageInput onSendMessage={sendMessage} isLoading={chatState.isLoading} userInputRef={userInputRef} onCancel={abortResearch} />
    </div>
  );

  return <ChatLayout sidebar={sidebar} mainContent={mainContent} settingsPanel={<ResearchControls options={researchOptions} onOptionChange={setResearchOptions} />} />;
};

export default ChatInterface;