fix(ui): use tremor Accordion for Team Member Settings in edit team form

This commit is contained in:
Ishaan Jaffer 2026-04-01 16:31:14 -07:00
parent 5c61e37942
commit 2bcbd312f5

View file

@ -19,8 +19,8 @@ import { mapEmptyStringToNull } from "@/utils/keyUpdateUtils";
import { isProxyAdminRole } from "@/utils/roles";
import { EditOutlined, InfoCircleOutlined, SaveOutlined } from "@ant-design/icons";
import { ArrowLeftIcon } from "@heroicons/react/outline";
import { Badge, Card, Grid, Text, TextInput, Title } from "@tremor/react";
import { Button, Collapse, Form, Input, Select, Switch, Tabs, Tooltip } from "antd";
import { Accordion, AccordionBody, AccordionHeader, Badge, Card, Grid, Text, TextInput, Title } from "@tremor/react";
import { Button, Form, Input, Select, Switch, Tabs, Tooltip } from "antd";
import MessageManager from "@/components/molecules/message_manager";
import { CheckIcon, CopyIcon } from "lucide-react";
import React, { useEffect, useMemo, useState } from "react";
@ -889,81 +889,76 @@ const TeamInfoView: React.FC<TeamInfoProps> = ({
<Input placeholder="example1@test.com, example2@test.com" />
</Form.Item>
<Collapse
ghost
className="mt-4 mb-4 border border-gray-200 rounded-lg"
items={[{
key: "member-settings",
label: <span className="font-medium text-gray-700">Team Member Settings</span>,
children: (
<div className="pt-2">
<p className="text-xs text-gray-500 mb-4">
Optional defaults applied when members join this team. All fields can be overridden per member.
</p>
<Form.Item
label={
<span>
Default Model Access{" "}
<Tooltip title="Optional. If set, new members can only access these models by default. Must be a subset of the team's models above. Leave empty to give all members access to all team models.">
<InfoCircleOutlined style={{ marginLeft: "4px" }} />
</Tooltip>
</span>
}
name="default_team_member_models"
>
<Form.Item noStyle shouldUpdate={(prev, cur) => prev.models !== cur.models}>
{({ getFieldValue }) => {
const teamModels = getFieldValue("models") || info.models || [];
return (
<Select
mode="multiple"
placeholder="Leave empty — all team models accessible to every member"
value={form.getFieldValue("default_team_member_models") || []}
onChange={(values) => form.setFieldValue("default_team_member_models", values)}
options={teamModels.map((m: string) => ({ label: m, value: m }))}
/>
);
}}
</Form.Item>
</Form.Item>
<Form.Item
label="Default Budget (USD)"
name="team_member_budget"
tooltip="Default spend budget for each member in this team."
>
<NumericalInput step={0.01} precision={2} style={{ width: "100%" }} />
</Form.Item>
<Form.Item label="Default Budget Duration" name="team_member_budget_duration">
<DurationSelect
onChange={(value) => form.setFieldValue("team_member_budget_duration", value)}
value={form.getFieldValue("team_member_budget_duration")}
/>
</Form.Item>
<Form.Item
label="Default Key Duration (eg: 1d, 1mo)"
name="team_member_key_duration"
tooltip="Set a limit to the duration of a team member's key. Format: 30s (seconds), 30m (minutes), 30h (hours), 30d (days), 1mo (month)"
>
<TextInput placeholder="e.g., 30d" />
</Form.Item>
<Form.Item
label="Default TPM Limit"
name="team_member_tpm_limit"
tooltip="Default tokens per minute limit for each member. Can be overridden per member."
>
<NumericalInput step={1} style={{ width: "100%" }} placeholder="e.g., 1000" />
</Form.Item>
<Form.Item
label="Default RPM Limit"
name="team_member_rpm_limit"
tooltip="Default requests per minute limit for each member. Can be overridden per member."
>
<NumericalInput step={1} style={{ width: "100%" }} placeholder="e.g., 100" />
</Form.Item>
</div>
),
}]}
/>
<Accordion className="mt-4 mb-4">
<AccordionHeader>
<b>Team Member Settings</b>
</AccordionHeader>
<AccordionBody>
<Text className="text-xs text-gray-500 mb-4">
Optional defaults applied when members join this team. All fields can be overridden per member.
</Text>
<Form.Item
label={
<span>
Default Model Access{" "}
<Tooltip title="Optional. If set, new members can only access these models by default. Must be a subset of the team's models above. Leave empty to give all members access to all team models.">
<InfoCircleOutlined style={{ marginLeft: "4px" }} />
</Tooltip>
</span>
}
name="default_team_member_models"
>
<Form.Item noStyle shouldUpdate={(prev, cur) => prev.models !== cur.models}>
{({ getFieldValue }) => {
const teamModels = getFieldValue("models") || info.models || [];
return (
<Select
mode="multiple"
placeholder="Leave empty — all team models accessible to every member"
value={form.getFieldValue("default_team_member_models") || []}
onChange={(values) => form.setFieldValue("default_team_member_models", values)}
options={teamModels.map((m: string) => ({ label: m, value: m }))}
/>
);
}}
</Form.Item>
</Form.Item>
<Form.Item
label="Default Budget (USD)"
name="team_member_budget"
tooltip="Default spend budget for each member in this team."
>
<NumericalInput step={0.01} precision={2} style={{ width: "100%" }} />
</Form.Item>
<Form.Item label="Default Budget Duration" name="team_member_budget_duration">
<DurationSelect
onChange={(value) => form.setFieldValue("team_member_budget_duration", value)}
value={form.getFieldValue("team_member_budget_duration")}
/>
</Form.Item>
<Form.Item
label="Default Key Duration (eg: 1d, 1mo)"
name="team_member_key_duration"
tooltip="Set a limit to the duration of a team member's key. Format: 30s (seconds), 30m (minutes), 30h (hours), 30d (days), 1mo (month)"
>
<TextInput placeholder="e.g., 30d" />
</Form.Item>
<Form.Item
label="Default TPM Limit"
name="team_member_tpm_limit"
tooltip="Default tokens per minute limit for each member. Can be overridden per member."
>
<NumericalInput step={1} style={{ width: "100%" }} placeholder="e.g., 1000" />
</Form.Item>
<Form.Item
label="Default RPM Limit"
name="team_member_rpm_limit"
tooltip="Default requests per minute limit for each member. Can be overridden per member."
>
<NumericalInput step={1} style={{ width: "100%" }} placeholder="e.g., 100" />
</Form.Item>
</AccordionBody>
</Accordion>
<Form.Item label="Reset Budget" name="budget_duration">
<Select placeholder="n/a">