From 433716cf33f007179786c4379df16575957a2449 Mon Sep 17 00:00:00 2001 From: GyDi Date: Sun, 12 Dec 2021 20:41:25 +0800 Subject: [PATCH] feat: optimize the proxy group order --- src/services/proxy.ts | 44 +++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/src/services/proxy.ts b/src/services/proxy.ts index 6cb06d6..c9d6d75 100644 --- a/src/services/proxy.ts +++ b/src/services/proxy.ts @@ -12,35 +12,39 @@ export interface ProxyItem { now?: string; } -export type ProxyGroupItem = Omit & { - all?: ProxyItem[]; - now?: string; +export type ProxyGroupItem = Omit & { + all: ProxyItem[]; }; /// Get the Proxy infomation export async function getProxyInfo() { const response = (await axiosIns.get("/proxies")) as any; - const results = (response?.proxies ?? {}) as Record; + const proxies = (response?.proxies ?? {}) as Record; - const global = results["GLOBAL"] || results["global"]; - const proxies = Object.values(results).filter((each) => each.all == null); + const global = proxies["GLOBAL"]; + const order = global?.all; - const groups = Object.values(results).filter( - (each) => each.name.toLocaleUpperCase() !== "GLOBAL" && each.all != null - ) as ProxyGroupItem[]; + let groups: ProxyGroupItem[] = []; - groups.forEach((each) => { - // @ts-ignore - each.all = each.all?.map((item) => results[item]).filter((e) => e); - }); + if (order) { + groups = order + .filter((name) => proxies[name]?.all) + .map((name) => proxies[name]) + .map((each) => ({ + ...each, + all: each.all!.map((item) => proxies[item]), + })); + } else { + groups = Object.values(proxies) + .filter((each) => each.name !== "GLOBAL" && each.all) + .map((each) => ({ + ...each, + all: each.all!.map((item) => proxies[item]), + })); + groups.sort((a, b) => b.name.localeCompare(a.name)); + } - groups.sort((a, b) => b.name.localeCompare(a.name)); - - return { - global, - groups, - proxies, - }; + return { global, groups, proxies }; } /// Update the Proxy Choose