khronoz's picture
V.0.3.0 (#28)
fdaf912 unverified
"use client";
import { useChat } from "ai/react";
import { ChatInput, ChatMessages } from "@/app/components/ui/chat";
import { AutofillQuestion } from "./ui/autofill-prompt";
import { QueryMenu, QuerySelection, QueryDocumentUpload, QueryCollectionManage } from "./ui/query";
import { useSession } from "next-auth/react";
import { useState } from "react";
import { ToastContainer } from 'react-toastify';
import 'react-toastify/dist/ReactToastify.css';
export default function QuerySection() {
const { data: session } = useSession();
const supabaseAccessToken = session?.supabaseAccessToken;
const [collSelectedId, setCollSelectedId] = useState<string>('');
const [collSelectedName, setCollSelectedName] = useState<string>('');
const [showChat, setShowChat] = useState<boolean>(true);
const [showUpload, setShowUpload] = useState<boolean>(false);
const [showManage, setShowManage] = useState<boolean>(false);
const {
messages,
input,
isLoading,
handleSubmit,
handleInputChange,
reload,
stop,
} = useChat({
api: process.env.NEXT_PUBLIC_CHAT_API,
headers: {
// Add the access token to the request headers
'Authorization': `Bearer ${supabaseAccessToken}`,
},
body: {
// Add the selected document to the request body
collection_id: collSelectedId,
},
});
return (
<div className="max-w-5xl w-full rounded-xl bg-white dark:bg-zinc-700/30 dark:from-inherit shadow-xl space-y-4 px-4 pb-4">
{/* Toast Container */}
<ToastContainer />
{/* Menu Section */}
<QueryMenu
showUpload={showUpload}
setShowUpload={setShowUpload}
showChat={showChat}
setShowChat={setShowChat}
showManage={showManage}
setShowManage={setShowManage}
setCollSelectedId={setCollSelectedId}
/>
{/* Document Selection/Chat Section */}
{showChat ?
(collSelectedId ?
<>
{/* Chat Section */}
<ChatMessages
messages={messages}
isLoading={isLoading}
reload={reload}
stop={stop}
/>
<AutofillQuestion
collSelectedId={collSelectedId}
collSelectedName={collSelectedName}
messages={messages}
isLoading={isLoading}
handleSubmit={handleSubmit}
handleInputChange={handleInputChange}
handleCollIdSelect={setCollSelectedId}
input={input}
/>
<ChatInput
input={input}
handleSubmit={handleSubmit}
handleInputChange={handleInputChange}
isLoading={isLoading}
/>
</>
:
(
<QuerySelection
collSelectedId={collSelectedId}
collSelectedName={collSelectedName}
handleCollIdSelect={setCollSelectedId}
handleCollNameSelect={setCollSelectedName}
/>))
: null
}
{/* Document Upload Section */}
{showUpload ? <QueryDocumentUpload /> : null}
{/* Document Manage Section */}
{showManage ? <QueryCollectionManage /> : null}
</div>
);
}