-
+
{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 (
-