import { createFileRoute } from '@tanstack/react-router' import { route } from '@/constants/routes' import SettingsMenu from '@/containers/SettingsMenu' import HeaderPage from '@/containers/HeaderPage' import { Switch } from '@/components/ui/switch' import { Button } from '@/components/ui/button' import { Card, CardItem } from '@/containers/Card' import LanguageSwitcher from '@/containers/LanguageSwitcher' import { useTranslation } from 'react-i18next' import { useGeneralSetting } from '@/hooks/useGeneralSetting' import { useEffect, useState } from 'react' import { open } from '@tauri-apps/plugin-dialog' import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from '@/components/ui/dialog' import { factoryReset, getJanDataFolder, relocateJanDataFolder, } from '@/services/app' import { IconFolder, IconLogs } from '@tabler/icons-react' import { WebviewWindow } from '@tauri-apps/api/webviewWindow' import { windowKey } from '@/constants/windows' // eslint-disable-next-line @typescript-eslint/no-explicit-any export const Route = createFileRoute(route.settings.general as any)({ component: General, }) function General() { const { t } = useTranslation() const { spellCheckChatInput, setSpellCheckChatInput } = useGeneralSetting() const [janDataFolder, setJanDataFolder] = useState() useEffect(() => { const fetchDataFolder = async () => { const path = await getJanDataFolder() setJanDataFolder(path) } fetchDataFolder() }, []) const resetApp = async () => { // TODO: Loading indicator await factoryReset() } const handleOpenLogs = async () => { try { // Check if logs window already exists const existingWindow = await WebviewWindow.getByLabel( windowKey.logsAppWindow ) if (existingWindow) { // If window exists, focus it await existingWindow.setFocus() console.log('Focused existing logs window') } else { // Create a new logs window using Tauri v2 WebviewWindow API const logsWindow = new WebviewWindow(windowKey.logsAppWindow, { url: route.appLogs, title: 'App Logs - Jan', width: 800, height: 600, resizable: true, center: true, }) // Listen for window creation logsWindow.once('tauri://created', () => { console.log('Logs window created') }) // Listen for window errors logsWindow.once('tauri://error', (e) => { console.error('Error creating logs window:', e) }) } } catch (error) { console.error('Failed to open logs window:', error) } } return (

{t('common.settings')}

{/* General */} v{VERSION} } /> } /> } /> {/* Data folder */} {t('settings.dataFolder.appDataDesc', { ns: 'settings', })} {janDataFolder} } actions={ } /> {/* Open Logs */}
} />
{/* Other */} setSpellCheckChatInput(e)} /> } /> Factory Reset Are you sure you want to reset the app to factory settings? This action is irreversible and recommended only if the application is corrupted. } />
) }