/** The oldest pending askpass prompt as a modal: password / text field, or Yes / No for a host key. */ import { useState } from "react"; import { useTx } from "@/platform/i18n"; import { Dialog, Input } from "@/ui"; import { answerAskpass, askpassAnswer, useAskpass, type AskpassPrompt } from "./askpass"; import styles from "./Ssh.module.css"; export function AskpassHost() { const head = useAskpass((s) => s.queue[0]); return head ? : null; } function AskpassDialog({ prompt: p }: { prompt: AskpassPrompt }) { const tx = useTx(); const [text, setText] = useState(""); const done = (choice: Parameters[1]) => answerAskpass(p.id, askpassAnswer(p.kind, choice)); const cancel = () => done(null); if (p.kind === "confirm") return ( done({ confirm: true }) }, { label: "No", onClick: () => done({ confirm: false }) }, { label: "Cancel", role: "cancel" }, ]} >
{p.prompt}
); return ( done({ text }) }, { label: "Cancel", role: "cancel" }, ]} >
{ e.preventDefault(); done({ text }); }} > setText(e.target.value)} />
); }