Skip to content

Commit 893dd75

Browse files
authored
feat(feature-flag): implement editing with custom server form (#821)
* feat(feature-flag): add editing * feat(editing): adjust utilities * feat(editing): implement update with custom server form * refactor: revert normalization and adjust how to load formdata for editing
1 parent 090d446 commit 893dd75

15 files changed

+1343
-170
lines changed

main/src/feature-flags.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ const featureFlagOptions: Record<FeatureFlagKey, FeatureFlagOptions> = {
2525
isDisabled: false,
2626
defaultValue: false,
2727
},
28+
[featureFlagKeys.EDIT_WORKLOAD]: {
29+
isDisabled: false,
30+
defaultValue: false,
31+
},
2832
}
2933

3034
// Create a dedicated store for feature flags

renderer/src/features/mcp-servers/components/__tests__/card-mcp-server.test.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ const router = createTestRouter(() => (
1212
statusContext={undefined}
1313
url=""
1414
transport="http"
15+
onEdit={() => {}}
1516
/>
1617
))
1718

renderer/src/features/mcp-servers/components/__tests__/dialog-form-run-mcp-command.test.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,11 @@ describe('DialogFormRunMcpServerWithCommand', () => {
144144
type: 'docker_image',
145145
envVars: [],
146146
secrets: [],
147-
cmd_arguments: undefined,
147+
cmd_arguments: [],
148+
networkIsolation: false,
149+
allowedHosts: [],
150+
allowedPorts: [],
151+
target_port: 0,
148152
}),
149153
},
150154
expect.any(Object)
@@ -179,7 +183,7 @@ describe('DialogFormRunMcpServerWithCommand', () => {
179183
// Fill all fields
180184
await userEvent.type(screen.getByLabelText('Name'), 'npm-server')
181185
await userEvent.click(screen.getByLabelText('Transport'))
182-
await userEvent.click(screen.getByRole('option', { name: 'stdio' }))
186+
await userEvent.click(screen.getByRole('option', { name: 'SSE' }))
183187
await userEvent.type(screen.getByLabelText('Target port'), '8080')
184188
await userEvent.click(screen.getByLabelText('Protocol'))
185189
await userEvent.click(screen.getByRole('option', { name: 'npx' }))
@@ -195,7 +199,7 @@ describe('DialogFormRunMcpServerWithCommand', () => {
195199
{
196200
data: expect.objectContaining({
197201
name: 'npm-server',
198-
transport: 'stdio',
202+
transport: 'sse',
199203
target_port: 8080,
200204
protocol: 'npx',
201205
package_name: '@test/package',

renderer/src/features/mcp-servers/components/card-mcp-server.tsx

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,15 @@ import {
1212
DropdownMenuSeparator,
1313
} from '@/common/components/ui/dropdown-menu'
1414
import { Button } from '@/common/components/ui/button'
15-
import { MoreVertical, Trash2, Github, Text, Copy, Edit3 } from 'lucide-react'
15+
import {
16+
MoreVertical,
17+
Trash2,
18+
Github,
19+
Text,
20+
Copy,
21+
Edit3,
22+
Settings,
23+
} from 'lucide-react'
1624
import { Link } from '@tanstack/react-router'
1725
import { toast } from 'sonner'
1826
import { Input } from '@/common/components/ui/input'
@@ -106,12 +114,14 @@ export function CardMcpServer({
106114
statusContext,
107115
url,
108116
transport,
117+
onEdit,
109118
}: {
110119
name: string
111120
status: CoreWorkload['status']
112121
statusContext: CoreWorkload['status_context']
113122
url: string
114123
transport: CoreWorkload['transport_type']
124+
onEdit: (serverName: string) => void
115125
}) {
116126
const confirm = useConfirm()
117127
const { mutateAsync: deleteServer, isPending: isDeletePending } =
@@ -120,6 +130,7 @@ export function CardMcpServer({
120130
const isCustomizeToolsEnabled = useFeatureFlag(
121131
featureFlagKeys.CUSTOMIZE_TOOLS
122132
)
133+
const isEditWorkloadEnabled = useFeatureFlag(featureFlagKeys.EDIT_WORKLOAD)
123134

124135
const { data: serverDetails } = useQuery({
125136
queryKey: ['serverDetails', name],
@@ -269,6 +280,17 @@ export function CardMcpServer({
269280
</Button>
270281
</div>
271282
<DropdownMenuSeparator />
283+
{isEditWorkloadEnabled && (
284+
<DropdownMenuItem
285+
asChild
286+
className="flex cursor-pointer items-center"
287+
>
288+
<a className="self-start" onClick={() => onEdit(name)}>
289+
<Settings className="mr-2 h-4 w-4" />
290+
Edit configuration
291+
</a>
292+
</DropdownMenuItem>
293+
)}
272294
{repositoryUrl && (
273295
<DropdownMenuItem asChild>
274296
<a

0 commit comments

Comments
 (0)