From d82e20152b9865d0449656cb8fb07bb8a311923e Mon Sep 17 00:00:00 2001 From: Bruno Quaresma Date: Wed, 20 Mar 2024 09:34:30 -0300 Subject: [PATCH] feat(site): make listening ports scrollable (#12660) --- .../modules/resources/PortForwardButton.tsx | 135 ++++++++++-------- .../PortForwardPopoverView.stories.tsx | 18 +++ 2 files changed, 94 insertions(+), 59 deletions(-) diff --git a/site/src/modules/resources/PortForwardButton.tsx b/site/src/modules/resources/PortForwardButton.tsx index 555d89f82d..ab05a8dc26 100644 --- a/site/src/modules/resources/PortForwardButton.tsx +++ b/site/src/modules/resources/PortForwardButton.tsx @@ -220,73 +220,90 @@ export const PortForwardPopoverView: FC = ({ <>
- ({ + padding: 20, + paddingBottom: 10, + position: "sticky", + top: 0, + background: theme.palette.background.paper, + // For some reason the Share button label has a higher z-index than + // the header. Probably some tricky stuff from MUI. + zIndex: 1, + })} > - Listening ports - - Learn more - - - - {filteredListeningPorts?.length === 0 - ? "No open ports were detected." - : "The listening ports are exclusively accessible to you."} - -
{ - e.preventDefault(); - const formData = new FormData(e.currentTarget); - const port = Number(formData.get("portNumber")); - const url = portForwardURL( - host, - port, - agent.name, - workspaceName, - username, - ); - window.open(url, "_blank"); - }} - > - - -
+ + +
{filteredListeningPorts?.map((port) => { diff --git a/site/src/modules/resources/PortForwardPopoverView.stories.tsx b/site/src/modules/resources/PortForwardPopoverView.stories.tsx index c026ff1d00..9042c05e07 100644 --- a/site/src/modules/resources/PortForwardPopoverView.stories.tsx +++ b/site/src/modules/resources/PortForwardPopoverView.stories.tsx @@ -51,6 +51,24 @@ export const WithPorts: Story = { }, }; +export const WithManyPorts: Story = { + args: { + listeningPorts: Array.from({ length: 20 }).map((_, i) => ({ + process_name: `port-${i}`, + network: "", + port: 3000 + i, + })), + }, + parameters: { + queries: [ + { + key: ["sharedPorts", MockWorkspace.id], + data: MockSharedPortsResponse, + }, + ], + }, +}; + export const Empty: Story = { args: { listeningPorts: [],