VizuaraAI's picture
deploy: ramco-chat (FastAPI + React, Docker SDK)
7cb812b verified
Raw
History Blame Contribute Delete
2.17 kB
import type { ConnectionStatus } from "../types";
type Props = {
status: ConnectionStatus;
sessionId: string | null;
onOpenScenarios(): void;
onReset(): void;
currentPath?: string;
onNavigate?(path: string): void;
};
const STATUS_LABEL: Record<ConnectionStatus, string> = {
connecting: "Connecting…",
open: "Connected",
closed: "Disconnected",
error: "Connection error",
};
const STATUS_DOT: Record<ConnectionStatus, string> = {
connecting: "dot",
open: "dot dot--ok",
closed: "dot dot--warn",
error: "dot dot--err",
};
export function Header({ status, sessionId, onOpenScenarios, onReset, currentPath, onNavigate }: Props) {
const onComparison = currentPath === "/comparison";
return (
<header className="header">
<div className="header__brand">
<span className="header__logo">ramco-chat</span>
<span className="header__tag">· Procure-to-Pay copilot</span>
{onNavigate && (
<nav className="header__nav">
<button
className={"header__nav-link" + (!onComparison ? " header__nav-link--active" : "")}
onClick={() => onNavigate("/")}
>
Chat
</button>
<button
className={"header__nav-link" + (onComparison ? " header__nav-link--active" : "")}
onClick={() => onNavigate("/comparison")}
>
Team comparison
</button>
</nav>
)}
</div>
<div className="header__right">
{!onComparison && (
<>
<span className="conn">
<span className={STATUS_DOT[status]} />
{STATUS_LABEL[status]}
{sessionId && <span className="faint mono" style={{ marginLeft: 6 }}>· {sessionId.slice(0, 8)}</span>}
</span>
<button className="pill" onClick={onOpenScenarios}>
<span>Scenarios</span>
</button>
<button className="pill pill--ghost" onClick={onReset} title="Wipe current session and start fresh">
Reset
</button>
</>
)}
</div>
</header>
);
}