Skip to content

Commit 2052bcc

Browse files
committed
feat(servers): replace enable/disable buttons with labeled toggle
Use a leftmost Enabled switch on server rows for clearer state and fewer action buttons. Signed-off-by: crimsonsunset <jsangio1@gmail.com>
1 parent 9e4c3cd commit 2052bcc

2 files changed

Lines changed: 55 additions & 25 deletions

File tree

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { Switch } from '@mcpmux/ui';
2+
3+
interface ServerEnabledToggleProps {
4+
serverId: string;
5+
enabled: boolean;
6+
isLoading: boolean;
7+
disabled?: boolean;
8+
onToggle: (enabled: boolean) => void;
9+
}
10+
11+
/**
12+
* Labeled enable/disable control for an installed server row.
13+
*/
14+
export function ServerEnabledToggle({
15+
serverId,
16+
enabled,
17+
isLoading,
18+
disabled = false,
19+
onToggle,
20+
}: ServerEnabledToggleProps) {
21+
const label = isLoading ? (enabled ? 'Disabling…' : 'Enabling…') : enabled ? 'Enabled' : 'Disabled';
22+
23+
return (
24+
<div className="flex items-center gap-2">
25+
<span className="text-sm text-[rgb(var(--muted))] whitespace-nowrap">{label}</span>
26+
<Switch
27+
checked={enabled}
28+
onCheckedChange={onToggle}
29+
disabled={disabled || isLoading}
30+
data-testid={enabled ? `disable-server-${serverId}` : `enable-server-${serverId}`}
31+
/>
32+
</div>
33+
);
34+
}

apps/desktop/src/features/servers/ServersPage.tsx

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import {
2525
} from 'lucide-react';
2626
import { Button, SearchField } from '@mcpmux/ui';
2727
import { ServerActionMenu } from './ServerActionMenu';
28+
import { ServerEnabledToggle } from './ServerEnabledToggle';
2829
import { CloneAccountModal } from './CloneAccountModal';
2930
import { AddServerMenu } from './AddServerMenu';
3031
import { ServersFiltersPopover } from './ServersFiltersPopover';
@@ -1451,16 +1452,26 @@ export function ServersPage() {
14511452
className="flex items-center gap-2 flex-shrink-0"
14521453
onClick={(event) => event.stopPropagation()}
14531454
>
1454-
{/* Primary action button */}
1455-
{serverAction === 'enable' && (
1456-
<button
1457-
onClick={() => handleEnableClick(server)}
1458-
disabled={enableLoading}
1459-
className="px-4 py-2 text-sm font-medium rounded-lg bg-[rgb(var(--success))] text-white hover:bg-[rgb(var(--success))]/80 shadow-sm transition-colors disabled:opacity-50"
1460-
data-testid={`enable-server-${server.id}`}
1461-
>
1462-
{enableLoading ? 'Enabling...' : 'Enable'}
1463-
</button>
1455+
{(serverAction === 'enable' ||
1456+
(server.enabled &&
1457+
(serverAction === 'running' ||
1458+
serverAction === 'connected_auto' ||
1459+
serverAction === 'error'))) && (
1460+
<ServerEnabledToggle
1461+
serverId={server.id}
1462+
enabled={server.enabled}
1463+
isLoading={enableLoading || disableLoading}
1464+
disabled={
1465+
serverAction === 'connecting' || serverAction === 'authenticating'
1466+
}
1467+
onToggle={(checked) => {
1468+
if (checked) {
1469+
handleEnableClick(server);
1470+
} else {
1471+
handleDisableClick(server);
1472+
}
1473+
}}
1474+
/>
14641475
)}
14651476

14661477
{serverAction === 'configure' && (
@@ -1536,21 +1547,6 @@ export function ServersPage() {
15361547
</button>
15371548
)}
15381549

1539-
{/* Disable button - enabled servers that are connected, idle, or stuck in error */}
1540-
{server.enabled &&
1541-
(serverAction === 'running' ||
1542-
serverAction === 'connected_auto' ||
1543-
serverAction === 'error') && (
1544-
<button
1545-
onClick={() => handleDisableClick(server)}
1546-
disabled={disableLoading}
1547-
className="px-4 py-2 text-sm rounded-lg border border-[rgb(var(--border))] text-[rgb(var(--muted))] hover:bg-[rgb(var(--surface-hover))] transition-colors disabled:opacity-50"
1548-
data-testid={`disable-server-${server.id}`}
1549-
>
1550-
{disableLoading ? '...' : 'Disable'}
1551-
</button>
1552-
)}
1553-
15541550
{/* Overflow menu with secondary actions */}
15551551
<ServerActionMenu
15561552
serverId={server.id}

0 commit comments

Comments
 (0)