diff --git a/src/pages/logs.tsx b/src/pages/logs.tsx index f4166c0..b9df1ab 100644 --- a/src/pages/logs.tsx +++ b/src/pages/logs.tsx @@ -24,11 +24,11 @@ const LogPage = () => { const [match, setMatch] = useState(() => (_: string) => true); const filterLogs = useMemo(() => { - return logData - .filter((data) => - logState === "all" ? true : data.type.includes(logState) - ) - .filter((data) => match(data.payload)); + return logData.filter( + (data) => + (logState === "all" ? true : data.type.includes(logState)) && + match(data.payload) + ); }, [logData, logState, match]); return ( diff --git a/src/services/api.ts b/src/services/api.ts index bded6e3..58b9ad7 100644 --- a/src/services/api.ts +++ b/src/services/api.ts @@ -134,25 +134,48 @@ export const getProxies = async () => { const { GLOBAL: global, DIRECT: direct, REJECT: reject } = proxyRecord; - let groups = Object.values(proxyRecord) - .filter((each) => each.name !== "GLOBAL" && each.all) - .map((each) => ({ - ...each, - all: each.all!.map((item) => generateItem(item)), - })); + interface Group { + all: IProxyItem[]; + name: string; + type: string; + udp: boolean; + xudp: boolean; + tfo: boolean; + history: { + time: string; + delay: number; + }[]; + } + + let groups: Group[] = Object.values(proxyRecord).reduce( + (acc, each) => { + if (each.name !== "GLOBAL" && each.all) { + acc.push({ + ...each, + all: each.all!.map((item) => generateItem(item)), + }); + } + + return acc; + }, + [] + ); if (global?.all) { - let globalGroups = global.all - .filter((name) => proxyRecord[name]?.all) - .map((name) => proxyRecord[name]) - .map((each) => ({ - ...each, - all: each.all!.map((item) => generateItem(item)), - })); - let globalNames = globalGroups.map((each) => each.name); + let globalGroups: Group[] = global.all.reduce((acc, name) => { + if (proxyRecord[name]?.all) { + acc.push({ + ...proxyRecord[name], + all: proxyRecord[name].all!.map((item) => generateItem(item)), + }); + } + return acc; + }, []); + + let globalNames = new Set(globalGroups.map((each) => each.name)); groups = groups .filter((group) => { - return !globalNames.includes(group.name); + return !globalNames.has(group.name); }) .concat(globalGroups); } diff --git a/src/services/cmds.ts b/src/services/cmds.ts index 377f374..f15c95c 100644 --- a/src/services/cmds.ts +++ b/src/services/cmds.ts @@ -7,23 +7,22 @@ export async function getClashLogs() { const newRegex = /(.+?)\s+(.+?)\s+(.+)/; const logs = await invoke("get_clash_logs"); - return logs - .map((log) => { - const result = log.match(regex); - if (result) { - const [_, _time, type, payload] = result; - const time = dayjs(_time).format("MM-DD HH:mm:ss"); - return { time, type, payload }; - } + return logs.reduce((acc, log) => { + const result = log.match(regex); + if (result) { + const [_, _time, type, payload] = result; + const time = dayjs(_time).format("MM-DD HH:mm:ss"); + acc.push({ time, type, payload }); + return acc; + } - const result2 = log.match(newRegex); - if (result2) { - const [_, time, type, payload] = result2; - return { time, type, payload }; - } - return null; - }) - .filter(Boolean) as ILogItem[]; + const result2 = log.match(newRegex); + if (result2) { + const [_, time, type, payload] = result2; + acc.push({ time, type, payload }); + } + return acc; + }, []); } export async function getProfiles() {