From 967f21cc23d8a0ee8c82bc8bf75d15aa391e09e4 Mon Sep 17 00:00:00 2001 From: coolcoala Date: Sat, 23 Aug 2025 03:10:46 +0300 Subject: [PATCH] Improved proxy selector view --- src/components/home/proxy-selectors.tsx | 124 +++++++++++++----------- 1 file changed, 65 insertions(+), 59 deletions(-) diff --git a/src/components/home/proxy-selectors.tsx b/src/components/home/proxy-selectors.tsx index c47099d5..6173c6ba 100644 --- a/src/components/home/proxy-selectors.tsx +++ b/src/components/home/proxy-selectors.tsx @@ -41,12 +41,14 @@ interface IProxyGroup { } // --- Вспомогательная функция для цвета задержки --- -function getDelayBadgeVariant( - delayValue: number, -): "default" | "secondary" | "destructive" | "outline" { - if (delayValue < 0) return "secondary"; - if (delayValue >= 150) return "destructive"; - return "default"; +function getDelayColorClasses(delayValue: number): string { + if (delayValue < 0) { + return "text-muted-foreground border-border"; + } + if (delayValue >= 150) { + return "text-destructive border-destructive/40"; + } + return "text-green-600 border-green-500/40 dark:text-green-400 dark:border-green-400/30"; } // --- Дочерний компонент для элемента списка с "живым" обновлением пинга --- @@ -80,20 +82,21 @@ const ProxySelectItem = ({ }, [proxyName, groupName]); return ( - -
- {proxyName} - - {delay < 0 || delay > 10000 ? "---" : delay} - -
-
+ +
+ + {delay < 0 || delay > 10000 ? "---" : delay} + + {proxyName} +
+
); }; @@ -259,11 +262,21 @@ export const ProxySelectors: React.FC = () => { ?.all; if (sourceList) { - options = sourceList - .map((proxy: any) => ({ - name: typeof proxy === "string" ? proxy : proxy.name, - })) - .filter((p: { name: string }) => p.name); + const rawOptions = sourceList + .map((proxy: any) => ({ + name: typeof proxy === "string" ? proxy : proxy.name, + })) + .filter((p: { name: string }) => p.name); + + // Удаляем дубли по имени прокси + const uniqueNames = new Set(); + options = rawOptions.filter((proxy: any) => { + if (!uniqueNames.has(proxy.name)) { + uniqueNames.add(proxy.name); + return true; + } + return false; + }); } if (sortType === "name") @@ -345,44 +358,37 @@ export const ProxySelectors: React.FC = () => { {sortType === "name" && } - - - {sortType === "default" &&

{t("Sort by default")}

} - {sortType === "delay" &&

{t("Sort by delay")}

} - {sortType === "name" &&

{t("Sort by name")}

} -
- - - + + + - - + ); };