Skip to content

Commit aa0a7e7

Browse files
committed
fix: overflow servers table cell and support sm breakpoint
1 parent e799fce commit aa0a7e7

File tree

2 files changed

+56
-38
lines changed

2 files changed

+56
-38
lines changed

src/app/catalog/components/servers-table.tsx

Lines changed: 52 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -16,47 +16,62 @@ interface ServersTableProps {
1616
onServerClick?: (server: V0ServerJson) => void;
1717
}
1818

19-
/**
20-
* Server table component that displays MCP servers in a table format
21-
*/
2219
export function ServersTable({ servers, onServerClick }: ServersTableProps) {
2320
return (
2421
<div className="w-full overflow-hidden rounded-md border">
25-
<Table className="table-fixed">
26-
<TableHeader className="bg-muted/50">
27-
<TableRow>
28-
<TableHead className="w-2/12 pl-4">Server</TableHead>
29-
<TableHead className="w-9/12">About</TableHead>
30-
<TableHead className="w-1/12" />
31-
</TableRow>
32-
</TableHeader>
33-
<TableBody>
34-
{servers.map((server) => {
35-
const url = server.remotes?.[0]?.url || "";
36-
const serverName = server.name || "Unknown";
37-
const description =
38-
server.description || "No description available";
22+
<div className="overflow-x-auto">
23+
<Table className="min-w-full">
24+
<TableHeader className="bg-muted/50">
25+
<TableRow>
26+
<TableHead className="w-full pl-4 sm:w-1/5">Server</TableHead>
27+
<TableHead className="hidden sm:w-7/10 sm:table-cell">
28+
About
29+
</TableHead>
30+
<TableHead className="w-16 text-right sm:w-1/10" />
31+
</TableRow>
32+
</TableHeader>
33+
<TableBody>
34+
{servers.map((server) => {
35+
const url = server.remotes?.[0]?.url || "";
36+
const serverName = server.name || "Unknown";
37+
const description =
38+
server.description || "No description available";
3939

40-
return (
41-
<TableRow
42-
key={server.name}
43-
onClick={() => onServerClick?.(server)}
44-
className={onServerClick ? "cursor-pointer" : undefined}
45-
>
46-
<TableCell className="font-medium pl-4">{serverName}</TableCell>
47-
<TableCell className="max-w-0 overflow-hidden text-ellipsis whitespace-nowrap">
48-
{description}
49-
</TableCell>
50-
<TableCell>
51-
{url ? (
52-
<CopyUrlButton url={url} className="shadow-sm" />
53-
) : null}
54-
</TableCell>
55-
</TableRow>
56-
);
57-
})}
58-
</TableBody>
59-
</Table>
40+
return (
41+
<TableRow
42+
key={server.name}
43+
onClick={() => onServerClick?.(server)}
44+
className={onServerClick ? "cursor-pointer" : undefined}
45+
>
46+
<TableCell
47+
className="pl-4 align-middle sm:w-1/5"
48+
title={serverName}
49+
>
50+
<p className="text-base font-medium sm:text-sm">
51+
{serverName}
52+
</p>
53+
</TableCell>
54+
<TableCell
55+
className="hidden pr-4 text-muted-foreground whitespace-normal wrap-break-word sm:table-cell sm:w-7/10"
56+
title={description}
57+
>
58+
{description}
59+
</TableCell>
60+
<TableCell className="pr-3 text-right align-middle sm:w-1/10">
61+
{url ? (
62+
<CopyUrlButton
63+
url={url}
64+
className="md:h-9 md:w-auto md:rounded-md md:px-3"
65+
labelClassName="hidden md:inline"
66+
/>
67+
) : null}
68+
</TableCell>
69+
</TableRow>
70+
);
71+
})}
72+
</TableBody>
73+
</Table>
74+
</div>
6075
</div>
6176
);
6277
}

src/components/copy-url-button.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@ import { Copy } from "lucide-react";
44
import type { ComponentPropsWithoutRef } from "react";
55
import { toast } from "sonner";
66
import { Button } from "@/components/ui/button";
7+
import { cn } from "@/lib/utils";
78

89
interface CopyUrlButtonProps
910
extends Omit<ComponentPropsWithoutRef<typeof Button>, "onClick"> {
1011
url: string;
12+
labelClassName?: string;
1113
}
1214

1315
/**
@@ -17,6 +19,7 @@ export function CopyUrlButton({
1719
url,
1820
variant = "secondary",
1921
size = "sm",
22+
labelClassName,
2023
...props
2124
}: CopyUrlButtonProps) {
2225
const handleCopyUrl = async (e: React.MouseEvent<HTMLButtonElement>) => {
@@ -40,7 +43,7 @@ export function CopyUrlButton({
4043
{...props}
4144
>
4245
<Copy className="size-4" />
43-
Copy URL
46+
<span className={cn(labelClassName)}>Copy URL</span>
4447
</Button>
4548
);
4649
}

0 commit comments

Comments
 (0)