/** * UpdateStatusIndicator - индикатор статуса обновлений для строки состояния * Показывает компактную информацию о состоянии обновлений */ import { AlertCircle, CheckCircle, Download, Loader2, RefreshCw } from "lucide-react" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip" import { useUpdateManager } from "../hooks/use-update-manager" interface UpdateStatusIndicatorProps { /** Показывать ли текст рядом с иконкой */ showText?: boolean /** Компактный режим (только иконка) */ compact?: boolean /** Дополнительные CSS классы */ className?: string /** Обработчик клика */ onClick?: () => void } /** * Индикатор статуса обновлений для строки состояния */ export function UpdateStatusIndicator({ showText = false, compact = false, className, onClick, }: UpdateStatusIndicatorProps) { const { isIdle, isChecking, isUpdateAvailable, isDownloading, isReadyToInstall, isInstalling, isInstalled, isError, availableUpdate, error, progress, currentVersion, checkForUpdates, downloadUpdate, installUpdate, } = useUpdateManager() // Не показываем индикатор в обычном состоянии если не указано явно if (isIdle && !onClick) { return null } const getIcon = () => { if (isError) return if (isInstalled) return if (isInstalling) return if (isReadyToInstall) return if (isDownloading) return if (isChecking) return if (isUpdateAvailable) return return } const getText = () => { if (isError) return "Ошибка" if (isInstalled) return "Установлено" if (isInstalling) return "Установка..." if (isReadyToInstall) return "Готово" if (isDownloading) return "Загрузка..." if (isChecking) return "Проверка..." if (isUpdateAvailable) return "Обновление" return "Проверить" } const getTooltipContent = () => { if (isError) return `Ошибка обновления: ${error || "Неизвестная ошибка"}` if (isInstalled) return "Обновление установлено. Перезапустите приложение." if (isInstalling) return "Установка обновления..." if (isReadyToInstall) return "Обновление готово к установке" if (isDownloading) { const progressText = progress ? ` (${progress.percentage}%)` : "" return `Загрузка обновления${progressText}` } if (isChecking) return "Проверка доступных обновлений..." if (isUpdateAvailable && availableUpdate) { return `Доступна версия ${availableUpdate.version}` } return `Текущая версия: ${currentVersion}. Нажмите для проверки обновлений.` } const handleClick = () => { if (onClick) { onClick() return } // Автоматические действия в зависимости от состояния if (isUpdateAvailable) { downloadUpdate() } else if (isReadyToInstall) { installUpdate() } else if (isIdle || isError) { checkForUpdates() } } const getVariant = () => { if (isError) return "destructive" as const if (isUpdateAvailable || isReadyToInstall) return "default" as const return "ghost" as const } // Компактный режим - только иконка if (compact) { return (

{getTooltipContent()}

) } // Обычный режим с текстом return (

{getTooltipContent()}

) } /** * Простой индикатор только с иконкой для встраивания в тесные места */ export function UpdateIconIndicator({ className }: { className?: string }) { return } /** * Индикатор с текстом для более широких панелей */ export function UpdateTextIndicator({ className }: { className?: string }) { return }