From 2df7f9c9f5f08d7db77cd15018e8b2be7484a17d Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Thu, 23 Apr 2026 18:36:59 +0000 Subject: [PATCH] feat(ui): team/available_teams to shadcn - @tremor Card/Button/Text/Badge \u2192 shadcn Card/Button/Badge + native . Tremor Table family preserved (whitelist). - Categorical red (all-proxy-models) / blue (named model) Badge palette; file added to .eslintrc overrides. Gates: TS \u2713 | Build \u2713. Co-authored-by: yuneng-jiang --- ui/litellm-dashboard/.eslintrc.json | 1 + .../src/components/team/available_teams.tsx | 59 ++++++++++++------- 2 files changed, 39 insertions(+), 21 deletions(-) diff --git a/ui/litellm-dashboard/.eslintrc.json b/ui/litellm-dashboard/.eslintrc.json index 089362fda35..e891c33ee1e 100644 --- a/ui/litellm-dashboard/.eslintrc.json +++ b/ui/litellm-dashboard/.eslintrc.json @@ -81,6 +81,7 @@ "src/components/vector_store_management/DocumentsTable.tsx", "src/components/common_components/MemberTable.tsx", "src/components/SearchTools/SearchToolColumn.tsx", + "src/components/team/available_teams.tsx", "src/components/permissions/VectorStorePermissions.tsx", "src/components/permissions/AgentPermissions.tsx", "src/components/permissions/MCPServerPermissions.tsx", diff --git a/ui/litellm-dashboard/src/components/team/available_teams.tsx b/ui/litellm-dashboard/src/components/team/available_teams.tsx index 34dcd126714..67f8f96612b 100644 --- a/ui/litellm-dashboard/src/components/team/available_teams.tsx +++ b/ui/litellm-dashboard/src/components/team/available_teams.tsx @@ -1,4 +1,5 @@ import React, { useState, useEffect } from "react"; +// eslint-disable-next-line litellm-ui/no-banned-ui-imports import { Table, TableBody, @@ -6,11 +7,10 @@ import { TableHead, TableHeaderCell, TableRow, - Card, - Button, - Text, - Badge, } from "@tremor/react"; +import { Badge } from "@/components/ui/badge"; +import { Button } from "@/components/ui/button"; +import { Card } from "@/components/ui/card"; import { availableTeamListCall, teamMemberAddCall } from "../networking"; import NotificationsManager from "../molecules/notifications_manager"; @@ -19,7 +19,11 @@ interface AvailableTeam { team_alias: string; description?: string; models: string[]; - members_with_roles: { user_id?: string; user_email?: string; role: string }[]; + members_with_roles: { + user_id?: string; + user_email?: string; + role: string; + }[]; } interface AvailableTeamsProps { @@ -27,7 +31,10 @@ interface AvailableTeamsProps { userID: string | null; } -const AvailableTeamsPanel: React.FC = ({ accessToken, userID }) => { +const AvailableTeamsPanel: React.FC = ({ + accessToken, + userID, +}) => { const [availableTeams, setAvailableTeams] = useState([]); useEffect(() => { @@ -50,14 +57,15 @@ const AvailableTeamsPanel: React.FC = ({ accessToken, userI if (!accessToken || !userID) return; try { - const response = await teamMemberAddCall(accessToken, teamId, { + await teamMemberAddCall(accessToken, teamId, { user_id: userID, role: "user", }); NotificationsManager.success("Successfully joined team"); - // Update available teams list - setAvailableTeams((teams) => teams.filter((team) => team.team_id !== teamId)); + setAvailableTeams((teams) => + teams.filter((team) => team.team_id !== teamId), + ); } catch (error) { console.error("Error joining team:", error); NotificationsManager.fromBackend("Failed to join team"); @@ -80,31 +88,38 @@ const AvailableTeamsPanel: React.FC = ({ accessToken, userI {availableTeams.map((team) => ( - {team.team_alias} + {team.team_alias} - {team.description || "No description available"} + {team.description || "No description available"} - {team.members_with_roles.length} members + {team.members_with_roles.length} members
{!team.models || team.models.length === 0 ? ( - - All Proxy Models + + All Proxy Models ) : ( team.models.map((model, index) => ( - - {model.length > 30 ? `${model.slice(0, 30)}...` : model} + + {model.length > 30 ? `${model.slice(0, 30)}...` : model} )) )}
- @@ -113,16 +128,18 @@ const AvailableTeamsPanel: React.FC = ({ accessToken, userI {availableTeams.length === 0 && ( - No available teams to join. See how to set available teams{" "} + + No available teams to join. See how to set available teams{" "} here - . - + + . +
)}