hiento09 86f0ffc7d1
Chore/disable submodule (#56)
* Chore disable git submodule for web-client and app-backend

* Chore add newest source code of app-backend and web-client

---------

Co-authored-by: Hien To <tominhhien97@gmail.com>
2023-09-05 16:29:07 +07:00

92 lines
2.9 KiB
TypeScript

"use client";
import { useState, useEffect } from "react";
import { ChatBody } from "../ChatBody";
import { InputToolbar } from "../InputToolbar";
import { UserToolbar } from "../UserToolbar";
import ModelMenu from "../ModelMenu";
import { useStore } from "@/_models/RootStore";
import { observer } from "mobx-react-lite";
import ConfirmDeleteConversationModal from "../ConfirmDeleteConversationModal";
import { ModelDetailSideBar } from "../ModelDetailSideBar";
import NewChatBlankState from "../NewChatBlankState";
import useGetCurrentUser from "@/_hooks/useGetCurrentUser";
import {
DeleteConversationMutation,
DeleteConversationDocument,
} from "@/graphql";
import { useMutation } from "@apollo/client";
const ChatContainer: React.FC = observer(() => {
const [prefillPrompt, setPrefillPrompt] = useState("");
const { historyStore } = useStore();
const { user } = useGetCurrentUser();
const showBodyChat = historyStore.activeConversationId != null;
const conversation = historyStore.getActiveConversation();
const [deleteConversation] = useMutation<DeleteConversationMutation>(
DeleteConversationDocument
);
useEffect(() => {
if (!user) {
historyStore.clearAllConversations();
}
}, [user]);
const [open, setOpen] = useState(false);
const onConfirmDelete = () => {
setPrefillPrompt("");
historyStore.closeModelDetail();
if (conversation?.id) {
deleteConversation({ variables: { id: conversation.id } }).then(() =>
historyStore.deleteConversationById(conversation.id)
);
}
setOpen(false);
};
const onSuggestPromptClick = (prompt: string) => {
if (prompt !== prefillPrompt) {
setPrefillPrompt(prompt);
}
};
return (
<div className="flex flex-1 h-full overflow-y-hidden">
<ConfirmDeleteConversationModal
open={open}
setOpen={setOpen}
onConfirmDelete={onConfirmDelete}
/>
{showBodyChat ? (
<div className="flex-1 flex flex-col w-full">
<div className="flex w-full overflow-hidden flex-shrink-0 px-3 py-1 border-b dark:bg-gray-950 border-gray-200 bg-white shadow-sm sm:px-3 lg:px-3">
{/* Separator */}
<div
className="h-full w-px bg-gray-200 lg:hidden"
aria-hidden="true"
/>
<div className="flex justify-between self-stretch flex-1">
<UserToolbar />
<ModelMenu
onDeleteClick={() => setOpen(true)}
onCreateConvClick={() => {}}
/>
</div>
</div>
<div className="flex flex-col h-full px-1 sm:px-2 lg:px-3 overflow-hidden">
<ChatBody onPromptSelected={onSuggestPromptClick} />
<InputToolbar prefillPrompt={prefillPrompt} />
</div>
</div>
) : (
<NewChatBlankState />
)}
<ModelDetailSideBar onPromptClick={onSuggestPromptClick} />
</div>
);
});
export default ChatContainer;