mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-06 02:48:13 +00:00
fix(userFields): address greptile review concerns
- UserFieldsAdminSection: use field name as stable React key (falls back to index for blank fields) to avoid stale input state on delete. - create_mcp_server: drop the validUserFields.length > 0 guard so editing an existing server can clear all per-user fields. - mcp_servers: don't open the user-fields modal until the userID is known, and consume the ?openUserFields deep-link param once the server list has loaded even when the target id can't be found, so it doesn't persist across re-renders. - UserFieldsModal: hard-code the deep-link query string to page=mcp-servers&openUserFields=<id> instead of carrying the user's current query params into the mocked error preview.
This commit is contained in:
parent
a0b3ff0eac
commit
11982ba9ce
4 changed files with 13 additions and 14 deletions
|
|
@ -64,7 +64,7 @@ const UserFieldsAdminSection: React.FC<UserFieldsAdminSectionProps> = ({ value,
|
|||
) : (
|
||||
<div className="space-y-3">
|
||||
{fields.map((f, idx) => (
|
||||
<div key={idx} className="bg-white rounded border border-gray-200 p-3">
|
||||
<div key={f.name || idx} className="bg-white rounded border border-gray-200 p-3">
|
||||
<div className="grid grid-cols-12 gap-2 items-start">
|
||||
<div className="col-span-3">
|
||||
<Text type="secondary" style={{ fontSize: 11 }}>Field Name (key)</Text>
|
||||
|
|
|
|||
|
|
@ -67,9 +67,10 @@ const UserFieldsModal: React.FC<UserFieldsModalProps> = ({
|
|||
|
||||
const buildDeepLinkUrl = (): string => {
|
||||
if (typeof window === "undefined") {
|
||||
return `<dashboard-url>?openUserFields=${server.server_id}`;
|
||||
return `<dashboard-url>?page=mcp-servers&openUserFields=${server.server_id}`;
|
||||
}
|
||||
const params = new URLSearchParams(window.location.search);
|
||||
const params = new URLSearchParams();
|
||||
params.set("page", "mcp-servers");
|
||||
params.set("openUserFields", server.server_id);
|
||||
return `${window.location.origin}${window.location.pathname}?${params.toString()}`;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -417,7 +417,7 @@ const CreateMCPServer: React.FC<CreateMCPServerProps> = ({
|
|||
const validUserFields = userFields.filter(
|
||||
(f) => f && f.name && f.name.trim() !== "",
|
||||
);
|
||||
if (response?.server_id && validUserFields.length > 0) {
|
||||
if (response?.server_id) {
|
||||
setUserFieldDefs(response.server_id, validUserFields);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -94,22 +94,20 @@ const MCPServers: React.FC<MCPServerProps> = ({ accessToken, userRole, userID })
|
|||
// ?openUserFields=<server_id> (this is the deep-link target shown in the
|
||||
// mocked Claude Code error message).
|
||||
useEffect(() => {
|
||||
if (typeof window === "undefined" || !serversWithHealth || serversWithHealth.length === 0) {
|
||||
return;
|
||||
}
|
||||
if (typeof window === "undefined" || !mcpServers) return;
|
||||
const params = new URLSearchParams(window.location.search);
|
||||
const targetId = params.get("openUserFields");
|
||||
if (!targetId) return;
|
||||
const target = serversWithHealth.find((s) => s.server_id === targetId);
|
||||
if (target) {
|
||||
setUserFieldsServer(target);
|
||||
params.delete("openUserFields");
|
||||
const remaining = params.toString();
|
||||
const newUrl =
|
||||
window.location.pathname + (remaining ? `?${remaining}` : "") + window.location.hash;
|
||||
window.history.replaceState({}, "", newUrl);
|
||||
}
|
||||
}, [serversWithHealth]);
|
||||
params.delete("openUserFields");
|
||||
const remaining = params.toString();
|
||||
const newUrl =
|
||||
window.location.pathname + (remaining ? `?${remaining}` : "") + window.location.hash;
|
||||
window.history.replaceState({}, "", newUrl);
|
||||
}, [mcpServers, serversWithHealth]);
|
||||
|
||||
// Servers with one or more missing user fields for the current user (prototype)
|
||||
const serversNeedingUserFields = React.useMemo(() => {
|
||||
|
|
@ -549,7 +547,7 @@ const MCPServers: React.FC<MCPServerProps> = ({ accessToken, userRole, userID })
|
|||
<UserFieldsModal
|
||||
server={userFieldsServer}
|
||||
userId={userID || ""}
|
||||
open={!!userFieldsServer}
|
||||
open={!!userFieldsServer && !!userID}
|
||||
onClose={() => setUserFieldsServer(null)}
|
||||
onSaved={() => setUserFieldsRefreshKey((k) => k + 1)}
|
||||
/>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue