import { open } from "@tauri-apps/plugin-dialog" import { Database, Folder, Save, X } from "lucide-react" import { useState } from "react" import { useTranslation } from "react-i18next" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" 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 { useLanguage } from "@/features/language" import { useModal } from "@/features/modals/services/modal-provider" import { LanguageCode, SUPPORTED_LANGUAGES } from "@/i18n/constants" import { useUserSettings } from "../../hooks/use-user-settings" /** * Вкладка общих настроек пользователя * Содержит основные настройки: язык, пути, производительность */ export function GeneralSettingsTab() { const { screenshotsPath, playerScreenshotsPath, handlePlayerScreenshotsPathChange, handleScreenshotsPathChange, autoSaveEnabled, autoSaveInterval, handleAutoSaveEnabledChange, handleAutoSaveIntervalChange, } = useUserSettings() const { openModal } = useModal() const { t } = useTranslation() const { currentLanguage, changeLanguage } = useLanguage() // Локальное состояние для выбранного языка const [selectedLanguage, setSelectedLanguage] = useState(currentLanguage) /** * Обработчик изменения языка интерфейса */ const handleLanguageSelect = (value: string) => { const newLanguage = value as LanguageCode setSelectedLanguage(newLanguage) console.log("Applying language change via new system:", newLanguage) void changeLanguage(newLanguage) } return (
{/* Выбор языка интерфейса */}
{/* Настройка пути для сохранения скриншотов */}
handleScreenshotsPathChange(e.target.value)} placeholder="public/screenshots" className="h-9 pr-8 font-mono text-sm" /> {screenshotsPath && screenshotsPath !== "public/screenshots" && ( )}
{/* Настройка пути для сохранения скриншотов плеера */}
handlePlayerScreenshotsPathChange(e.target.value)} placeholder="public/media" className="h-9 pr-8 font-mono text-sm" /> {playerScreenshotsPath && playerScreenshotsPath !== "public/media" && ( )}
{/* Раздел производительности */}
{/* Настройки автосохранения */}
{/* Переключатель автосохранения */}
{/* Интервал автосохранения */} {autoSaveEnabled && (
{ const value = Number.parseInt(e.target.value, 10) if (!Number.isNaN(value) && value >= 10 && value <= 3600) { handleAutoSaveIntervalChange(value) } }} className="w-32" /> {t("dialogs.userSettings.autoSave.intervalHint", "10-3600 секунд")}

{t( "dialogs.userSettings.autoSave.description", "Проект будет автоматически сохраняться через указанный интервал времени", )}

)}
) }