mirror of
https://github.com/clash-verge-rev/clash-verge-rev
synced 2025-05-05 07:03:45 +08:00
refactor: Simplify log data management and improve search functionality
This commit is contained in:
parent
f948da748e
commit
48d68f5766
@ -85,9 +85,9 @@ const LogItem = ({ value, searchState }: Props) => {
|
|||||||
return (
|
return (
|
||||||
<Item>
|
<Item>
|
||||||
<div>
|
<div>
|
||||||
<span className="time">{value.time}</span>
|
<span className="time">{renderHighlightText(value.time || "")}</span>
|
||||||
<span className="type" data-type={value.type.toLowerCase()}>
|
<span className="type" data-type={value.type.toLowerCase()}>
|
||||||
{value.type}
|
{renderHighlightText(value.type)}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
|
@ -34,34 +34,25 @@ const buildWSUrl = (server: string, secret: string, logLevel: LogLevel) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
interface LogStore {
|
interface LogStore {
|
||||||
logs: Record<LogLevel, ILogItem[]>;
|
logs: ILogItem[];
|
||||||
clearLogs: (level?: LogLevel) => void;
|
clearLogs: () => void;
|
||||||
appendLog: (level: LogLevel, log: ILogItem) => void;
|
appendLog: (log: ILogItem) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const useLogStore = create<LogStore>(
|
const useLogStore = create<LogStore>(
|
||||||
(set: (fn: (state: LogStore) => Partial<LogStore>) => void) => ({
|
(set: (fn: (state: LogStore) => Partial<LogStore>) => void) => ({
|
||||||
logs: {
|
logs: [],
|
||||||
warning: [],
|
clearLogs: () =>
|
||||||
info: [],
|
set(() => ({
|
||||||
debug: [],
|
logs: [],
|
||||||
error: [],
|
|
||||||
all: [],
|
|
||||||
},
|
|
||||||
clearLogs: (level?: LogLevel) =>
|
|
||||||
set((state: LogStore) => ({
|
|
||||||
logs: level
|
|
||||||
? { ...state.logs, [level]: [] }
|
|
||||||
: { warning: [], info: [], debug: [], error: [], all: [] },
|
|
||||||
})),
|
})),
|
||||||
appendLog: (level: LogLevel, log: ILogItem) =>
|
appendLog: (log: ILogItem) =>
|
||||||
set((state: LogStore) => {
|
set((state: LogStore) => {
|
||||||
const currentLogs = state.logs[level];
|
|
||||||
const newLogs =
|
const newLogs =
|
||||||
currentLogs.length >= MAX_LOG_NUM
|
state.logs.length >= MAX_LOG_NUM
|
||||||
? [...currentLogs.slice(1), log]
|
? [...state.logs.slice(1), log]
|
||||||
: [...currentLogs, log];
|
: [...state.logs, log];
|
||||||
return { logs: { ...state.logs, [level]: newLogs } };
|
return { logs: newLogs };
|
||||||
}),
|
}),
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
@ -84,7 +75,7 @@ export const useLogData = (logLevel: LogLevel) => {
|
|||||||
if (!isActive) return;
|
if (!isActive) return;
|
||||||
const data = JSON.parse(event.data) as ILogItem;
|
const data = JSON.parse(event.data) as ILogItem;
|
||||||
const time = dayjs().format("MM-DD HH:mm:ss");
|
const time = dayjs().format("MM-DD HH:mm:ss");
|
||||||
appendLog(logLevel, { ...data, time });
|
appendLog({ ...data, time });
|
||||||
},
|
},
|
||||||
onerror() {
|
onerror() {
|
||||||
if (!isActive) return;
|
if (!isActive) return;
|
||||||
@ -98,10 +89,13 @@ export const useLogData = (logLevel: LogLevel) => {
|
|||||||
};
|
};
|
||||||
}, [clashInfo, enableLog, logLevel]);
|
}, [clashInfo, enableLog, logLevel]);
|
||||||
|
|
||||||
return logs[logLevel];
|
// 根据当前选择的日志等级过滤日志
|
||||||
|
return logLevel === "all"
|
||||||
|
? logs
|
||||||
|
: logs.filter((log) => log.type.toLowerCase() === logLevel);
|
||||||
};
|
};
|
||||||
|
|
||||||
// 导出清空日志的方法
|
// 导出清空日志的方法
|
||||||
export const clearLogs = (level?: LogLevel) => {
|
export const clearLogs = () => {
|
||||||
useLogStore.getState().clearLogs(level);
|
useLogStore.getState().clearLogs();
|
||||||
};
|
};
|
||||||
|
@ -32,11 +32,15 @@ const LogPage = () => {
|
|||||||
|
|
||||||
const filterLogs = useMemo(() => {
|
const filterLogs = useMemo(() => {
|
||||||
return logData
|
return logData
|
||||||
? logData.filter((data) =>
|
? logData.filter((data) => {
|
||||||
logLevel === "all"
|
// 构建完整的搜索文本,包含时间、类型和内容
|
||||||
? match(data.payload)
|
const searchText =
|
||||||
: data.type.includes(logLevel) && match(data.payload),
|
`${data.time || ""} ${data.type} ${data.payload}`.toLowerCase();
|
||||||
)
|
|
||||||
|
return logLevel === "all"
|
||||||
|
? match(searchText)
|
||||||
|
: data.type.toLowerCase() === logLevel && match(searchText);
|
||||||
|
})
|
||||||
: [];
|
: [];
|
||||||
}, [logData, logLevel, match]);
|
}, [logData, logLevel, match]);
|
||||||
|
|
||||||
@ -70,7 +74,7 @@ const LogPage = () => {
|
|||||||
size="small"
|
size="small"
|
||||||
variant="contained"
|
variant="contained"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
clearLogs(logLevel);
|
clearLogs();
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{t("Clear")}
|
{t("Clear")}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user