From 1eda6c8559d8fbfaee69784098d16cc43bfb5fa8 Mon Sep 17 00:00:00 2001 From: Lucas Oliveira Date: Fri, 5 Dec 2025 16:33:11 -0300 Subject: [PATCH] fixed chat filter being cleared after onboarding --- .../_components/onboarding-upload.tsx | 25 +++++++++++++------ frontend/components/chat-renderer.tsx | 10 +++++--- frontend/contexts/chat-context.tsx | 25 +++++++++++++------ 3 files changed, 41 insertions(+), 19 deletions(-) diff --git a/frontend/app/onboarding/_components/onboarding-upload.tsx b/frontend/app/onboarding/_components/onboarding-upload.tsx index fbb86909..a4f97ae4 100644 --- a/frontend/app/onboarding/_components/onboarding-upload.tsx +++ b/frontend/app/onboarding/_components/onboarding-upload.tsx @@ -95,6 +95,7 @@ const OnboardingUpload = ({ onComplete }: OnboardingUploadProps) => { icon: "file", }); + // Wait for filter creation to complete before proceeding createFilterMutation .mutateAsync({ name: displayName, @@ -118,16 +119,24 @@ const OnboardingUpload = ({ onComplete }: OnboardingUploadProps) => { }) .finally(() => { setIsCreatingFilter(false); + // Refetch nudges to get new ones + refetchNudges(); + + // Wait a bit before completing (after filter is created) + setTimeout(() => { + onComplete(); + }, 1000); }); + } else { + // No filter to create, just complete + // Refetch nudges to get new ones + refetchNudges(); + + // Wait a bit before completing + setTimeout(() => { + onComplete(); + }, 1000); } - - // Refetch nudges to get new ones - refetchNudges(); - - // Wait a bit before completing - setTimeout(() => { - onComplete(); - }, 1000); } }, [ tasks, diff --git a/frontend/components/chat-renderer.tsx b/frontend/components/chat-renderer.tsx index cceb99c7..a0e2a9d4 100644 --- a/frontend/components/chat-renderer.tsx +++ b/frontend/components/chat-renderer.tsx @@ -172,12 +172,14 @@ export function ChatRenderer({ // Mark onboarding as complete in context setOnboardingComplete(true); - // Clear ALL conversation state so next message starts fresh - await startNewConversation(); - - // Store the user document filter as default for new conversations and load it + // Store the user document filter as default for new conversations FIRST + // This must happen before startNewConversation() so the filter is available await storeDefaultFilterForNewConversations(true); + // Clear ALL conversation state so next message starts fresh + // This will pick up the default filter we just set + await startNewConversation(); + // Clean up onboarding filter IDs now that we've set the default if (typeof window !== "undefined") { localStorage.removeItem(ONBOARDING_OPENRAG_DOCS_FILTER_ID_KEY); diff --git a/frontend/contexts/chat-context.tsx b/frontend/contexts/chat-context.tsx index 611c3324..90c83023 100644 --- a/frontend/contexts/chat-context.tsx +++ b/frontend/contexts/chat-context.tsx @@ -262,6 +262,10 @@ export function ChatProvider({ children }: ChatProviderProps) { const startNewConversation = useCallback(async () => { console.log("[CONVERSATION] Starting new conversation"); + // Check if there's existing conversation data - if so, this is a manual "new conversation" action + // Check state values before clearing them + const hasExistingConversation = conversationData !== null || placeholderConversation !== null; + // Clear current conversation data and reset state setCurrentConversationId(null); setPreviousResponseIds({ chat: null, langflow: null }); @@ -295,15 +299,22 @@ export function ChatProvider({ children }: ChatProviderProps) { setConversationFilterState(null); } } else { - console.log("[CONVERSATION] No default filter set"); - setConversationFilterState(null); + // No default filter in localStorage + if (hasExistingConversation) { + // User is manually starting a new conversation - clear the filter + console.log("[CONVERSATION] Manual new conversation - clearing filter"); + setConversationFilterState(null); + } else { + // First time after onboarding - preserve existing filter if set + // This prevents clearing the filter when startNewConversation is called multiple times during onboarding + console.log("[CONVERSATION] No default filter set, preserving existing filter if any"); + // Don't clear the filter - it may have been set by storeDefaultFilterForNewConversations + } } - } else { - setConversationFilterState(null); } // Create a temporary placeholder conversation to show in sidebar - const placeholderConversation: ConversationData = { + const newPlaceholderConversation: ConversationData = { response_id: "new-conversation-" + Date.now(), title: "New conversation", endpoint: endpoint, @@ -318,10 +329,10 @@ export function ChatProvider({ children }: ChatProviderProps) { last_activity: new Date().toISOString(), }; - setPlaceholderConversation(placeholderConversation); + setPlaceholderConversation(newPlaceholderConversation); // Force immediate refresh to ensure sidebar shows correct state refreshConversations(true); - }, [endpoint, refreshConversations]); + }, [endpoint, refreshConversations, conversationData, placeholderConversation]); const addConversationDoc = useCallback((filename: string) => { setConversationDocs((prev) => [