foxygit / RPA-Remisser Log in
commits tags

/webui/frontend/src/components/Header.tsx · 1.54 KB

raw
import type { Lang, T } from "../lib/i18n";
import { Menu } from "./Menu";

interface Props {
  t: T;
  lang: Lang;
  setLang: (l: Lang) => void;
  flowNames: string[];
  currentName: string | null;
  onSelect: (name: string) => void;
  onNew: () => void;
  onDelete: () => void;
  onSave: () => void;
  onRun: () => void;
  dirty: boolean;
  running: boolean;
  closeMode: string;
  setCloseMode: (m: string) => void;
  onOpenSettings: () => void;
  onOpenInspect: () => void;
  onOpenInputs: () => void;
}

export function Header(p: Props) {
  const { t } = p;
  return (
    <header>
      <h1>{t("app_title")}</h1>

      <select value={p.currentName ?? ""} onChange={(e) => p.onSelect(e.target.value)}>
        {p.flowNames.map((n) => (
          <option key={n} value={n}>
            {n}
          </option>
        ))}
      </select>

      <span className="spacer" />

      <span className={"dirty-dot " + (p.dirty ? "on" : "")} title={p.dirty ? t("unsaved") : t("saved")} />
      <button className="secondary" onClick={p.onSave}>
        {t("save")}
      </button>
      <button onClick={p.onRun} disabled={p.running || !p.currentName}>
        {t("run")}
      </button>
      <Menu
        t={t}
        lang={p.lang}
        setLang={p.setLang}
        closeMode={p.closeMode}
        setCloseMode={p.setCloseMode}
        currentName={p.currentName}
        onNew={p.onNew}
        onDelete={p.onDelete}
        onOpenSettings={p.onOpenSettings}
        onOpenInspect={p.onOpenInspect}
        onOpenInputs={p.onOpenInputs}
      />
    </header>
  );
}