import { raw } from "hono/html";
import { liveLogTailScript } from "../lib/sse-client";
export function LogTail(props: {
runId: string;
jobId?: string;
fallbackLogs?: string | null;
height?: string;
reloadOnRunDone?: boolean;
}) {
const elementId = `log-tail-${props.runId}${props.jobId ? "-" + props.jobId : ""}`;
const topic = `workflow-run-${props.runId}`;
const script = liveLogTailScript({
topic,
targetElementId: elementId,
jobId: props.jobId,
onRunDone:
props.reloadOnRunDone === false ? undefined : "location.reload()",
});
return (
<div>
<div
style="display: flex; justify-content: space-between; align-items: center; padding: 6px 10px; background: var(--bg-tertiary); border-top-left-radius: 6px; border-top-right-radius: 6px; font-size: 11px; color: var(--text-muted); font-family: monospace"
>
<span>● live log</span>
<span id={`${elementId}-status`}>connecting…</span>
</div>
<pre
id={elementId}
style={`margin: 0; padding: 12px 14px; background: var(--bg-tertiary); color: var(--text); font-size: 12px; line-height: 1.45; overflow: auto; max-height: ${props.height || "480px"}; border-bottom-left-radius: 6px; border-bottom-right-radius: 6px`}
>
{props.fallbackLogs || ""}
</pre>
<script dangerouslySetInnerHTML={{ __html: script }} />
</div>
);
}
|