import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { AlertTriangleIcon, DownloadIcon } from "lucide-react"; import { Browser } from "@wailsio/runtime"; import { Version } from "@bindings/services"; import { Button } from "@/components/buttons/Button"; import { useStatus } from "@/contexts/StatusContext.tsx"; const RELEASES_URL = "https://github.com/netbirdio/netbird/releases/latest"; const RC_RELEASES_URL = "https://pkgs.netbird.io/releases/rc"; function openUrl(url: string) { Browser.OpenURL(url).catch(() => globalThis.open(url, "_blank")); } export const DaemonOutdatedOverlay = () => { const { t } = useTranslation(); const { status, isDaemonOutdated } = useStatus(); const [guiVersion, setGuiVersion] = useState("-"); const clientVersion = status?.daemonVersion ?? "—"; const isRc = /-rc/i.test(guiVersion) || /-rc/i.test(clientVersion); const downloadUrl = isRc ? RC_RELEASES_URL : RELEASES_URL; useEffect(() => { if (!isDaemonOutdated) return; let cancelled = false; Version.GUI() .then((v) => { if (!cancelled) setGuiVersion(v); }) .catch((err) => console.error("[DaemonOutdatedOverlay] GUI version error", err)); return () => { cancelled = true; }; }, [isDaemonOutdated]); if (!isDaemonOutdated) return null; return (

{t("daemon.outdated.title")}

{t("daemon.outdated.description")}

{clientVersion === "development" ? ( {t("settings.about.clientName")}{" "} {t("settings.about.development")} ) : ( t("settings.about.client", { version: clientVersion }) )}

{guiVersion === "development" ? ( {t("settings.about.guiName")}{" "} {t("settings.about.development")} ) : ( t("settings.about.gui", { version: guiVersion }) )}

); };