feat: optimize the proxy group order

This commit is contained in:
GyDi 2021-12-12 20:41:25 +08:00
parent e737bb4cea
commit 433716cf33

View File

@ -12,35 +12,39 @@ export interface ProxyItem {
now?: string; now?: string;
} }
export type ProxyGroupItem = Omit<ProxyItem, "all" | "now"> & { export type ProxyGroupItem = Omit<ProxyItem, "all"> & {
all?: ProxyItem[]; all: ProxyItem[];
now?: string;
}; };
/// Get the Proxy infomation /// Get the Proxy infomation
export async function getProxyInfo() { export async function getProxyInfo() {
const response = (await axiosIns.get("/proxies")) as any; const response = (await axiosIns.get("/proxies")) as any;
const results = (response?.proxies ?? {}) as Record<string, ProxyItem>; const proxies = (response?.proxies ?? {}) as Record<string, ProxyItem>;
const global = results["GLOBAL"] || results["global"]; const global = proxies["GLOBAL"];
const proxies = Object.values(results).filter((each) => each.all == null); const order = global?.all;
const groups = Object.values(results).filter( let groups: ProxyGroupItem[] = [];
(each) => each.name.toLocaleUpperCase() !== "GLOBAL" && each.all != null
) as 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 { return { global, groups, proxies };
global,
groups,
proxies,
};
} }
/// Update the Proxy Choose /// Update the Proxy Choose