From 4ed3e3bf84920a13ce6ba1501d8e3ac3ea44866f Mon Sep 17 00:00:00 2001 From: YoVinchen Date: Sat, 22 Nov 2025 16:11:06 +0800 Subject: [PATCH] refactor(mcp): improve form modal layout with adaptive height editor Restructure MCP form modal for better space utilization. - Split form into upper form fields and lower JSON editor sections - Add full-height mode support for JsonEditor component - Use flex layout for editor to fill available space - Update PromptFormPanel to use full-height editor - Fix locale text formatting --- src/components/JsonEditor.tsx | 15 +- src/components/mcp/McpFormModal.tsx | 431 +++++++++++---------- src/components/prompts/PromptFormPanel.tsx | 2 +- 3 files changed, 231 insertions(+), 217 deletions(-) diff --git a/src/components/JsonEditor.tsx b/src/components/JsonEditor.tsx index 2213599..72972e5 100644 --- a/src/components/JsonEditor.tsx +++ b/src/components/JsonEditor.tsx @@ -247,14 +247,23 @@ const JsonEditor: React.FC = ({ } }; + const isFullHeight = height === "100%"; + return ( -
-
+
+
{language === "json" && ( } > -
- {/* 预设选择(仅新增时展示) */} - {!isEditing && ( +
+ {/* 上半部分:表单字段 */} +
+ {/* 预设选择(仅新增时展示) */} + {!isEditing && ( +
+ +
+ + {mcpPresets.map((preset, idx) => { + const descriptionKey = `mcp.presets.${preset.id}.description`; + return ( + + ); + })} +
+
+ )} + + {/* ID (标题) */} +
+
+ + {!isEditing && idError && ( + + {idError} + + )} +
+ handleIdChange(e.target.value)} + disabled={isEditing} + /> +
+ + {/* Name */} +
+ + setFormName(e.target.value)} + /> +
+ + {/* 启用到哪些应用 */}
-
- - {mcpPresets.map((preset, idx) => { - const descriptionKey = `mcp.presets.${preset.id}.description`; - return ( - - ); - })} +
+
+ + setEnabledApps({ ...enabledApps, claude: checked }) + } + /> + +
+ +
+ + setEnabledApps({ ...enabledApps, codex: checked }) + } + /> + +
+ +
+ + setEnabledApps({ ...enabledApps, gemini: checked }) + } + /> + +
- )} - {/* ID (标题) */} -
-
- - {!isEditing && idError && ( - - {idError} - - )} + {/* 可折叠的附加信息按钮 */} +
+
- handleIdChange(e.target.value)} - disabled={isEditing} - /> + + {/* 附加信息区域(可折叠) */} + {showMetadata && ( + <> +
+ + setFormDescription(e.target.value)} + /> +
+ +
+ + setFormTags(e.target.value)} + /> +
+ +
+ + setFormHomepage(e.target.value)} + /> +
+ +
+ + setFormDocs(e.target.value)} + /> +
+ + )}
- {/* Name */} -
- - setFormName(e.target.value)} - /> -
- - {/* 启用到哪些应用 */} -
- -
-
- - setEnabledApps({ ...enabledApps, claude: checked }) - } - /> - -
- -
- - setEnabledApps({ ...enabledApps, codex: checked }) - } - /> - -
- -
- - setEnabledApps({ ...enabledApps, gemini: checked }) - } - /> - -
-
-
- - {/* 可折叠的附加信息按钮 */} -
- -
- - {/* 附加信息区域(可折叠) */} - {showMetadata && ( - <> -
- - setFormDescription(e.target.value)} - /> -
- -
- - setFormTags(e.target.value)} - /> -
- -
- - setFormHomepage(e.target.value)} - /> -
- -
- - setFormDocs(e.target.value)} - /> -
- - )} - - {/* 配置输入框 */} -
-
+ {/* 下半部分:JSON 配置编辑器 - 自适应剩余高度 */} +
+
@@ -645,26 +646,30 @@ const McpFormModal: React.FC = ({ )}
- - {configError && ( -
- - {configError} +
+
+
- )} + {configError && ( +
+ + {configError} +
+ )} +
diff --git a/src/components/prompts/PromptFormPanel.tsx b/src/components/prompts/PromptFormPanel.tsx index be0ab4a..644d149 100644 --- a/src/components/prompts/PromptFormPanel.tsx +++ b/src/components/prompts/PromptFormPanel.tsx @@ -142,7 +142,7 @@ const PromptFormPanel: React.FC = ({ onChange={setContent} placeholder={t("prompts.contentPlaceholder", { filename })} darkMode={isDarkMode} - minHeight="500px" + minHeight="167px" />