forked from phoenix/litellm-mirror
build(ui): show users the teams they're in
This commit is contained in:
parent
0b77420087
commit
785a4a2ac2
3 changed files with 57 additions and 7 deletions
|
@ -0,0 +1,40 @@
|
||||||
|
import React, { useState, useEffect } from "react";
|
||||||
|
import { Typography } from "antd";
|
||||||
|
import { Select, SelectItem } from "@tremor/react";
|
||||||
|
|
||||||
|
interface DashboardTeamProps {
|
||||||
|
teams: string[] | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const DashboardTeam: React.FC<DashboardTeamProps> = ({ teams }) => {
|
||||||
|
const { Title, Paragraph } = Typography;
|
||||||
|
const [value, setValue] = useState("");
|
||||||
|
console.log(`received teams ${teams}`);
|
||||||
|
return (
|
||||||
|
<div className="mt-10">
|
||||||
|
<Title level={4}>Default Team</Title>
|
||||||
|
<Paragraph>
|
||||||
|
If you belong to multiple teams, this setting controls which
|
||||||
|
organization is used by default when creating new API Keys.
|
||||||
|
</Paragraph>
|
||||||
|
{teams && teams.length > 0 ? (
|
||||||
|
<Select
|
||||||
|
id="distance"
|
||||||
|
value={value}
|
||||||
|
onValueChange={setValue}
|
||||||
|
className="mt-2"
|
||||||
|
>
|
||||||
|
{teams.map((model) => (
|
||||||
|
<SelectItem value="model">{model}</SelectItem>
|
||||||
|
))}
|
||||||
|
</Select>
|
||||||
|
) : (
|
||||||
|
<Paragraph>
|
||||||
|
No team created. <b>Defaulting to personal account.</b>
|
||||||
|
</Paragraph>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default DashboardTeam;
|
|
@ -30,13 +30,14 @@ const Sidebar: React.FC<SidebarProps> = ({ setPage, userRole }) => {
|
||||||
<Menu.Item key="4" onClick={() => setPage("usage")}>
|
<Menu.Item key="4" onClick={() => setPage("usage")}>
|
||||||
Usage
|
Usage
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
{
|
{userRole == "Admin" ? (
|
||||||
userRole == "Admin" ?
|
<Menu.Item key="5" onClick={() => setPage("users")}>
|
||||||
<Menu.Item key="5" onClick={() => setPage("users")}>
|
Users
|
||||||
Users
|
</Menu.Item>
|
||||||
</Menu.Item>
|
) : null}
|
||||||
: null
|
<Menu.Item key="6" onClick={() => setPage("teams")}>
|
||||||
}
|
Teams
|
||||||
|
</Menu.Item>
|
||||||
</Menu>
|
</Menu>
|
||||||
</Sider>
|
</Sider>
|
||||||
</Layout>
|
</Layout>
|
||||||
|
|
|
@ -5,6 +5,7 @@ import { Grid, Col, Card, Text } from "@tremor/react";
|
||||||
import CreateKey from "./create_key_button";
|
import CreateKey from "./create_key_button";
|
||||||
import ViewKeyTable from "./view_key_table";
|
import ViewKeyTable from "./view_key_table";
|
||||||
import ViewUserSpend from "./view_user_spend";
|
import ViewUserSpend from "./view_user_spend";
|
||||||
|
import DashboardTeam from "./dashboard_default_team";
|
||||||
import EnterProxyUrl from "./enter_proxy_url";
|
import EnterProxyUrl from "./enter_proxy_url";
|
||||||
import { message } from "antd";
|
import { message } from "antd";
|
||||||
import Navbar from "./navbar";
|
import Navbar from "./navbar";
|
||||||
|
@ -36,6 +37,7 @@ const UserDashboard: React.FC<UserDashboardProps> = ({
|
||||||
setUserEmail,
|
setUserEmail,
|
||||||
}) => {
|
}) => {
|
||||||
const [data, setData] = useState<null | any[]>(null); // Keep the initialization of state here
|
const [data, setData] = useState<null | any[]>(null); // Keep the initialization of state here
|
||||||
|
const [teams, setTeams] = useState<null | string[]>(null); // Keep the initialization of state here
|
||||||
const [userSpendData, setUserSpendData] = useState<UserSpendData | null>(
|
const [userSpendData, setUserSpendData] = useState<UserSpendData | null>(
|
||||||
null
|
null
|
||||||
);
|
);
|
||||||
|
@ -111,8 +113,14 @@ const UserDashboard: React.FC<UserDashboardProps> = ({
|
||||||
const fetchData = async () => {
|
const fetchData = async () => {
|
||||||
try {
|
try {
|
||||||
const response = await userInfoCall(accessToken, userID, userRole);
|
const response = await userInfoCall(accessToken, userID, userRole);
|
||||||
|
console.log(
|
||||||
|
`received teams in user dashboard: ${Object.keys(
|
||||||
|
response
|
||||||
|
)}; team type: ${Array.isArray(response.teams)}`
|
||||||
|
);
|
||||||
setUserSpendData(response["user_info"]);
|
setUserSpendData(response["user_info"]);
|
||||||
setData(response["keys"]); // Assuming this is the correct path to your data
|
setData(response["keys"]); // Assuming this is the correct path to your data
|
||||||
|
setTeams(response["teams"]);
|
||||||
sessionStorage.setItem(
|
sessionStorage.setItem(
|
||||||
"userData" + userID,
|
"userData" + userID,
|
||||||
JSON.stringify(response["keys"])
|
JSON.stringify(response["keys"])
|
||||||
|
@ -191,6 +199,7 @@ const UserDashboard: React.FC<UserDashboardProps> = ({
|
||||||
data={data}
|
data={data}
|
||||||
setData={setData}
|
setData={setData}
|
||||||
/>
|
/>
|
||||||
|
<DashboardTeam teams={teams} />
|
||||||
</Col>
|
</Col>
|
||||||
</Grid>
|
</Grid>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue