diff --git a/packages/web/src/components/ui/UpdateToast.tsx b/packages/web/src/components/ui/UpdateToast.tsx index e506439b..e7fb04d8 100644 --- a/packages/web/src/components/ui/UpdateToast.tsx +++ b/packages/web/src/components/ui/UpdateToast.tsx @@ -1,44 +1,88 @@ -import React, { useState, useEffect } from 'react'; +import { useState, useEffect } from 'react'; import { isElectron } from '../../platform/platform'; +interface UpdateError { + message: string; + releaseUrl: string; +} + /** - * Persistent toast shown when an Electron auto-update has been downloaded. + * Persistent toast shown when an Electron auto-update has been downloaded + * or when auto-update fails (offers manual download link). * Renders nothing in browser environments. */ export function UpdateToast() { const [downloadedVersion, setDownloadedVersion] = useState(null); + const [failedUpdate, setFailedUpdate] = useState(null); useEffect(() => { if (!isElectron() || !window.backspace) return; window.backspace.onUpdateDownloaded((info) => { setDownloadedVersion(info.version); + // Auto-download succeeded — clear any previous error state + setFailedUpdate(null); + }); + + window.backspace.onUpdateError((error) => { + setFailedUpdate(error); }); }, []); - if (!downloadedVersion) return null; + // Nothing to show + if (!downloadedVersion && !failedUpdate) return null; - const handleRestart = () => { - window.backspace?.installUpdate(); - }; + // Auto-download succeeded — show restart toast + if (downloadedVersion) { + return ( +
+
+
+

Update ready

+

+ Version {downloadedVersion} has been downloaded +

+
+ + +
+
+ ); + } + // Auto-download failed — show manual download toast return (
-
+
-

Update ready

+

Update available

- Version {downloadedVersion} has been downloaded + Auto-install failed — download manually

- + Download +