import { useState } from "preact/hooks";
import { t } from "../../i18n";
import {
standardReadinessStateText,
type StandardReadiness,
} from "../../features/customize/environment";
import { hint } from "../../features/customize/host";
import { ot } from "../../features/onboarding/copy";
import type { OnboardingNetwork, OnboardingStatus } from "../../features/onboarding/status";
function CopyCommand({ item }: { item: { command: string; label: string } }) {
const [copied, setCopied] = useState(false);
return (
{item.command}
);
}
function EnvironmentCard({ readiness }: { readiness: StandardReadiness }) {
return (
{t("environment.readiness.cardTitle")}
{standardReadinessStateText(readiness)}
{readiness.missing_environments.length ? (
{t("environment.readiness.missingEnvironments")}
{readiness.missing_environments.map((name) => (
- {name}
))}
) : null}
{Object.entries(readiness.missing_packages).map(([environment, packages]) =>
packages.length ? (
{t("environment.readiness.missingPackages", environment)}
{packages.map((packageName) => (
- {packageName}
))}
) : null,
)}
{readiness.remediation &&
readiness.remediation.requires_explicit_action &&
readiness.remediation.commands.length ? (
) : null}
);
}
function NetworkCard({
network,
platform,
nativeRuntime,
}: {
network: OnboardingNetwork;
platform: string;
nativeRuntime: boolean;
}) {
const yn = (value: boolean) => (value ? ot("onboarding.readiness.yes") : ot("onboarding.readiness.no"));
return (
{ot("onboarding.readiness.network")}
{ot("onboarding.readiness.allowNetwork", yn(network.allow_network))}
{ot("onboarding.readiness.egress", network.egress)}
{ot("onboarding.readiness.contacted", yn(network.contacted))}
{ot("onboarding.readiness.platform", platform || "—")}
{nativeRuntime ? ot("onboarding.readiness.runtimeYes") : ot("onboarding.readiness.runtimeNo")}
);
}
export function ReadinessPanel({ status }: { status: OnboardingStatus }) {
return (
{status.environment ? : null}
);
}