import { useEffect, useState } from "react"; import { open } from "@tauri-apps/plugin-dialog"; import type { Project } from "../../../../lib/types"; import Button from "../../../ui/Button"; import Field, { ConfigGroup, inputClass } from "../../../ui/Field"; import CaCertPathInput from "../../../settings/CaCertPathInput"; import EnvVarsEditor from "../../EnvVarsEditor"; import PortMappingsEditor from "../../PortMappingsEditor"; interface Props { project: Project; save: (patch: Partial) => Promise; disabled: boolean; disabledReason?: string; } export default function AccessSection({ project, save, disabled, disabledReason, }: Props) { const [sshKeyPath, setSshKeyPath] = useState(project.ssh_key_path ?? ""); const [caCertPath, setCaCertPath] = useState(project.ca_cert_path ?? ""); const [gitName, setGitName] = useState(project.git_user_name ?? ""); const [gitEmail, setGitEmail] = useState(project.git_user_email ?? ""); const [gitToken, setGitToken] = useState(project.git_token ?? ""); useEffect(() => { setSshKeyPath(project.ssh_key_path ?? ""); setCaCertPath(project.ca_cert_path ?? ""); setGitName(project.git_user_name ?? ""); setGitEmail(project.git_user_email ?? ""); setGitToken(project.git_token ?? ""); }, [project]); return ( {(id) => (
setSshKeyPath(e.target.value)} onBlur={() => save({ ssh_key_path: sshKeyPath || null })} placeholder="~/.ssh" disabled={disabled} className={inputClass} />
)}
{(id) => ( setGitName(e.target.value)} onBlur={() => save({ git_user_name: gitName || null })} placeholder="Your Name" disabled={disabled} className={inputClass} /> )} {(id) => ( setGitEmail(e.target.value)} onBlur={() => save({ git_user_email: gitEmail || null })} placeholder="you@example.com" disabled={disabled} className={inputClass} /> )} {(id) => ( setGitToken(e.target.value)} onBlur={() => save({ git_token: gitToken || null })} placeholder="ghp_…" disabled={disabled} className={inputClass} /> )} {(id) => ( save({ ca_cert_path: value.trim() || null })} disabled={disabled} placeholder="/etc/ssl/certs/corp-root.pem" emptyHint="Using the global certificate from Settings → Certificates." inputClassName={`${inputClass} min-w-0`} /> )}
Environment variables

Injected into this project’s container. These override global variables with the same key.

save({ custom_env_vars: vars })} />
Port mappings

Expose container ports on the host so you can reach dev servers running inside the sandbox.

save({ port_mappings: mappings })} />
); }