diff --git a/src/renderer/views/ConsoleView.tsx b/src/renderer/views/ConsoleView.tsx index 66fcceb7..b39eeb1e 100644 --- a/src/renderer/views/ConsoleView.tsx +++ b/src/renderer/views/ConsoleView.tsx @@ -1,8 +1,10 @@ +import { useMemo } from "react"; import { AnimatePresence, motion } from "framer-motion"; import { FolderOpen, TerminalWindow, X } from "@phosphor-icons/react"; import type { RunRecord } from "@shared/types"; import { ActionButton, Select, StatusPill } from "../components/ui"; import { formatMoney, formatTime } from "../lib/formatters"; +import { useAppStore } from "../state/store"; interface ConsoleViewProps { consoleOpen: boolean; @@ -27,6 +29,14 @@ export function ConsoleView({ panelTransition, t, }: ConsoleViewProps) { + const logRevision = useAppStore((s) => s.logRevision); + const logBuffer = useMemo( + () => (selectedRun ? logBufferRef.current[selectedRun.id] ?? "" : ""), + // logRevision is intentionally part of deps: it bumps on every run-log + // push into the ref, forcing this memo (and this component) to re-evaluate + // the ref contents on re-render. + [selectedRun, logRevision, logBufferRef], + ); return ( {consoleOpen ? ( @@ -96,7 +106,7 @@ export function ConsoleView({
-                {selectedRun ? logBufferRef.current[selectedRun.id] ?? t("common.waitingForLog") : t("common.noRunSelected")}
+                {selectedRun ? (logBuffer || t("common.waitingForLog")) : t("common.noRunSelected")}