fix: show error state in update notification instead of hiding

This commit is contained in:
Jiang Bohan
2026-01-16 16:18:13 +08:00
parent eb6f34bd1d
commit cd792f6110

View File

@@ -3,7 +3,7 @@
* Shows when a new version is available and allows user to download/install
*/
import { useState, useEffect } from 'react'
import { Download, RefreshCw, X, CheckCircle } from 'lucide-react'
import { Download, RefreshCw, X, CheckCircle, AlertCircle } from 'lucide-react'
import { Button } from '@/components/ui/button'
import type { UpdateStatus } from '../../../shared/electron-api'
@@ -39,16 +39,18 @@ export function UpdateNotification(): React.JSX.Element | null {
if (dismissed) return null
if (!updateStatus) return null
if (updateStatus.status === 'checking' || updateStatus.status === 'not-available') return null
if (updateStatus.status === 'error') return null
const version = updateStatus.info?.version
const isError = updateStatus.status === 'error'
return (
<div className="fixed bottom-4 right-4 z-50 animate-in slide-in-from-bottom-2 fade-in duration-300">
<div className="flex items-center gap-3 rounded-lg border bg-card p-3 shadow-lg">
{/* Icon */}
<div className="flex h-8 w-8 items-center justify-center rounded-full bg-primary/10">
{updateStatus.status === 'downloaded' ? (
<div className={`flex h-8 w-8 items-center justify-center rounded-full ${isError ? 'bg-destructive/10' : 'bg-primary/10'}`}>
{isError ? (
<AlertCircle className="h-4 w-4 text-destructive" />
) : updateStatus.status === 'downloaded' ? (
<CheckCircle className="h-4 w-4 text-primary" />
) : updateStatus.status === 'downloading' ? (
<RefreshCw className="h-4 w-4 text-primary animate-spin" />
@@ -60,18 +62,22 @@ export function UpdateNotification(): React.JSX.Element | null {
{/* Content */}
<div className="flex flex-col gap-0.5">
<span className="text-sm font-medium">
{updateStatus.status === 'downloaded'
? 'Update ready'
: updateStatus.status === 'downloading'
? 'Downloading update...'
: 'Update available'}
{isError
? 'Update failed'
: updateStatus.status === 'downloaded'
? 'Update ready'
: updateStatus.status === 'downloading'
? 'Downloading update...'
: 'Update available'}
</span>
<span className="text-xs text-muted-foreground">
{updateStatus.status === 'downloading' && updateStatus.progress
? `${Math.round(updateStatus.progress.percent)}%`
: version
? `Version ${version}`
: 'New version available'}
{isError
? 'Please download manually from GitHub'
: updateStatus.status === 'downloading' && updateStatus.progress
? `${Math.round(updateStatus.progress.percent)}%`
: version
? `Version ${version}`
: 'New version available'}
</span>
</div>
@@ -87,6 +93,15 @@ export function UpdateNotification(): React.JSX.Element | null {
Restart
</Button>
)}
{isError && (
<Button
size="sm"
variant="outline"
onClick={() => window.open('https://github.com/multica-ai/multica/releases', '_blank')}
>
View Releases
</Button>
)}
{updateStatus.status !== 'downloading' && (
<Button size="icon" variant="ghost" className="h-7 w-7" onClick={handleDismiss}>
<X className="h-4 w-4" />