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")}} - - - - - - - - - - - {selectedProxy} + {sortType === "default" && {t("Sort by default")}} + {sortType === "delay" && {t("Sort by delay")}} + {sortType === "name" && {t("Sort by name")}} - - - {proxyOptions.map((proxy) => ( - - ))} - - + + + + + + + + + {proxyOptions.map((proxy) => ( + + ))} + + + - - + ); };
{t("Sort by default")}
{t("Sort by delay")}
{t("Sort by name")}
{selectedProxy}