import React, { useState, useEffect } from "react"; import { Button } from "@/components/ui/button.tsx"; import { VersionAlert } from "@/components/ui/version-alert.tsx"; import { RefreshCw, X } from "lucide-react"; import { useTranslation } from "react-i18next"; import { checkElectronUpdate, isElectron } from "@/ui/main-axios.ts"; interface VersionCheckModalProps { onDismiss: () => void; onContinue: () => void; isAuthenticated?: boolean; } export function VersionCheckModal({ onDismiss, onContinue, isAuthenticated = false, }: VersionCheckModalProps) { const { t } = useTranslation(); const [versionInfo, setVersionInfo] = useState(null); const [versionChecking, setVersionChecking] = useState(false); const [versionDismissed, setVersionDismissed] = useState(false); useEffect(() => { if (isElectron()) { checkForUpdates(); } else { onContinue(); } }, []); const checkForUpdates = async () => { setVersionChecking(true); try { const updateInfo = await checkElectronUpdate(); setVersionInfo(updateInfo); if (updateInfo?.status === "up_to_date") { onContinue(); return; } } catch (error) { console.error("Failed to check for updates:", error); setVersionInfo({ success: false, error: "Check failed" }); } finally { setVersionChecking(false); } }; const handleVersionDismiss = () => { setVersionDismissed(true); }; const handleDownloadUpdate = () => { if (versionInfo?.latest_release?.html_url) { window.open(versionInfo.latest_release.html_url, "_blank"); } }; const handleContinue = () => { onContinue(); }; if (!isElectron()) { return null; } if (versionChecking && !versionInfo) { return (
{!isAuthenticated && (
)}

{t("versionCheck.checkingUpdates")}

); } if (!versionInfo || versionDismissed) { return (
{!isAuthenticated && (
)}

{t("versionCheck.checkUpdates")}

{versionInfo && !versionDismissed && (
)}
); } return (
{!isAuthenticated && (
)}

{t("versionCheck.updateRequired")}

); }