import { Spinner } from "~/components/ui/spinner"; import type { ServerUpdateState } from "@t3tools/client-runtime/state/server"; import { CircleAlertIcon, DownloadIcon } from "lucide-react"; import { useId, useState } from "react"; import { serverUpdateStageLabel } from "../ServerUpdateAction"; import { Tooltip, TooltipPopup, TooltipTrigger } from "../ui/tooltip"; import { ComposerBanner } from "./ComposerBanner"; export function ComposerServerUpdateIcon({ status, }: { readonly status: ServerUpdateState["status"]; }) { if (status === "running") { return ; } if (status === "failed") { return ; } return ; } /** One text line, clipped at the end so the error detail never squeezes its title. */ export function ComposerServerUpdateStatus({ state, serverLabel = "server", }: { readonly state: Exclude; readonly serverLabel?: string; }) { const [detailsOpen, setDetailsOpen] = useState(false); const triggerId = useId(); const title = `${state.status === "failed" ? "Could not update" : "Updating"} ${serverLabel}`; const detail = state.status === "failed" ? state.message : serverUpdateStageLabel(state.stage); return ( setDetailsOpen(true)} > {title} {detail} } /> {title}: {detail} ); }