import { ActionIcon, Tooltip } from '@mantine/core'; import { CircleFadingArrowUp, Download } from 'lucide-react'; import { type MouseEvent, useState } from 'react'; import { TITLEBAR_HEIGHT } from '@/constants'; import { useAppUpdateChecker } from '@/hooks/useAppUpdateChecker'; export const UpdateButton = () => { const { hasUpdate, releaseUrl, canAutoUpdate, isUpdateDownloaded, isDownloading, downloadUpdate, installUpdate, } = useAppUpdateChecker(); const [showDownload, setShowDownload] = useState(false); if (!hasUpdate) return null; let color: 'green' | 'blue' | 'orange' = 'orange'; let label = 'Update available'; let onClick: (() => void) | undefined; let icon = ; if (isUpdateDownloaded) { color = 'green'; label = 'Install update and restart'; onClick = installUpdate; } else if (isDownloading) { color = 'blue'; label = 'Downloading update...'; icon = ; } else if (showDownload && canAutoUpdate) { color = 'blue'; label = 'Download and install update'; onClick = () => { void downloadUpdate(); setShowDownload(false); }; icon = ; } else { color = 'orange'; label = canAutoUpdate ? 'Update available - Click to view, right-click to download' : 'Update available - Click to view'; onClick = () => { if (releaseUrl) { void window.electronAPI.app.openExternal(releaseUrl); } }; } const handleContextMenu = (e: MouseEvent) => { e.preventDefault(); if (canAutoUpdate && !isDownloading && !isUpdateDownloaded) { setShowDownload(true); void downloadUpdate(); } }; return ( {icon} ); };