From 40dc961024d8ec0d1117439b003883c9f6f6d583 Mon Sep 17 00:00:00 2001 From: Tracy Johnson Date: Thu, 13 Aug 2026 15:26:26 +0000 Subject: [PATCH 1/6] feat(site/src/modules/dashboard/Navbar): replace proxy emoji with latency radio icon in trigger --- .../dashboard/Navbar/ProxyMenu.stories.tsx | 34 +++++++++++++++++++ .../modules/dashboard/Navbar/ProxyMenu.tsx | 15 +++++--- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/site/src/modules/dashboard/Navbar/ProxyMenu.stories.tsx b/site/src/modules/dashboard/Navbar/ProxyMenu.stories.tsx index 4a25ef96059..12c6d73a365 100644 --- a/site/src/modules/dashboard/Navbar/ProxyMenu.stories.tsx +++ b/site/src/modules/dashboard/Navbar/ProxyMenu.stories.tsx @@ -103,6 +103,40 @@ type Story = StoryObj; export const Closed: Story = {}; +export const ClosedWarningLatency: Story = { + args: { + proxyContextValue: { + ...defaultProxyContextValue, + proxyLatencies: { + ...MockProxyLatencies, + [MockWorkspaceProxies[0].id]: { + accurate: true, + latencyMS: 224, + at: new Date(), + nextHopProtocol: "h2", + }, + }, + }, + }, +}; + +export const ClosedCriticalLatency: Story = { + args: { + proxyContextValue: { + ...defaultProxyContextValue, + proxyLatencies: { + ...MockProxyLatencies, + [MockWorkspaceProxies[0].id]: { + accurate: true, + latencyMS: 471, + at: new Date(), + nextHopProtocol: "h2", + }, + }, + }, + }, +}; + export const Opened: Story = { play: async ({ canvasElement }) => { const canvas = within(canvasElement); diff --git a/site/src/modules/dashboard/Navbar/ProxyMenu.tsx b/site/src/modules/dashboard/Navbar/ProxyMenu.tsx index 85d9e37ff80..9d8c738a177 100644 --- a/site/src/modules/dashboard/Navbar/ProxyMenu.tsx +++ b/site/src/modules/dashboard/Navbar/ProxyMenu.tsx @@ -1,3 +1,4 @@ +import { RadioIcon } from "lucide-react"; import { type FC, useState } from "react"; import { Link } from "react-router"; import { toast } from "sonner"; @@ -19,6 +20,7 @@ import { Latency } from "#/components/Latency/Latency"; import { Skeleton } from "#/components/Skeleton/Skeleton"; import type { ProxyContextValue } from "#/contexts/ProxyContext"; import { useAuthenticated } from "#/hooks/useAuthenticated"; +import { getLatencyColor } from "#/utils/latency"; import { sortProxiesByLatency } from "./proxyUtils"; interface ProxyMenuProps { @@ -80,14 +82,17 @@ export const ProxyMenu: FC = ({ proxyContextValue }) => { {selectedProxy ? ( <> -