From 5f8991c7feaca74abc5dc851266112cb43705d8b Mon Sep 17 00:00:00 2001 From: Nate Kelley Date: Sat, 27 Sep 2025 19:52:41 -0600 Subject: [PATCH] read only bug fix --- .../src/components/ui/report/ReportEditor.tsx | 5 ++--- .../useAutoRedirectStreaming.test.ts | 20 ++++++++++++++++++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/apps/web/src/components/ui/report/ReportEditor.tsx b/apps/web/src/components/ui/report/ReportEditor.tsx index be2a3a183..c74764cb1 100644 --- a/apps/web/src/components/ui/report/ReportEditor.tsx +++ b/apps/web/src/components/ui/report/ReportEditor.tsx @@ -1,6 +1,6 @@ import type { AnyPluginConfig, Value } from 'platejs'; import { Plate, type TPlateEditor } from 'platejs/react'; -import React, { useEffect, useImperativeHandle, useRef } from 'react'; +import React, { useEffect, useImperativeHandle, useRef, useState } from 'react'; import { ScrollToBottomButton } from '@/components/features/buttons/ScrollToBottomButton'; import { useAutoScroll } from '@/hooks/useAutoScroll'; import { useDebounceFn } from '@/hooks/useDebounce'; @@ -140,7 +140,6 @@ export const ReportEditor = React.memo( {preEditorChildren} @@ -149,7 +148,7 @@ export const ReportEditor = React.memo( style={style} placeholder={placeholder} className={cn('editor', className)} - readOnly={readOnly || isStreaming} + readOnly={readOnly} //do not have streaming here, it causes scrolling issue when toggling autoFocus /> diff --git a/apps/web/src/layouts/ChatLayout/ChatLayoutContext/useAutoRedirectStreaming.test.ts b/apps/web/src/layouts/ChatLayout/ChatLayoutContext/useAutoRedirectStreaming.test.ts index 89fefa27d..283373353 100644 --- a/apps/web/src/layouts/ChatLayout/ChatLayoutContext/useAutoRedirectStreaming.test.ts +++ b/apps/web/src/layouts/ChatLayout/ChatLayoutContext/useAutoRedirectStreaming.test.ts @@ -6,6 +6,8 @@ import { useAutoRedirectStreaming } from './useAutoRedirectStreaming'; // Mock all the dependencies vi.mock('@tanstack/react-router', () => ({ useNavigate: vi.fn(), + useLocation: vi.fn(), + useRouter: vi.fn(), })); vi.mock('@/api/buster_rest/chats', () => ({ @@ -27,6 +29,10 @@ vi.mock('@/context/Chats/useGetChatMessage', () => ({ useGetChatMessageLastReasoningMessageId: vi.fn(), })); +vi.mock('@/context/Routes/useRouteBuilder', () => ({ + useBuildLocation: vi.fn(), +})); + vi.mock('@/hooks/useWindowFocus', () => ({ useWindowFocus: vi.fn(), })); @@ -36,7 +42,7 @@ vi.mock('@/lib/assets/assetParamsToRoute', () => ({ })); // Import the mocked functions to use in tests -import { useNavigate } from '@tanstack/react-router'; +import { useLocation, useNavigate } from '@tanstack/react-router'; import { useGetChatMessageMemoized } from '@/api/buster_rest/chats'; import { useIsVersionChanged } from '@/context/AppVersion/useAppVersion'; import { useHasLoadedChat } from '@/context/Chats/useGetChat'; @@ -46,6 +52,7 @@ import { useGetChatMessageIsFinishedReasoning, useGetChatMessageLastReasoningMessageId, } from '@/context/Chats/useGetChatMessage'; +import { useBuildLocation } from '@/context/Routes/useRouteBuilder'; import { assetParamsToRoute } from '@/lib/assets/assetParamsToRoute'; describe('useAutoRedirectStreaming', () => { @@ -69,6 +76,7 @@ describe('useAutoRedirectStreaming', () => { }; let mockNavigateFn: ReturnType; + let mockBuildLocationFn: ReturnType; beforeEach(() => { vi.clearAllMocks(); @@ -77,6 +85,16 @@ describe('useAutoRedirectStreaming', () => { mockNavigateFn = vi.fn(); vi.mocked(useNavigate).mockReturnValue(mockNavigateFn); + // Setup location mocks + vi.mocked(useLocation).mockReturnValue({ + pathname: '/current/path', + } as any); + + mockBuildLocationFn = vi.fn().mockReturnValue({ + pathname: '/different/path', // Different from current location to trigger navigation + }); + vi.mocked(useBuildLocation).mockReturnValue(mockBuildLocationFn); + // Set default mock implementations vi.mocked(useHasLoadedChat).mockReturnValue(true); vi.mocked(useGetChatMessageCompleted).mockReturnValue(false);