|
|
@@ -61,6 +61,7 @@ type UseKnowledgeAssistant = () => {
|
|
|
processMessage: ProcessMessage
|
|
|
form: UseFormReturn<FormData>
|
|
|
resetForm: () => void
|
|
|
+ threadTitleView: JSX.Element
|
|
|
|
|
|
// Views
|
|
|
initialView: JSX.Element
|
|
|
@@ -72,8 +73,8 @@ type UseKnowledgeAssistant = () => {
|
|
|
|
|
|
export const useKnowledgeAssistant: UseKnowledgeAssistant = () => {
|
|
|
// Hooks
|
|
|
- const { data: aiAssistantSidebarData } = useAiAssistantSidebar();
|
|
|
- const { aiAssistantData, threadData } = aiAssistantSidebarData ?? {};
|
|
|
+ const { data: aiAssistantSidebarData, refreshThreadData } = useAiAssistantSidebar();
|
|
|
+ const { aiAssistantData } = aiAssistantSidebarData ?? {};
|
|
|
const { mutate: mutateRecentThreads } = useSWRINFxRecentThreads();
|
|
|
const { trigger: mutateThreadData } = useSWRMUTxThreads(aiAssistantData?._id);
|
|
|
const { t } = useTranslation();
|
|
|
@@ -85,6 +86,9 @@ export const useKnowledgeAssistant: UseKnowledgeAssistant = () => {
|
|
|
extendedThinkingMode: false,
|
|
|
},
|
|
|
});
|
|
|
+ const handleBackToInitialView = useCallback(() => {
|
|
|
+ refreshThreadData(undefined);
|
|
|
+ }, [refreshThreadData]);
|
|
|
|
|
|
// Functions
|
|
|
const resetForm = useCallback(() => {
|
|
|
@@ -141,8 +145,8 @@ export const useKnowledgeAssistant: UseKnowledgeAssistant = () => {
|
|
|
}, []);
|
|
|
|
|
|
const headerText = useMemo(() => {
|
|
|
- return <>{threadData?.title ?? aiAssistantData?.name}</>;
|
|
|
- }, [aiAssistantData?.name, threadData?.title]);
|
|
|
+ return <>{aiAssistantData?.name}</>;
|
|
|
+ }, [aiAssistantData?.name]);
|
|
|
|
|
|
const placeHolder = useMemo(() => { return 'sidebar_ai_assistant.knowledge_assistant_placeholder' }, []);
|
|
|
|
|
|
@@ -231,12 +235,36 @@ export const useKnowledgeAssistant: UseKnowledgeAssistant = () => {
|
|
|
);
|
|
|
}, [dropdownOpen, toggleDropdown, form, t]);
|
|
|
|
|
|
+ const threadTitleView = useMemo(() => {
|
|
|
+ const { threadData } = aiAssistantSidebarData ?? {};
|
|
|
+
|
|
|
+ if (threadData?.title == null) {
|
|
|
+ return <></>;
|
|
|
+ }
|
|
|
+
|
|
|
+ return (
|
|
|
+ <div className="thread-title-sticky sticky-top bg-body bg-opacity-75 py-2 px-3 z-1 ">
|
|
|
+ <div className="d-flex align-items-center gap-2">
|
|
|
+ <button
|
|
|
+ type="button"
|
|
|
+ className="btn btn-sm btn-link p-0 text-secondary"
|
|
|
+ onClick={handleBackToInitialView}
|
|
|
+ >
|
|
|
+ <span className="material-symbols-outlined">chevron_left</span>
|
|
|
+ </button>
|
|
|
+ <span className="text-truncate small">{threadData.title}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ );
|
|
|
+ }, [aiAssistantSidebarData, handleBackToInitialView]);
|
|
|
+
|
|
|
return {
|
|
|
createThread,
|
|
|
postMessage,
|
|
|
processMessage,
|
|
|
form,
|
|
|
resetForm,
|
|
|
+ threadTitleView,
|
|
|
|
|
|
// Views
|
|
|
initialView,
|