mirror of
https://github.com/tiennm99/goclaw.git
synced 2026-10-13 22:15:47 +00:00
fix(mcp): Update button silently doing nothing due to hidden Zod validation errors
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
969a5879ae
commit
cccb9691f9
3 files changed
+10
-4
No files matched your search
@@ -90,7 +90,7 @@ export function McpConnectionFields({ form }: McpConnectionFieldsProps) {
|
||||
<Label>{t("form.headers")}</Label>
|
||||
<KeyValueEditor
|
||||
value={headers}
|
||||
onChange={(v) => setValue("headers", v)}
|
||||
onChange={(v) => setValue("headers", v, { shouldDirty: true, shouldValidate: true })}
|
||||
keyPlaceholder={t("form.headerKeyPlaceholder")}
|
||||
valuePlaceholder={t("form.headerValuePlaceholder")}
|
||||
addLabel={t("form.addHeader")}
|
||||
|
||||
@@ -46,6 +46,7 @@ export function MCPFormDialog({ open, onOpenChange, server, onSubmit, onTest, on
|
||||
const [createdServer, setCreatedServer] = useState<MCPServerData | null>(null);
|
||||
|
||||
const form = useForm<MCPFormData>({
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
resolver: zodResolver(mcpFormSchema),
|
||||
mode: "onChange",
|
||||
defaultValues: {
|
||||
@@ -286,6 +287,11 @@ export function MCPFormDialog({ open, onOpenChange, server, onSubmit, onTest, on
|
||||
<McpConnectionFields form={form} />
|
||||
<McpSettingsFields form={form} isEditing={!!server} />
|
||||
{error && <p className="text-sm text-destructive">{error}</p>}
|
||||
{Object.keys(form.formState.errors).length > 0 && !error && (
|
||||
<p className="text-sm text-destructive">
|
||||
{Object.values(form.formState.errors).map(e => e?.message).filter(Boolean).join(", ")}
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<DialogFooter className="flex-col sm:flex-row gap-2">
|
||||
@@ -321,7 +327,7 @@ export function MCPFormDialog({ open, onOpenChange, server, onSubmit, onTest, on
|
||||
<Button variant="outline" onClick={() => onOpenChange(false)} disabled={loading}>
|
||||
{t("form.cancel")}
|
||||
</Button>
|
||||
<Button onClick={handleSubmit} disabled={loading}>
|
||||
<Button type="button" onClick={handleSubmit} disabled={loading}>
|
||||
{loading ? t("form.saving") : (server || createdServer) ? t("form.update") : t("form.create")}
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
@@ -49,7 +49,7 @@ export function McpSettingsFields({ form, isEditing }: McpSettingsFieldsProps) {
|
||||
<Label>{t("form.env")}</Label>
|
||||
<KeyValueEditor
|
||||
value={env}
|
||||
onChange={(v) => setValue("env", v)}
|
||||
onChange={(v) => setValue("env", v, { shouldDirty: true, shouldValidate: true })}
|
||||
keyPlaceholder={t("form.envKeyPlaceholder")}
|
||||
valuePlaceholder={t("form.envValuePlaceholder")}
|
||||
addLabel={t("form.addVariable")}
|
||||
@@ -246,7 +246,7 @@ export function McpSettingsFields({ form, isEditing }: McpSettingsFieldsProps) {
|
||||
id="mcp-timeout"
|
||||
type="number"
|
||||
value={timeout}
|
||||
onChange={(e) => setValue("timeout", Number(e.target.value))}
|
||||
onChange={(e) => setValue("timeout", parseInt(e.target.value, 10) || 60, { shouldValidate: true })}
|
||||
min={1}
|
||||
/>
|
||||
</div>
|
||||
|
||||
Reference in new issue
Block a user