import React, { useState, useEffect } from "react"; import { Card, Title, Subtitle, Table, TableHead, TableHeaderCell, TableRow, TableCell, TableBody, Tab, Text, TabGroup, TabList, TabPanels, Metric, Grid, TabPanel, Select, SelectItem, Dialog, DialogPanel, Icon, TextInput, } from "@tremor/react"; import { message } from "antd"; import { userInfoCall, userUpdateUserCall, getPossibleUserRoles, } from "./networking"; import { Badge, BadgeDelta, Button } from "@tremor/react"; import RequestAccess from "./request_model_access"; import CreateUser from "./create_user_button"; import EditUserModal from "./edit_user"; import Paragraph from "antd/es/skeleton/Paragraph"; import { PencilAltIcon, InformationCircleIcon, TrashIcon, } from "@heroicons/react/outline"; interface ViewUserDashboardProps { accessToken: string | null; token: string | null; keys: any[] | null; userRole: string | null; userID: string | null; teams: any[] | null; setKeys: React.Dispatch>; } const isLocal = process.env.NODE_ENV === "development"; const proxyBaseUrl = isLocal ? "http://localhost:4000" : null; if (isLocal != true) { console.log = function() {}; } const ViewUserDashboard: React.FC = ({ accessToken, token, keys, userRole, userID, teams, setKeys, }) => { const [userData, setUserData] = useState(null); const [endUsers, setEndUsers] = useState(null); const [currentPage, setCurrentPage] = useState(0); const [openDialogId, setOpenDialogId] = React.useState(null); const [selectedItem, setSelectedItem] = useState(null); const [editModalVisible, setEditModalVisible] = useState(false); const [selectedUser, setSelectedUser] = useState(null); const [possibleUIRoles, setPossibleUIRoles] = useState< Record> >({}); const defaultPageSize = 25; const handleEditCancel = async () => { setSelectedUser(null); setEditModalVisible(false); }; const handleEditSubmit = async (editedUser: any) => { console.log("inside handleEditSubmit:", editedUser); if (!accessToken || !token || !userRole || !userID) { return; } try { await userUpdateUserCall(accessToken, editedUser, null); message.success(`User ${editedUser.user_id} updated successfully`); } catch (error) { console.error("There was an error updating the user", error); } if (userData) { const updatedUserData = userData.map((user) => user.user_id === editedUser.user_id ? editedUser : user ); setUserData(updatedUserData); } setSelectedUser(null); setEditModalVisible(false); // Close the modal }; useEffect(() => { if (!accessToken || !token || !userRole || !userID) { return; } const fetchData = async () => { try { // Replace with your actual API call for model data const userDataResponse = await userInfoCall( accessToken, null, userRole, true, currentPage, defaultPageSize ); console.log("user data response:", userDataResponse); setUserData(userDataResponse); const availableUserRoles = await getPossibleUserRoles(accessToken); setPossibleUIRoles(availableUserRoles); } catch (error) { console.error("There was an error fetching the model data", error); } }; if (accessToken && token && userRole && userID) { fetchData(); } }, [accessToken, token, userRole, userID, currentPage]); if (!userData) { return
Loading...
; } if (!accessToken || !token || !userRole || !userID) { return
Loading...
; } function renderPagination() { if (!userData) return null; const totalPages = Math.ceil(userData.length / defaultPageSize); return (
Showing Page {currentPage + 1} of {totalPages}
); } return (
User ID User Email Role User Spend ($ USD) User Max Budget ($ USD) API Keys {userData.map((user: any) => ( {user.user_id || "-"} {user.user_email || "-"} {possibleUIRoles?.[user?.user_role]?.ui_label || "-"} {user.spend ? user.spend?.toFixed(2) : "-"} {user.max_budget ? user.max_budget : "Unlimited"} {user && user.key_aliases ? ( user.key_aliases.filter( (key: any) => key !== null ).length > 0 ? ( { user.key_aliases.filter( (key: any) => key !== null ).length }  Keys ) : ( No Keys ) ) : ( No Keys )} {/* {user.key_aliases.filter(key => key !== null).length} Keys */} { setSelectedUser(user); setEditModalVisible(true); }} > View Keys {/* { setOpenDialogId(user.user_id) setSelectedItem(user) }}>View Keys */} ))}
{/* End User Spend Total Events {endUsers?.map((user: any, index: number) => ( {user.end_user} {user.total_spend} {user.total_events} ))}
*/}
{renderPagination()}
); }; export default ViewUserDashboard;