diff --git a/frontend/src/Navigation.tsx b/frontend/src/Navigation.tsx index 324d5aa05..242efb1a9 100644 --- a/frontend/src/Navigation.tsx +++ b/frontend/src/Navigation.tsx @@ -18,6 +18,7 @@ import SourceDropdown from './components/SourceDropdown'; import { setConversation, updateConversationId, + handleAbort, } from './conversation/conversationSlice'; import ConversationTile from './conversation/ConversationTile'; import { useDarkTheme, useMediaQuery, useOutsideAlerter } from './hooks'; @@ -180,6 +181,7 @@ export default function Navigation({ navOpen, setNavOpen }: NavigationProps) { }; const resetConversation = () => { + handleAbort(); dispatch(setConversation([])); dispatch( updateConversationId({ diff --git a/frontend/src/conversation/conversationSlice.ts b/frontend/src/conversation/conversationSlice.ts index 3ca05c7b8..5a78e0141 100644 --- a/frontend/src/conversation/conversationSlice.ts +++ b/frontend/src/conversation/conversationSlice.ts @@ -17,9 +17,23 @@ const initialState: ConversationState = { const API_STREAMING = import.meta.env.VITE_API_STREAMING === 'true'; +let abortController: AbortController | null = null; +export function handleAbort() { + if (abortController) { + abortController.abort(); + abortController = null; + } +} + export const fetchAnswer = createAsyncThunk( 'fetchAnswer', - async ({ question }, { dispatch, getState, signal }) => { + async ({ question }, { dispatch, getState }) => { + if (abortController) { + abortController.abort(); + } + abortController = new AbortController(); + const { signal } = abortController; + let isSourceUpdated = false; const state = getState() as RootState; if (state.preference) {