|
import { useEffect, useState } from 'react'; |
|
import { |
|
Dialog, |
|
DialogPanel, |
|
TextInput, |
|
Button, |
|
Select, |
|
SelectItem, |
|
Text, |
|
Title, |
|
Subtitle, |
|
} from '@tremor/react'; |
|
|
|
import { |
|
Button as Button2, |
|
Modal, |
|
Form, |
|
Input, |
|
Select as Select2, |
|
InputNumber, |
|
message, |
|
} from "antd"; |
|
|
|
interface EditUserModalProps { |
|
visible: boolean; |
|
possibleUIRoles: null | Record<string, Record<string, string>>; |
|
onCancel: () => void; |
|
user: any; |
|
onSubmit: (data: any) => void; |
|
} |
|
|
|
const EditUserModal: React.FC<EditUserModalProps> = ({ visible, possibleUIRoles, onCancel, user, onSubmit }) => { |
|
const [editedUser, setEditedUser] = useState(user); |
|
const [form] = Form.useForm(); |
|
|
|
useEffect(() => { |
|
form.resetFields(); |
|
}, [user]); |
|
|
|
const handleCancel = async () => { |
|
form.resetFields(); |
|
onCancel(); |
|
}; |
|
|
|
const handleEditSubmit = async (formValues: Record<string, any>) => { |
|
|
|
onSubmit(formValues); |
|
form.resetFields(); |
|
onCancel(); |
|
}; |
|
|
|
|
|
|
|
if (!user) { |
|
return null; |
|
} |
|
|
|
return ( |
|
|
|
<Modal |
|
visible={visible} |
|
onCancel={handleCancel} |
|
footer={null} |
|
title={"Edit User " + user.user_id} |
|
width={1000} |
|
> |
|
<Form |
|
form={form} |
|
onFinish={handleEditSubmit} |
|
initialValues={user} // Pass initial values here |
|
labelCol={{ span: 8 }} |
|
wrapperCol={{ span: 16 }} |
|
labelAlign="left" |
|
> |
|
<> |
|
<Form.Item |
|
className="mt-8" |
|
label="User Email" |
|
tooltip="Email of the User" |
|
name="user_email"> |
|
<TextInput /> |
|
</Form.Item> |
|
|
|
<Form.Item |
|
label="user_id" |
|
name="user_id" |
|
hidden={true} |
|
> |
|
<TextInput /> |
|
</Form.Item> |
|
|
|
<Form.Item |
|
label="User Role" |
|
name="user_role" |
|
> |
|
<Select2> |
|
{possibleUIRoles && |
|
Object.entries(possibleUIRoles).map(([role, { ui_label, description }]) => ( |
|
<SelectItem key={role} value={role} title={ui_label}> |
|
<div className='flex'> |
|
{ui_label} <p className="ml-2" style={{ color: "gray", fontSize: "12px" }}>{description}</p> |
|
</div> |
|
</SelectItem> |
|
))} |
|
</Select2> |
|
|
|
</Form.Item> |
|
|
|
<Form.Item |
|
label="Spend (USD)" |
|
name="spend" |
|
tooltip="(float) - Spend of all LLM calls completed by this user" |
|
help="Across all keys (including keys with team_id)." |
|
> |
|
<InputNumber min={0} step={1} /> |
|
</Form.Item> |
|
|
|
<Form.Item |
|
label="User Budget (USD)" |
|
name="max_budget" |
|
tooltip="(float) - Maximum budget of this user" |
|
help="Ignored if the key has a team_id; team budget applies there." |
|
> |
|
<InputNumber min={0} step={1} /> |
|
</Form.Item> |
|
|
|
<div style={{ textAlign: "right", marginTop: "10px" }}> |
|
<Button2 htmlType="submit">Save</Button2> |
|
</div> |
|
|
|
</> |
|
|
|
</Form> |
|
|
|
|
|
</Modal> |
|
); |
|
}; |
|
|
|
export default EditUserModal; |