File size: 1,776 Bytes
780df80
79ae05b
780df80
7d94a77
780df80
 
 
 
 
7d94a77
780df80
 
79ae05b
7d94a77
780df80
 
 
 
 
 
 
79ae05b
 
 
 
 
 
780df80
79ae05b
 
7d94a77
 
 
79ae05b
 
780df80
79ae05b
 
780df80
 
 
79ae05b
 
7d94a77
 
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
"use client";
import { useChatContext } from "@/lib/store/ChatContext";
import { Message as MessageType } from "@/lib/types";
import React, { useEffect, useRef } from "react";
import Message from "./Message";

interface ChatHistoryProps {
  messages: MessageType[];
  isLoading: boolean;
  connectionMode: "agent" | "workflow";
}

// Traditional prop-based component
const ChatHistory: React.FC<ChatHistoryProps> = ({ messages, isLoading, connectionMode }) => {
  const messagesEndRef = useRef<HTMLDivElement>(null);

  useEffect(() => {
    messagesEndRef.current?.scrollIntoView({ behavior: "smooth" });
  }, [messages]);

  return (
    <div className="pb-24 overflow-auto focus-visible:outline-0" tabIndex={-1}>
      {messages.length === 0 ? (
        <div className="h-full flex flex-col items-center justify-center p-8 text-center">
          <div className="max-w-md space-y-2">
            <h2 className="text-2xl font-bold">Welcome to the KNet demo</h2>
            <p className="text-muted-foreground">Ask any research question to get started. The assistant will provide detailed answers backed by research and sources.</p>
          </div>
        </div>
      ) : (
        messages.map((message, index) => {
          const isLast = index === messages.length - 1;
          return <Message key={message.id} message={message} isLoading={isLast && isLoading} connectionMode={connectionMode} />;
        })
      )}

      <div ref={messagesEndRef} />
    </div>
  );
};

// Context-based component
export const ChatHistoryWithContext: React.FC = () => {
  const { chatState, connectionMode } = useChatContext();
  return <ChatHistory messages={chatState.messages} isLoading={chatState.isLoading} connectionMode={connectionMode} />;
};

export default ChatHistory;