import { ContentCopyRounded } from '@mui/icons-material' import { Button, Input, MenuItem, Select } from '@mui/material' import { open } from '@tauri-apps/plugin-dialog' import { useCallback, useRef } from 'react' import { useTranslation } from 'react-i18next' import { DialogRef, TooltipIcon } from '@/components/base' import { useVerge } from '@/hooks/use-verge' import { navigationItems } from '@/pages/_navigation-meta' import { copyClashEnv } from '@/services/cmds' import { supportedLanguages } from '@/services/i18n' import { mutate } from '@/services/mutate' import { showNotice } from '@/services/notice-service' import getSystem from '@/utils/get-system' import { BackupViewer } from './mods/backup-viewer' import { ConfigViewer } from './mods/config-viewer' import { GuardState } from './mods/guard-state' import { HotkeyViewer } from './mods/hotkey-viewer' import { LayoutViewer } from './mods/layout-viewer' import { MiscViewer } from './mods/misc-viewer' import { SettingItem, SettingList } from './mods/setting-comp' import { ThemeModeSwitch } from './mods/theme-mode-switch' import { ThemeViewer } from './mods/theme-viewer' import { UpdateViewer } from './mods/update-viewer' interface Props { onError?: (err: Error) => void } const OS = getSystem() const languageOptions = supportedLanguages.map((code) => { const labels: { [key: string]: string } = { en: 'English', ru: 'Русский', zh: '简体中文', fa: 'فارسی', tt: 'Татар', id: 'Bahasa Indonesia', ar: 'العربية', ko: '한국어', tr: 'Türkçe', de: 'Deutsch', es: 'Español', jp: '日本語', zhtw: '繁體中文', pt: 'Português', } const label = labels[code] || code return { code, label } }) const SettingVergeBasic = ({ onError }: Props) => { const { t } = useTranslation() const { verge, patchVerge, mutateVerge } = useVerge() const { theme_mode, language, tray_event, env_type, startup_script, start_page, } = verge ?? {} const configRef = useRef(null) const hotkeyRef = useRef(null) const miscRef = useRef(null) const themeRef = useRef(null) const layoutRef = useRef(null) const updateRef = useRef(null) const backupRef = useRef(null) const onChangeData = (patch: any) => { mutateVerge({ ...verge, ...patch }, false) } const onCopyClashEnv = useCallback(async () => { try { await mutate(copyClashEnv, { id: 'copy-clash-env', onFulfilled: () => showNotice.success( 'shared.feedback.notifications.common.copySuccess', 1000, ), }) } catch { // The shared mutation boundary reports the failure. } }, []) return ( e.target.value} onChange={(e) => onChangeData({ language: e })} onGuard={(e) => patchVerge({ language: e })} > onChangeData({ theme_mode: e })} onGuard={(e) => patchVerge({ theme_mode: e })} > {OS !== 'linux' && ( e.target.value} onChange={(e) => onChangeData({ tray_event: e })} onGuard={(e) => patchVerge({ tray_event: e })} > )} } > e.target.value} onChange={(e) => onChangeData({ env_type: e })} onGuard={(e) => patchVerge({ env_type: e })} > e.target.value} onChange={(e) => onChangeData({ start_page: e })} onGuard={(e) => patchVerge({ start_page: e })} > e.target.value} onChange={(e) => onChangeData({ startup_script: e })} onGuard={(e) => patchVerge({ startup_script: e })} > {startup_script && ( )} } > themeRef.current?.open()} label={t('settings.components.verge.basic.fields.themeSetting')} /> layoutRef.current?.open()} label={t('settings.components.verge.basic.fields.layoutSetting')} /> miscRef.current?.open()} label={t('settings.components.verge.basic.fields.misc')} /> hotkeyRef.current?.open()} label={t('settings.components.verge.basic.fields.hotkeySetting')} /> ) } export default SettingVergeBasic