diff --git a/apps/desktop/src/session/components/note-input/index.test.tsx b/apps/desktop/src/session/components/note-input/index.test.tsx index da481e485d..6e3ae3bc3f 100644 --- a/apps/desktop/src/session/components/note-input/index.test.tsx +++ b/apps/desktop/src/session/components/note-input/index.test.tsx @@ -196,4 +196,12 @@ describe("NoteInput tab selection", () => { expect(screen.getByTestId("is-transcribing").textContent).toBe("true"); }); + + it("keeps the transcript spinner while batch transcription is running", () => { + hoisted.sessionMode = "running_batch"; + + renderNoteInput(); + + expect(screen.getByTestId("is-transcribing").textContent).toBe("true"); + }); }); diff --git a/apps/desktop/src/session/components/note-input/index.tsx b/apps/desktop/src/session/components/note-input/index.tsx index 819c271bfc..8dc2642970 100644 --- a/apps/desktop/src/session/components/note-input/index.tsx +++ b/apps/desktop/src/session/components/note-input/index.tsx @@ -25,6 +25,7 @@ import { Transcript } from "./transcript"; import { useCaretNearBottom } from "~/session/components/caret-position-context"; import { useCurrentNoteTab } from "~/session/components/shared"; import { useScrollPreservation } from "~/shared/hooks/useScrollPreservation"; +import type { SessionMode } from "~/store/zustand/listener/general"; import { type Tab, useTabs } from "~/store/zustand/tabs"; import { type EditorView as TabEditorView } from "~/store/zustand/tabs/schema"; import { useListener } from "~/stt/contexts"; @@ -37,6 +38,10 @@ export interface NoteInputHandle { prepareForTabChange: () => void; } +export function shouldShowTranscriptTabSpinner(sessionMode: SessionMode) { + return sessionMode === "finalizing" || sessionMode === "running_batch"; +} + export const NoteInput = forwardRef< NoteInputHandle, { @@ -90,7 +95,7 @@ export const NoteInput = forwardRef< sessionMode === "finalizing" || sessionMode === "running_batch"; const shouldShowTranscriptSpinner = - sessionMode === "finalizing" || sessionMode === "running_batch"; + shouldShowTranscriptTabSpinner(sessionMode); const { scrollRef, onBeforeTabChange } = useScrollPreservation( renderedCurrentTab.type === "enhanced" diff --git a/apps/desktop/src/session/index.tsx b/apps/desktop/src/session/index.tsx index 15120625da..cd9cd62e58 100644 --- a/apps/desktop/src/session/index.tsx +++ b/apps/desktop/src/session/index.tsx @@ -6,7 +6,11 @@ import { commands as fsSyncCommands } from "@hypr/plugin-fs-sync"; import { CaretPositionProvider } from "./components/caret-position-context"; import { FloatingActionButton } from "./components/floating"; -import { NoteInput, type NoteInputHandle } from "./components/note-input"; +import { + NoteInput, + shouldShowTranscriptTabSpinner, + type NoteInputHandle, +} from "./components/note-input"; import { Header as NoteInputHeader, useEditorTabs, @@ -130,10 +134,7 @@ function TabContentNoteInner({ const sessionId = tab.id; const { skipReason } = useAutoEnhance(tab); const sessionMode = useListener((state) => state.getSessionMode(sessionId)); - const isTranscribing = - sessionMode === "active" || - sessionMode === "finalizing" || - sessionMode === "running_batch"; + const isTranscribing = shouldShowTranscriptTabSpinner(sessionMode); useAutoFocusTitle({ sessionId, noteInputRef }); usePendingUpload(sessionId);