[Init] Initial commit - NetMesh terminal manager
Some checks failed
build-packages / resolve bundled mosh-client (push) Has been cancelled
build-packages / resolve bundled et-client (push) Has been cancelled
build-packages / build-macos (push) Has been cancelled
build-packages / build-windows (push) Has been cancelled
build-packages / build-linux-x64 (push) Has been cancelled
build-packages / build-linux-arm64 (push) Has been cancelled
build-packages / release (push) Has been cancelled
build-packages / update Nix release metadata (push) Has been cancelled
build-packages / bump homebrew tap (push) Has been cancelled
test / lint-and-test (push) Has been cancelled
AI automation / Route event (push) Has been cancelled
AI automation / Hand reopened issue to maintainers (push) Has been cancelled
AI automation / Clean source issue state (push) Has been cancelled
AI automation / Reconcile handoffs (push) Has been cancelled
AI automation / Classify issue (push) Has been cancelled
AI automation / Claude Code smoke (push) Has been cancelled
AI automation / Review issue follow-up (push) Has been cancelled
AI automation / Publish issue follow-up (push) Has been cancelled
AI automation / Implement with Claude Code (push) Has been cancelled
AI automation / Publish implement PR (push) Has been cancelled
AI automation / Continue queued issue comments (push) Has been cancelled
AI automation / Codex review loop (push) Has been cancelled
AI automation / Publish Codex fix (push) Has been cancelled
AI automation / Clear Codex dispatch marker (push) Has been cancelled
AI automation / Own PR re-request Codex (push) Has been cancelled
AI automation / External PR re-request Codex (push) Has been cancelled
AI automation / Poll Codex reaction / retry (push) Has been cancelled
build-et-binaries / build-linux-x64 (push) Has been cancelled
build-et-binaries / build-linux-arm64 (push) Has been cancelled
build-et-binaries / build-macos-universal (push) Has been cancelled
build-et-binaries / build-windows-x64 (push) Has been cancelled
build-et-binaries / release (push) Has been cancelled
Some checks failed
build-packages / resolve bundled mosh-client (push) Has been cancelled
build-packages / resolve bundled et-client (push) Has been cancelled
build-packages / build-macos (push) Has been cancelled
build-packages / build-windows (push) Has been cancelled
build-packages / build-linux-x64 (push) Has been cancelled
build-packages / build-linux-arm64 (push) Has been cancelled
build-packages / release (push) Has been cancelled
build-packages / update Nix release metadata (push) Has been cancelled
build-packages / bump homebrew tap (push) Has been cancelled
test / lint-and-test (push) Has been cancelled
AI automation / Route event (push) Has been cancelled
AI automation / Hand reopened issue to maintainers (push) Has been cancelled
AI automation / Clean source issue state (push) Has been cancelled
AI automation / Reconcile handoffs (push) Has been cancelled
AI automation / Classify issue (push) Has been cancelled
AI automation / Claude Code smoke (push) Has been cancelled
AI automation / Review issue follow-up (push) Has been cancelled
AI automation / Publish issue follow-up (push) Has been cancelled
AI automation / Implement with Claude Code (push) Has been cancelled
AI automation / Publish implement PR (push) Has been cancelled
AI automation / Continue queued issue comments (push) Has been cancelled
AI automation / Codex review loop (push) Has been cancelled
AI automation / Publish Codex fix (push) Has been cancelled
AI automation / Clear Codex dispatch marker (push) Has been cancelled
AI automation / Own PR re-request Codex (push) Has been cancelled
AI automation / External PR re-request Codex (push) Has been cancelled
AI automation / Poll Codex reaction / retry (push) Has been cancelled
build-et-binaries / build-linux-x64 (push) Has been cancelled
build-et-binaries / build-linux-arm64 (push) Has been cancelled
build-et-binaries / build-macos-universal (push) Has been cancelled
build-et-binaries / build-windows-x64 (push) Has been cancelled
build-et-binaries / release (push) Has been cancelled
This commit is contained in:
85
components/PluginConnectionSection.tsx
Normal file
85
components/PluginConnectionSection.tsx
Normal file
@@ -0,0 +1,85 @@
|
||||
import React from "react";
|
||||
import { Plug, RotateCcw } from "lucide-react";
|
||||
import type { Host, Identity, SSHKey } from "../types";
|
||||
import { usePluginConnectionSectionState } from "../application/state/usePluginConnectionSectionState";
|
||||
import { HostDetailsSection } from "./host-details";
|
||||
import { Button } from "./ui/button";
|
||||
import { Combobox } from "./ui/combobox";
|
||||
|
||||
type Props = {
|
||||
form: Host;
|
||||
setForm: React.Dispatch<React.SetStateAction<Host>>;
|
||||
t: (key: string, params?: Record<string, unknown>) => string;
|
||||
onValidityChange: (valid: boolean) => void;
|
||||
identities: Identity[];
|
||||
keys: SSHKey[];
|
||||
};
|
||||
|
||||
export const PluginConnectionSection: React.FC<Props> = ({
|
||||
form,
|
||||
setForm,
|
||||
t,
|
||||
onValidityChange,
|
||||
identities,
|
||||
keys,
|
||||
}) => {
|
||||
const state = usePluginConnectionSectionState({
|
||||
form,
|
||||
setForm,
|
||||
t,
|
||||
onValidityChange,
|
||||
identities,
|
||||
keys,
|
||||
});
|
||||
|
||||
if (!state.active && state.providerCount === 0) return null;
|
||||
|
||||
return (
|
||||
<HostDetailsSection
|
||||
icon={<Plug size={14} className="text-muted-foreground" />}
|
||||
title={t("hostDetails.plugin.title")}
|
||||
hint={state.active && !state.installed ? t("hostDetails.plugin.unavailable") : undefined}
|
||||
>
|
||||
<Combobox
|
||||
options={state.providerOptions}
|
||||
value={state.providerId}
|
||||
onValueChange={state.selectProvider}
|
||||
placeholder={t("hostDetails.plugin.provider.placeholder")}
|
||||
emptyText={t("hostDetails.plugin.provider.empty")}
|
||||
/>
|
||||
{state.active ? (
|
||||
<>
|
||||
<Combobox
|
||||
options={state.authenticationOptions}
|
||||
value={form.pluginConnection?.authenticationProviderId ?? ""}
|
||||
onValueChange={state.selectAuthenticationProvider}
|
||||
placeholder={t("hostDetails.plugin.authentication.placeholder")}
|
||||
/>
|
||||
<Combobox
|
||||
options={state.credentialOptions}
|
||||
value={form.pluginConnection?.credentialId ?? ""}
|
||||
onValueChange={state.selectCredential}
|
||||
placeholder={t("hostDetails.plugin.credential.placeholder")}
|
||||
/>
|
||||
<textarea
|
||||
value={state.configurationText}
|
||||
onChange={(event) => state.updateConfiguration(event.target.value)}
|
||||
spellCheck={false}
|
||||
className="min-h-32 w-full resize-y rounded-md border border-border bg-background px-3 py-2 font-mono text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
||||
aria-label={t("hostDetails.plugin.configuration.label")}
|
||||
/>
|
||||
{state.configurationError ? <p className="text-xs text-destructive">{state.configurationError}</p> : null}
|
||||
<Button
|
||||
type="button"
|
||||
variant="outline"
|
||||
size="sm"
|
||||
onClick={state.resetToSsh}
|
||||
>
|
||||
<RotateCcw size={14} className="mr-2" />
|
||||
{t("hostDetails.plugin.useSsh")}
|
||||
</Button>
|
||||
</>
|
||||
) : null}
|
||||
</HostDetailsSection>
|
||||
);
|
||||
};
|
||||
Reference in New Issue
Block a user