From e3fc01dcf0ca668d97c27f11a141cdaacf77388d Mon Sep 17 00:00:00 2001 From: pompurin404 Date: Fri, 2 Aug 2024 21:38:03 +0800 Subject: [PATCH] logs page --- src/renderer/src/App.tsx | 8 +--- .../src/components/base/base-page.tsx | 4 +- src/renderer/src/components/logs/log-item.tsx | 25 ++++++++++ .../src/components/sider/conn-card.tsx | 2 +- src/renderer/src/pages/logs.tsx | 48 +++++++++++++++++-- src/renderer/src/pages/profiles.tsx | 2 +- src/shared/types.d.ts | 1 + 7 files changed, 74 insertions(+), 16 deletions(-) create mode 100644 src/renderer/src/components/logs/log-item.tsx diff --git a/src/renderer/src/App.tsx b/src/renderer/src/App.tsx index 2357dc2..126fa2d 100644 --- a/src/renderer/src/App.tsx +++ b/src/renderer/src/App.tsx @@ -44,7 +44,7 @@ const App: React.FC = () => { return (
-
+

Mihomo Party

-
- - {/*

代理模式

*/}
- {/*

配置

*/} - {/*
*/}
@@ -86,7 +81,6 @@ const App: React.FC = () => {
- {/*
*/}
{page}
diff --git a/src/renderer/src/components/base/base-page.tsx b/src/renderer/src/components/base/base-page.tsx index fb37dda..eb79897 100644 --- a/src/renderer/src/components/base/base-page.tsx +++ b/src/renderer/src/components/base/base-page.tsx @@ -1,5 +1,4 @@ import React from 'react' -import { Divider } from '@nextui-org/divider' interface Props { title?: React.ReactNode header?: React.ReactNode @@ -10,12 +9,11 @@ interface Props { const BasePage: React.FC = (props) => { return (
-
+
{props.title}
{props.header}
-
{props.children}
diff --git a/src/renderer/src/components/logs/log-item.tsx b/src/renderer/src/components/logs/log-item.tsx new file mode 100644 index 0000000..83c8bbc --- /dev/null +++ b/src/renderer/src/components/logs/log-item.tsx @@ -0,0 +1,25 @@ +import { Card, CardBody, CardHeader } from '@nextui-org/react' +import React from 'react' + +const colorMap = { + error: 'danger', + warn: 'warning', + info: 'primary', + debug: 'default' +} +const LogItem: React.FC = (props) => { + const { type, payload, time } = props + return ( + + +
+ {props.type.toUpperCase()} +
+ {time} +
+ {payload} +
+ ) +} + +export default LogItem diff --git a/src/renderer/src/components/sider/conn-card.tsx b/src/renderer/src/components/sider/conn-card.tsx index 3a0b3f4..e8870c3 100644 --- a/src/renderer/src/components/sider/conn-card.tsx +++ b/src/renderer/src/components/sider/conn-card.tsx @@ -40,7 +40,7 @@ const ConnCard: React.FC = () => { > -
+
{calcTraffic(upload)}/s
diff --git a/src/renderer/src/pages/logs.tsx b/src/renderer/src/pages/logs.tsx index 943d4c3..045ba07 100644 --- a/src/renderer/src/pages/logs.tsx +++ b/src/renderer/src/pages/logs.tsx @@ -1,21 +1,61 @@ import BasePage from '@renderer/components/base/base-page' import { startMihomoLogs, stopMihomoLogs } from '@renderer/utils/ipc' -import { useEffect } from 'react' +import LogItem from '@renderer/components/logs/log-item' +import { useEffect, useMemo, useState } from 'react' +import { Input } from '@nextui-org/react' const Logs: React.FC = () => { + const [logs, setLogs] = useState([]) + const [filter, setFilter] = useState('') + + const filteredLogs = useMemo(() => { + if (filter === '') return logs + return logs.filter((log) => { + return log.payload.includes(filter) + }) + }, [logs, filter]) + useEffect(() => { startMihomoLogs() window.electron.ipcRenderer.on('mihomoLogs', (_e, log: IMihomoLogInfo) => { - console.log(log) + log.time = new Date().toISOString() + setLogs((prevLogs) => { + if (prevLogs.length >= 200) { + prevLogs.shift() + } + return [...prevLogs, log] + }) }) return (): void => { stopMihomoLogs() - window.electron.ipcRenderer.removeAllListeners('mihomoTraffic') + window.electron.ipcRenderer.removeAllListeners('mihomoLogs') } }, []) - return + return ( + +
+ +
+ {filteredLogs.map((log, index) => { + return ( + + ) + })} +
+ ) } export default Logs diff --git a/src/renderer/src/pages/profiles.tsx b/src/renderer/src/pages/profiles.tsx index 9ac0a2e..1b56756 100644 --- a/src/renderer/src/pages/profiles.tsx +++ b/src/renderer/src/pages/profiles.tsx @@ -24,7 +24,7 @@ const Profiles: React.FC = () => { return ( -
+