>(
{},
@@ -40,6 +42,11 @@ export default () => {
setCollapseMap({ ...cMap })
}
+ const onSpeedTestClick = (e: MouseEvent, name: string) => {
+ e.stopPropagation()
+ delayTestByProxyGroupName(name)
+ }
+
const getCollapseClassName = (name: string) => {
return collapseMap()[name] ? 'collapse-open' : 'collapse-close'
}
@@ -59,10 +66,14 @@ export default () => {
)}
>
onCollapseTitleClick(proxy.name)}
>
{proxy.name} {proxy.type}
+ onSpeedTestClick(e, proxy.name)}
+ />
diff --git a/src/pages/Setup.tsx b/src/pages/Setup.tsx
index 9e2e2e3b..6bc6d01e 100644
--- a/src/pages/Setup.tsx
+++ b/src/pages/Setup.tsx
@@ -82,7 +82,7 @@ export default () => {
class="badge badge-info flex w-full cursor-pointer items-center gap-4 py-4"
onClick={() => {
setSelectedEndpoint(id)
- navigate('/')
+ navigate('/overview')
}}
>
{url}
diff --git a/src/signals/proxies.ts b/src/signals/proxies.ts
index 5ccc2e9c..fb6bf79c 100644
--- a/src/signals/proxies.ts
+++ b/src/signals/proxies.ts
@@ -31,11 +31,15 @@ export function useProxies() {
const { proxies } = await request
.get('proxies')
.json<{ proxies: Record }>()
+ const sortIndex = proxies['GLOBAL'].all ?? []
setProxies(
- Object.values(proxies).filter(
- (proxy) => proxy.all && proxy.all.length > 0,
- ),
+ Object.values(proxies)
+ .filter((proxy) => proxy.all && proxy.all.length > 0)
+ .sort(
+ (pre, next) =>
+ sortIndex.indexOf(pre.name) - sortIndex.indexOf(next.name),
+ ),
)
}
@@ -48,9 +52,25 @@ export function useProxies() {
await updateProxy()
}
+ const delayTestByProxyGroupName = async (proxyGroupName: string) => {
+ const data: Record = await request
+ .get(
+ `group/${proxyGroupName}/delay?url=https%3A%2F%2Fwww.gstatic.com%2Fgenerate_204&timeout=2000`,
+ )
+ .json()
+ const dMap = delayMap()
+
+ Object.entries(data).forEach(([name, time]) => {
+ dMap[name] = time
+ })
+
+ setDelayMap({ ...dMap })
+ }
+
return {
proxies,
proxyProviders,
+ delayTestByProxyGroupName,
delayMap,
updateProxy,
setProxiesByProxyName,