|
@@ -11,6 +11,7 @@ import SimpleBar from 'simplebar-react';
|
|
|
import { apiv3Post } from '~/client/util/apiv3-client';
|
|
import { apiv3Post } from '~/client/util/apiv3-client';
|
|
|
import { toastError } from '~/client/util/toastr';
|
|
import { toastError } from '~/client/util/toastr';
|
|
|
import { MessageErrorCode, StreamErrorCode } from '~/features/openai/interfaces/message-error';
|
|
import { MessageErrorCode, StreamErrorCode } from '~/features/openai/interfaces/message-error';
|
|
|
|
|
+import type { IThreadRelationHasId } from '~/features/openai/interfaces/thread-relation';
|
|
|
import { useGrowiCloudUri } from '~/stores-universal/context';
|
|
import { useGrowiCloudUri } from '~/stores-universal/context';
|
|
|
import loggerFactory from '~/utils/logger';
|
|
import loggerFactory from '~/utils/logger';
|
|
|
|
|
|
|
@@ -43,16 +44,16 @@ type FormData = {
|
|
|
|
|
|
|
|
type AiAssistantChatSidebarSubstanceProps = {
|
|
type AiAssistantChatSidebarSubstanceProps = {
|
|
|
aiAssistantData: AiAssistantHasId;
|
|
aiAssistantData: AiAssistantHasId;
|
|
|
- threadId?: string;
|
|
|
|
|
|
|
+ threadData?: IThreadRelationHasId;
|
|
|
closeAiAssistantChatSidebar: () => void
|
|
closeAiAssistantChatSidebar: () => void
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const AiAssistantChatSidebarSubstance: React.FC<AiAssistantChatSidebarSubstanceProps> = (props: AiAssistantChatSidebarSubstanceProps) => {
|
|
const AiAssistantChatSidebarSubstance: React.FC<AiAssistantChatSidebarSubstanceProps> = (props: AiAssistantChatSidebarSubstanceProps) => {
|
|
|
const {
|
|
const {
|
|
|
- threadId, aiAssistantData, closeAiAssistantChatSidebar,
|
|
|
|
|
|
|
+ aiAssistantData, threadData, closeAiAssistantChatSidebar,
|
|
|
} = props;
|
|
} = props;
|
|
|
|
|
|
|
|
- const [currentThreadId, setCurrentThreadId] = useState<string | undefined>(threadId);
|
|
|
|
|
|
|
+ const [currentThreadId, setCurrentThreadId] = useState<string | undefined>(threadData?.threadId);
|
|
|
const [messageLogs, setMessageLogs] = useState<Message[]>([]);
|
|
const [messageLogs, setMessageLogs] = useState<Message[]>([]);
|
|
|
const [generatingAnswerMessage, setGeneratingAnswerMessage] = useState<Message>();
|
|
const [generatingAnswerMessage, setGeneratingAnswerMessage] = useState<Message>();
|
|
|
const [errorMessage, setErrorMessage] = useState<string | undefined>();
|
|
const [errorMessage, setErrorMessage] = useState<string | undefined>();
|
|
@@ -61,7 +62,7 @@ const AiAssistantChatSidebarSubstance: React.FC<AiAssistantChatSidebarSubstanceP
|
|
|
const { t } = useTranslation();
|
|
const { t } = useTranslation();
|
|
|
const { data: growiCloudUri } = useGrowiCloudUri();
|
|
const { data: growiCloudUri } = useGrowiCloudUri();
|
|
|
const { trigger: mutateThreadData } = useSWRMUTxThreads(aiAssistantData._id);
|
|
const { trigger: mutateThreadData } = useSWRMUTxThreads(aiAssistantData._id);
|
|
|
- const { trigger: mutateMessageData } = useSWRMUTxMessages(aiAssistantData._id, threadId);
|
|
|
|
|
|
|
+ const { trigger: mutateMessageData } = useSWRMUTxMessages(aiAssistantData._id, threadData?.threadId);
|
|
|
|
|
|
|
|
const form = useForm<FormData>({
|
|
const form = useForm<FormData>({
|
|
|
defaultValues: {
|
|
defaultValues: {
|
|
@@ -87,10 +88,10 @@ const AiAssistantChatSidebarSubstance: React.FC<AiAssistantChatSidebarSubstanceP
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
- if (threadId != null) {
|
|
|
|
|
|
|
+ if (threadData != null) {
|
|
|
getMessageData();
|
|
getMessageData();
|
|
|
}
|
|
}
|
|
|
- }, [mutateMessageData, threadId]);
|
|
|
|
|
|
|
+ }, [mutateMessageData, threadData]);
|
|
|
|
|
|
|
|
const isGenerating = generatingAnswerMessage != null;
|
|
const isGenerating = generatingAnswerMessage != null;
|
|
|
const submit = useCallback(async(data: FormData) => {
|
|
const submit = useCallback(async(data: FormData) => {
|
|
@@ -234,7 +235,7 @@ const AiAssistantChatSidebarSubstance: React.FC<AiAssistantChatSidebarSubstanceP
|
|
|
<div className="d-flex flex-column vh-100">
|
|
<div className="d-flex flex-column vh-100">
|
|
|
<div className="d-flex align-items-center p-3 border-bottom">
|
|
<div className="d-flex align-items-center p-3 border-bottom">
|
|
|
<span className="growi-custom-icons growi-ai-chat-icon me-3 fs-4">ai_assistant</span>
|
|
<span className="growi-custom-icons growi-ai-chat-icon me-3 fs-4">ai_assistant</span>
|
|
|
- <h5 className="mb-0 fw-bold flex-grow-1 text-truncate">{aiAssistantData.name}</h5>
|
|
|
|
|
|
|
+ <h5 className="mb-0 fw-bold flex-grow-1 text-truncate">{threadData?.title ?? aiAssistantData.name}</h5>
|
|
|
<button
|
|
<button
|
|
|
type="button"
|
|
type="button"
|
|
|
className="btn btn-link p-0 border-0"
|
|
className="btn btn-link p-0 border-0"
|
|
@@ -404,7 +405,7 @@ export const AiAssistantChatSidebar: FC = memo((): JSX.Element => {
|
|
|
const { data: aiAssistantChatSidebarData, close: closeAiAssistantChatSidebar } = useAiAssistantChatSidebar();
|
|
const { data: aiAssistantChatSidebarData, close: closeAiAssistantChatSidebar } = useAiAssistantChatSidebar();
|
|
|
|
|
|
|
|
const aiAssistantData = aiAssistantChatSidebarData?.aiAssistantData;
|
|
const aiAssistantData = aiAssistantChatSidebarData?.aiAssistantData;
|
|
|
- const threadId = aiAssistantChatSidebarData?.threadId;
|
|
|
|
|
|
|
+ const threadData = aiAssistantChatSidebarData?.threadData;
|
|
|
const isOpened = aiAssistantChatSidebarData?.isOpened && aiAssistantData != null;
|
|
const isOpened = aiAssistantChatSidebarData?.isOpened && aiAssistantData != null;
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
@@ -437,7 +438,7 @@ export const AiAssistantChatSidebar: FC = memo((): JSX.Element => {
|
|
|
autoHide
|
|
autoHide
|
|
|
>
|
|
>
|
|
|
<AiAssistantChatSidebarSubstance
|
|
<AiAssistantChatSidebarSubstance
|
|
|
- threadId={threadId}
|
|
|
|
|
|
|
+ threadData={threadData}
|
|
|
aiAssistantData={aiAssistantData}
|
|
aiAssistantData={aiAssistantData}
|
|
|
closeAiAssistantChatSidebar={closeAiAssistantChatSidebar}
|
|
closeAiAssistantChatSidebar={closeAiAssistantChatSidebar}
|
|
|
/>
|
|
/>
|