mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
fix(site): show AI settings and AI Sessions in mobile admin menu (#27191)
## Problem The desktop `DeploymentDropdown` surfaces **AI** and **AI sessions** items under Admin settings (behind `canViewAISettings` / `canViewAIBridge`), but the mobile `MobileMenu` was never updated to match — its `AdminSettingsSub` only knows about Deployment, Organizations, Audit logs, Connection logs, and Healthcheck. This is a leftover from #25582 ("promote AI settings to a top-level section"), which threaded `canViewAISettings` through `Navbar` / `NavbarView` / `DeploymentDropdown` but did not touch `MobileMenu.tsx`. `canViewAIBridge` has the same oversight. ## Fix - Extend `MobileMenuPermissions` with `canViewAIBridge` and `canViewAISettings`. - Render **AI** (→ `/ai/settings`) and **AI Sessions** (→ `/ai-gateway/sessions`) in the mobile Admin settings collapsible, in the same order as the desktop dropdown. - Thread the two flags through `NavbarView` into `MobileMenu`. - Cover the new args in `MobileMenu.stories.tsx` (Admin story now shows the AI items; Auditor / OrgAdmin / Member keep them hidden). No backend, permission, or routing changes. > 🤖 This PR was drafted by Coder Agents on behalf of @tracyjohnsonux and needs a human review.
This commit is contained in:
@@ -90,17 +90,17 @@ const DeploymentDropdownContent: FC<DeploymentDropdownProps> = ({
|
||||
)}
|
||||
{canViewAuditLog && (
|
||||
<DropdownMenuItem asChild>
|
||||
<Link to={linkToAuditing}>Audit Logs</Link>
|
||||
<Link to={linkToAuditing}>Audit logs</Link>
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
{canViewConnectionLog && (
|
||||
<DropdownMenuItem asChild>
|
||||
<Link to="/connectionlog">Connection Logs</Link>
|
||||
<Link to="/connectionlog">Connection logs</Link>
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
{canViewAIBridge && (
|
||||
<DropdownMenuItem asChild>
|
||||
<Link to="/ai-gateway/sessions">AI Sessions</Link>
|
||||
<Link to="/ai-gateway/sessions">AI sessions</Link>
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
{canViewHealth && (
|
||||
|
||||
@@ -41,9 +41,12 @@ const meta: Meta<typeof MobileMenu> = {
|
||||
onSignOut: fn(),
|
||||
isDefaultOpen: true,
|
||||
canViewAuditLog: true,
|
||||
canViewConnectionLog: true,
|
||||
canViewDeployment: true,
|
||||
canViewHealth: true,
|
||||
canViewOrganizations: true,
|
||||
canViewAIBridge: true,
|
||||
canViewAISettings: true,
|
||||
},
|
||||
decorators: [withNavbarMock],
|
||||
};
|
||||
@@ -65,9 +68,12 @@ export const Auditor: Story = {
|
||||
args: {
|
||||
user: MockUserMember,
|
||||
canViewAuditLog: true,
|
||||
canViewConnectionLog: false,
|
||||
canViewDeployment: false,
|
||||
canViewHealth: false,
|
||||
canViewOrganizations: false,
|
||||
canViewAIBridge: false,
|
||||
canViewAISettings: false,
|
||||
},
|
||||
play: openAdminSettings,
|
||||
};
|
||||
@@ -76,9 +82,12 @@ export const OrgAdmin: Story = {
|
||||
args: {
|
||||
user: MockUserMember,
|
||||
canViewAuditLog: true,
|
||||
canViewConnectionLog: false,
|
||||
canViewDeployment: false,
|
||||
canViewHealth: false,
|
||||
canViewOrganizations: true,
|
||||
canViewAIBridge: false,
|
||||
canViewAISettings: false,
|
||||
},
|
||||
play: openAdminSettings,
|
||||
};
|
||||
@@ -87,9 +96,12 @@ export const Member: Story = {
|
||||
args: {
|
||||
user: MockUserMember,
|
||||
canViewAuditLog: false,
|
||||
canViewConnectionLog: false,
|
||||
canViewDeployment: false,
|
||||
canViewHealth: false,
|
||||
canViewOrganizations: false,
|
||||
canViewAIBridge: false,
|
||||
canViewAISettings: false,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -39,6 +39,8 @@ type MobileMenuPermissions = {
|
||||
canViewOrganizations: boolean;
|
||||
canViewAuditLog: boolean;
|
||||
canViewConnectionLog: boolean;
|
||||
canViewAIBridge: boolean;
|
||||
canViewAISettings: boolean;
|
||||
canViewHealth: boolean;
|
||||
};
|
||||
|
||||
@@ -210,6 +212,8 @@ const AdminSettingsSub: FC<MobileMenuPermissions> = ({
|
||||
canViewDeployment,
|
||||
canViewAuditLog,
|
||||
canViewConnectionLog,
|
||||
canViewAIBridge,
|
||||
canViewAISettings,
|
||||
canViewHealth,
|
||||
}) => {
|
||||
const [open, setOpen] = useState(false);
|
||||
@@ -245,6 +249,14 @@ const AdminSettingsSub: FC<MobileMenuPermissions> = ({
|
||||
>
|
||||
<Link to="/organizations">Organizations</Link>
|
||||
</DropdownMenuItem>
|
||||
{canViewAISettings && (
|
||||
<DropdownMenuItem
|
||||
asChild
|
||||
className={cn(itemStyles.default, itemStyles.sub)}
|
||||
>
|
||||
<Link to="/ai/settings">AI</Link>
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
{canViewAuditLog && (
|
||||
<DropdownMenuItem
|
||||
asChild
|
||||
@@ -261,6 +273,14 @@ const AdminSettingsSub: FC<MobileMenuPermissions> = ({
|
||||
<Link to="/connectionlog">Connection logs</Link>
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
{canViewAIBridge && (
|
||||
<DropdownMenuItem
|
||||
asChild
|
||||
className={cn(itemStyles.default, itemStyles.sub)}
|
||||
>
|
||||
<Link to="/ai-gateway/sessions">AI sessions</Link>
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
{canViewHealth && (
|
||||
<DropdownMenuItem
|
||||
asChild
|
||||
|
||||
@@ -166,6 +166,8 @@ export const NavbarView: FC<NavbarViewProps> = ({
|
||||
canViewConnectionLog={canViewConnectionLog}
|
||||
canViewOrganizations={canViewOrganizations}
|
||||
canViewDeployment={canViewDeployment}
|
||||
canViewAIBridge={canViewAIBridge}
|
||||
canViewAISettings={canViewAISettings}
|
||||
canViewHealth={canViewHealth}
|
||||
/>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user