fix(renderer): subscribe ConsoleView to logRevision to trigger re-render (D-04)

logRevision was bumped on every run-log event but no component subscribed,
so ref mutations to logBufferRef never triggered a re-render -- the console
pre stayed stale until something else forced a render.

Subscribe to logRevision via useAppStore and depend on it in the useMemo
that reads logBufferRef, keeping the ref-based buffer (cheap writes) while
restoring re-renders.
This commit is contained in:
ZacharyZhang-NY committed 2026-04-16 21:57:08 -04:00
1 parent 0119872db6
commit 0123103f58
1 file changed
+11 -1
+11 -1
View File
@@ -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 (
<AnimatePresence>
{consoleOpen ? (
@@ -96,7 +106,7 @@ export function ConsoleView({
</div>
<div className="h-[200px] overflow-auto px-5 py-3">
<pre className="font-mono whitespace-pre-wrap break-all text-[12px] leading-relaxed text-muted-foreground">
{selectedRun ? logBufferRef.current[selectedRun.id] ?? t("common.waitingForLog") : t("common.noRunSelected")}
{selectedRun ? (logBuffer || t("common.waitingForLog")) : t("common.noRunSelected")}
</pre>
</div>
</div>