diff --git a/src/pages/proxies.tsx b/src/pages/proxies.tsx index 945806e35bdf8a23dbc48b4016fcf8b63ef04ed2..4693b2a8de8d1a9d6e727eadd8c43785f3f5bb61 100644 --- a/src/pages/proxies.tsx +++ b/src/pages/proxies.tsx @@ -1,5 +1,5 @@ import useSWR, { useSWRConfig } from "swr"; -import { useEffect } from "react"; +import { useEffect, useMemo } from "react"; import { useLockFn } from "ahooks"; import { useTranslation } from "react-i18next"; import { Button, ButtonGroup, List, Paper } from "@mui/material"; @@ -7,8 +7,8 @@ import { getClashConfig, updateConfigs } from "@/services/api"; import { patchClashConfig } from "@/services/cmds"; import { getProxies } from "@/services/api"; import BasePage from "@/components/base/base-page"; +import BaseEmpty from "@/components/base/base-empty"; import ProxyGroup from "@/components/proxy/proxy-group"; -import ProxyGlobal from "@/components/proxy/proxy-global"; const ProxyPage = () => { const { t } = useTranslation(); @@ -18,7 +18,7 @@ const ProxyPage = () => { const modeList = ["rule", "global", "direct", "script"]; const curMode = clashConfig?.mode.toLowerCase(); - const { groups = [], proxies = [] } = proxiesData ?? {}; + const { global, groups = [], proxies = [] } = proxiesData ?? {}; // make sure that fetch the proxies successfully useEffect(() => { @@ -37,9 +37,15 @@ const ProxyPage = () => { mutate("getClashConfig"); }); + const displayGroups = useMemo(() => { + if (!global) return groups; + if (curMode === "global" || curMode === "direct") + return [global, ...groups]; + return groups; + }, [global, groups, curMode]); + // difference style - const showGroup = - (curMode === "rule" || curMode === "script") && !!groups.length; + const showGroup = displayGroups.length > 0; const pageStyle = showGroup ? {} : { height: "100%" }; const paperStyle: any = showGroup ? { mb: 0.5 } @@ -48,7 +54,7 @@ const ProxyPage = () => { return ( <BasePage contentStyle={pageStyle} - title={showGroup ? t("Proxy Groups") : t("Proxies")} + title={t("Proxy Groups")} header={ <ButtonGroup size="small"> {modeList.map((mode) => ( @@ -65,26 +71,14 @@ const ProxyPage = () => { } > <Paper sx={{ borderRadius: 1, boxShadow: 2, ...paperStyle }}> - {(curMode === "rule" || curMode === "script") && !!groups.length && ( + {displayGroups.length > 0 ? ( <List> - {groups.map((group) => ( + {displayGroups.map((group) => ( <ProxyGroup key={group.name} group={group} /> ))} </List> - )} - {((curMode === "rule" && !groups.length) || curMode === "global") && ( - <ProxyGlobal - groupName="GLOBAL" - curProxy={proxiesData?.global?.now} - proxies={proxies} - /> - )} - {curMode === "direct" && ( - <ProxyGlobal - groupName="DIRECT" - curProxy="DIRECT" - proxies={[proxiesData?.direct!].filter(Boolean)} - /> + ) : ( + <BaseEmpty /> )} </Paper> </BasePage> diff --git a/src/services/api.ts b/src/services/api.ts index f25b3cb75408c375834d47dda8c26429d1a4a513..65594d558e3308e4c9c307165f15dc3d4dcbb4be 100644 --- a/src/services/api.ts +++ b/src/services/api.ts @@ -142,7 +142,12 @@ export async function getProxies() { ) ); - return { global, direct, groups, records: proxyRecord, proxies }; + const _global: ApiType.ProxyGroupItem = { + ...global, + all: global?.all?.map((item) => generateItem(item)) || [], + }; + + return { global: _global, direct, groups, records: proxyRecord, proxies }; } // get proxy providers