/** * UpdateBanner - Slim top banner for download progress and restart prompt. * * Visible during download and after the update is ready to install. */ import { useStore } from '@renderer/store'; import { CheckCircle, Loader2, X } from 'lucide-react'; import { useShallow } from 'zustand/react/shallow'; export const UpdateBanner = (): React.JSX.Element | null => { const { showUpdateBanner, updateStatus, downloadProgress, availableVersion, installUpdate, dismissUpdateBanner, } = useStore( useShallow((s) => ({ showUpdateBanner: s.showUpdateBanner, updateStatus: s.updateStatus, downloadProgress: s.downloadProgress, availableVersion: s.availableVersion, installUpdate: s.installUpdate, dismissUpdateBanner: s.dismissUpdateBanner, })) ); if (!showUpdateBanner || (updateStatus !== 'downloading' && updateStatus !== 'downloaded')) { return null; } const isDownloading = updateStatus === 'downloading'; const percent = Math.round(downloadProgress); const clampedPercent = Math.max(0, Math.min(percent, 100)); return (
{isDownloading ? (
Updating app {clampedPercent}%
) : (
Update ready {availableVersion ? ( v{availableVersion} ) : null}
)} {/* Dismiss */}
); };