/**
* 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 && (
)}
)
}