import { ContentCopyRounded } from '@mui/icons-material' import { Typography } from '@mui/material' import { useCallback, useRef } from 'react' import { useTranslation } from 'react-i18next' import { DialogRef, TooltipIcon } from '@/components/base' import { updateLastCheckTime } from '@/hooks/use-update' import { exitApp, exportDiagnosticInfo, openAppDir, openCoreDir, openDevTools, openLogsDir, } from '@/services/cmds' import { mutate } from '@/services/mutate' import { showNotice } from '@/services/notice-service' import { checkUpdateSafe as checkUpdate } from '@/services/update' import { version } from '@root/package.json' import { BackupViewer } from './mods/backup-viewer' import { ConfigViewer } from './mods/config-viewer' import { HotkeyViewer } from './mods/hotkey-viewer' import { LayoutViewer } from './mods/layout-viewer' import { LiteModeViewer } from './mods/lite-mode-viewer' import { MiscViewer } from './mods/misc-viewer' import { SettingItem, SettingList } from './mods/setting-comp' import { ThemeViewer } from './mods/theme-viewer' import { UpdateViewer } from './mods/update-viewer' interface Props { onError?: (err: Error) => void } const SettingVergeAdvanced = ({ onError: _ }: Props) => { const { t } = useTranslation() 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 liteModeRef = useRef(null) const onCheckUpdate = async () => { try { const info = await checkUpdate() updateLastCheckTime() if (!info?.available) { showNotice.success( 'settings.components.verge.advanced.notifications.latestVersion', ) } else { updateRef.current?.open() } } catch (err) { console.warn('update check failed:', err) showNotice.warning(err) } } const onExportDiagnosticInfo = useCallback(async () => { await mutate(() => exportDiagnosticInfo(), { id: 'export-diagnostic-info', errorNotice: false, }) showNotice.success('shared.feedback.notifications.common.copySuccess', 1000) }, []) const copyVersion = useCallback(() => { navigator.clipboard.writeText(`v${version}`).then(() => { showNotice.success( 'settings.components.verge.advanced.notifications.versionCopied', 1000, ) }) }, []) return ( backupRef.current?.open()} label={t('settings.components.verge.advanced.fields.backupSetting')} extra={ } /> configRef.current?.open()} label={t('settings.components.verge.advanced.fields.runtimeConfig')} /> } /> { void mutate(() => openDevTools(), { id: 'open-devtools', errorNotice: false, }).catch(() => {}) }} label={t('settings.components.verge.advanced.fields.openDevTools')} /> } onClick={() => liteModeRef.current?.open()} /> { void mutate(() => exitApp(), { id: 'exit-app', errorNotice: false, }).catch(() => {}) }} label={t('settings.components.verge.advanced.fields.exit')} /> } > } > v{version} ) } export default SettingVergeAdvanced