fix(UserFieldsModal): align missing-check, fix preview, reuse serverDisplayName

- Use a shared isFieldMissing helper with the typeof string guard, matching getMissingUserFields in userFields.ts, so corrupt non-string localStorage values don't throw on .trim() and the modal/column badges agree.
- Render errorPreview from defs instead of the reactive missing array so the preview always shows the worst-case error even after the user starts filling fields.
- Reuse serverDisplayName (server_name || alias || server_id) in the save notification instead of the narrower server.server_name || "MCP server" fallback.

Co-authored-by: Yassin Kortam <yassin@berri.ai>
This commit is contained in:
Cursor Agent 2026-05-19 06:16:51 +00:00
parent 2d11f40707
commit 44d887d598
No known key found for this signature in database

View file

@ -42,16 +42,21 @@ const UserFieldsModal: React.FC<UserFieldsModalProps> = ({
if (!server) return null;
const missing = defs.filter(
(f) => !values[f.name] || values[f.name].trim() === "",
);
const isFieldMissing = (name: string): boolean =>
!values[name] ||
typeof values[name] !== "string" ||
values[name].trim() === "";
const missing = defs.filter((f) => isFieldMissing(f.name));
const allFilled = defs.length > 0 && missing.length === 0;
const serverDisplayName = server.server_name || server.alias || server.server_id;
const handleSave = () => {
setUserFieldValues(server.server_id, userId, values);
NotificationsManager.success(
allFilled
? `Saved. ${server.server_name || "MCP server"} is ready to use.`
? `Saved. ${serverDisplayName} is ready to use.`
: `Saved ${defs.length - missing.length} of ${defs.length} fields.`,
);
onSaved();
@ -60,8 +65,6 @@ const UserFieldsModal: React.FC<UserFieldsModalProps> = ({
}
};
const serverDisplayName = server.server_name || server.alias || server.server_id;
const buildDeepLinkUrl = (): string => {
if (typeof window === "undefined") {
return `<dashboard-url>?openUserFields=${server.server_id}`;
@ -73,8 +76,8 @@ const UserFieldsModal: React.FC<UserFieldsModalProps> = ({
const errorPreview = `Error: MCP server "${serverDisplayName}" requires user configuration before use.
${missing.length > 0 ? `Missing field${missing.length === 1 ? "" : "s"}:` : "All fields configured."}
${missing.map((f) => ` • ${f.label || f.name}${f.description ? ` — ${f.description}` : ""}`).join("\n")}
${defs.length > 0 ? `Missing field${defs.length === 1 ? "" : "s"}:` : "No fields defined."}
${defs.map((f) => ` • ${f.label || f.name}${f.description ? ` — ${f.description}` : ""}`).join("\n")}
Please configure your fields at:
${buildDeepLinkUrl()}
@ -122,7 +125,7 @@ Once configured, retry your request.`;
) : (
<Form layout="vertical">
{defs.map((f) => {
const isMissing = !values[f.name] || values[f.name].trim() === "";
const isMissing = isFieldMissing(f.name);
return (
<Form.Item
key={f.name}