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

{t("versionCheck.checkingUpdates")}

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

{t("versionCheck.checkUpdates")}

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

{t("versionCheck.updateRequired")}

); }