/** * UpdateSettings - страница настроек обновлений * Позволяет пользователю настроить автоматическую проверку обновлений */ import { Clock, Download, Info, RefreshCw, Settings } from "lucide-react" import { useState } from "react" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Label } from "@/components/ui/label" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Separator } from "@/components/ui/separator" import { Switch } from "@/components/ui/switch" import { useUpdateManager } from "../hooks/use-update-manager" interface UpdateSettingsProps { className?: string } /** * Компонент настроек обновлений */ export function UpdateSettings({ className }: UpdateSettingsProps) { const { currentVersion, availableUpdate, isChecking, isUpdateAvailable, autoCheckSettings, checkForUpdates, enableAutoCheck, disableAutoCheck, } = useUpdateManager() const [selectedInterval, setSelectedInterval] = useState(autoCheckSettings.intervalMinutes.toString()) const handleAutoCheckToggle = (enabled: boolean) => { if (enabled) { enableAutoCheck(Number.parseInt(selectedInterval)) } else { disableAutoCheck() } } const handleIntervalChange = (value: string) => { setSelectedInterval(value) if (autoCheckSettings.enabled) { enableAutoCheck(Number.parseInt(value)) } } const intervalOptions = [ { value: "15", label: "Каждые 15 минут" }, { value: "30", label: "Каждые 30 минут" }, { value: "60", label: "Каждый час" }, { value: "180", label: "Каждые 3 часа" }, { value: "360", label: "Каждые 6 часов" }, { value: "720", label: "Каждые 12 часов" }, { value: "1440", label: "Каждый день" }, ] return (
{/* Заголовок */}

Настройки обновлений

{/* Текущая версия */} Информация о версии Информация о текущей версии приложения
{currentVersion} {isUpdateAvailable && availableUpdate && ( Доступна {availableUpdate.version} )}
{isUpdateAvailable && availableUpdate && (
Доступно обновление
Версия {availableUpdate.version}
{availableUpdate.notes && (
{availableUpdate.notes}
)} {availableUpdate.pub_date && (
{new Date(availableUpdate.pub_date).toLocaleDateString("ru-RU")}
)}
)}
{/* Настройки автоматической проверки */} Автоматическая проверка Настройте автоматическую проверку обновлений в фоновом режиме
Приложение будет автоматически проверять наличие обновлений
{autoCheckSettings.enabled ? `Проверка обновлений происходит ${intervalOptions.find((opt) => opt.value === selectedInterval)?.label.toLowerCase()}` : "Выберите интервал для автоматической проверки"}
{/* Дополнительные настройки */} Дополнительные настройки Расширенные опции для управления обновлениями
Показывать уведомления о доступных обновлениях
Автоматически загружать обновления при обнаружении
Включить проверку предварительных версий
{/* Информация о релизах */} История обновлений Последние обновления приложения
История обновлений будет отображаться здесь после получения данных от сервера.
) } /** * Упрощенная версия настроек для встраивания в модальные окна */ export function CompactUpdateSettings({ className }: { className?: string }) { const { autoCheckSettings, enableAutoCheck, disableAutoCheck } = useUpdateManager() const [selectedInterval, setSelectedInterval] = useState(autoCheckSettings.intervalMinutes.toString()) const handleAutoCheckToggle = (enabled: boolean) => { if (enabled) { enableAutoCheck(Number.parseInt(selectedInterval)) } else { disableAutoCheck() } } const handleIntervalChange = (value: string) => { setSelectedInterval(value) if (autoCheckSettings.enabled) { enableAutoCheck(Number.parseInt(value)) } } const intervalOptions = [ { value: "60", label: "Каждый час" }, { value: "180", label: "Каждые 3 часа" }, { value: "720", label: "Каждые 12 часов" }, { value: "1440", label: "Каждый день" }, ] return (
Проверять обновления в фоновом режиме
{autoCheckSettings.enabled && (
)}
) }