diff --git a/src/hooks/use-log-data.ts b/src/hooks/use-log-data.ts index 9889812ad..6540216b0 100644 --- a/src/hooks/use-log-data.ts +++ b/src/hooks/use-log-data.ts @@ -101,7 +101,12 @@ export const useLogData = () => { async onConnected() { const logs = await getClashLogs() if (isMounted()) { - next(null, clampLogs(filterLogsByLevel(logs, allowedTypes))) + next(null, (current) => { + if (!current || current.length === 0) { + return clampLogs(filterLogsByLevel(logs, allowedTypes)) + } + return current + }) } }, cleanup: clearFlushTimer, diff --git a/src/pages/_layout.tsx b/src/pages/_layout.tsx index 410e136cc..de43cd3dc 100644 --- a/src/pages/_layout.tsx +++ b/src/pages/_layout.tsx @@ -26,7 +26,7 @@ import relativeTime from 'dayjs/plugin/relativeTime' import type { CSSProperties } from 'react' import { useCallback, useEffect, useMemo, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' -import { Outlet, useNavigate } from 'react-router' +import { Outlet, useLocation, useNavigate } from 'react-router' import { SWRConfig } from 'swr' import iconDark from '@/assets/image/icon_dark.svg?react' @@ -53,6 +53,7 @@ import { } from './_layout/hooks' import { handleNoticeMessage } from './_layout/utils' import { navItems } from './_routers' +import LogsPage from './logs' import 'dayjs/locale/ru' import 'dayjs/locale/zh-cn' @@ -120,6 +121,10 @@ const Layout = () => { const navCollapsed = verge?.collapse_navbar ?? false const { switchLanguage } = useI18n() const navigate = useNavigate() + const { pathname } = useLocation() + const isLogsPage = pathname === '/logs' + const logsPageMountedRef = useRef(false) + if (isLogsPage) logsPageMountedRef.current = true const themeReady = useMemo(() => Boolean(theme), [theme]) const [menuUnlocked, setMenuUnlocked] = useState(false) @@ -477,6 +482,20 @@ const Layout = () => { + {logsPageMountedRef.current && ( +
+ +
+ )} diff --git a/src/pages/_routers.tsx b/src/pages/_routers.tsx index d288dfd58..080d13c8b 100644 --- a/src/pages/_routers.tsx +++ b/src/pages/_routers.tsx @@ -20,7 +20,6 @@ import UnlockSvg from '@/assets/image/itemicon/unlock.svg?react' import Layout from './_layout' import ConnectionsPage from './connections' import HomePage from './home' -import LogsPage from './logs' import ProfilesPage from './profiles' import ProxiesPage from './proxies' import RulesPage from './rules' @@ -62,7 +61,7 @@ export const navItems = [ label: 'layout.components.navigation.tabs.logs', path: '/logs', icon: [, ], - Component: LogsPage, + Component: () => null /* KeepAlive: real LogsPage rendered in Layout */, }, { label: 'layout.components.navigation.tabs.unlock',