import fetchApi from "@/src/components/twui/utils/fetch/fetchApi"; import Row from "@/src/components/twui/layout/Row"; import Span from "@/src/components/twui/layout/Span"; import type useSystemSetupStatus from "../(hooks)/use-system-setup-status"; import SetupActionCard from "../(partials)/setup-action-card"; import SetupUpdateWgUiAction from "../(partials)/setup-update-wg-ui-action"; import type { ApiReqParams } from "@/src/types"; import type { APIResponseObject } from "@moduletrace/bunext/types"; import { RotateCcw, TriangleAlert, Wrench } from "lucide-react"; type Props = { setup: ReturnType; }; const WG_TOOL_COMMANDS = [`wg`, `wg-quick`, `ip`, `curl`]; export default function SetupActionsSection({ setup }: Props) { const setup_status = setup.setup_status; if (!setup_status) { return null; } const have_wg_tools = setup_status.tools .filter((tool) => WG_TOOL_COMMANDS.includes(tool.command)) .every((tool) => tool.installed); const show_restart = !setup_status.is_dev && setup_status.init_system !== "unknown"; return ( <> {!setup_status.is_root ? ( The server is not running as root — installs and tunnel management may fail. Run wg-ui as root for full functionality. ) : null} } button_title={ have_wg_tools ? "Update WireGuard tools" : "Install WireGuard tools" } on_run={async () => { const res = await fetchApi( `/api/admin/setup-wireguard-tools`, { method: "POST", }, ); setup.refresh(); return res; }} /> {show_restart ? ( } button_title="Restart service" on_run={async () => { const res = await fetchApi< ApiReqParams, APIResponseObject >(`/api/admin/restart-wg-ui-service`, { method: "POST", }); setup.refresh(); return res; }} /> ) : null} ); }