@@ -146,15 +146,16 @@ describe("Navbar", () => {
it("should render without crashing", () => {
renderWithProviders(
);
+ expect(screen.getByRole("button", { name: /^notifications$/i })).toBeInTheDocument();
expect(screen.getByText("Docs")).toBeInTheDocument();
- expect(screen.getByText("User")).toBeInTheDocument();
+ expect(screen.getByRole("button", { name: /open account menu/i })).toBeInTheDocument();
});
it("should display user information in dropdown", async () => {
const user = userEvent.setup();
renderWithProviders(
);
- await user.click(screen.getByText("User"));
+ await user.click(screen.getByRole("button", { name: /open account menu/i }));
await waitFor(() => {
expect(screen.getByText("test-user")).toBeInTheDocument();
@@ -193,7 +194,7 @@ describe("Navbar", () => {
});
renderWithProviders(
);
- await user.click(screen.getByText("User"));
+ await user.click(screen.getByRole("button", { name: /open account menu/i }));
await waitFor(() => {
expect(screen.getByText("Premium")).toBeInTheDocument();
@@ -230,7 +231,7 @@ describe("Navbar", () => {
const publicPageProps = { ...defaultProps, isPublicPage: true };
renderWithProviders(
);
- expect(screen.queryByText("User")).not.toBeInTheDocument();
+ expect(screen.queryByRole("button", { name: /open account menu/i })).not.toBeInTheDocument();
});
it("should handle hide new features toggle", async () => {
@@ -244,7 +245,7 @@ describe("Navbar", () => {
renderWithProviders(
);
- await user.click(screen.getByText("User"));
+ await user.click(screen.getByRole("button", { name: /open account menu/i }));
await waitFor(() => {
expect(screen.getByText("test-user")).toBeInTheDocument();
@@ -269,7 +270,7 @@ describe("Navbar", () => {
renderWithProviders(
);
- await user.click(screen.getByText("User"));
+ await user.click(screen.getByRole("button", { name: /open account menu/i }));
await waitFor(() => {
expect(screen.getByText("test-user")).toBeInTheDocument();
diff --git a/ui/litellm-dashboard/src/components/navbar.tsx b/ui/litellm-dashboard/src/components/navbar.tsx
index 6e0a47a23f9..5213409f8c3 100644
--- a/ui/litellm-dashboard/src/components/navbar.tsx
+++ b/ui/litellm-dashboard/src/components/navbar.tsx
@@ -1,16 +1,20 @@
-import { useHealthReadiness } from "@/app/(dashboard)/hooks/healthReadiness/useHealthReadiness";
import { useDisableBouncingIcon } from "@/app/(dashboard)/hooks/useDisableBouncingIcon";
+import { useDisableShowPrompts } from "@/app/(dashboard)/hooks/useDisableShowPrompts";
+import { useHealthReadiness } from "@/app/(dashboard)/hooks/healthReadiness/useHealthReadiness";
+import { useWorker } from "@/hooks/useWorker";
import { getProxyBaseUrl } from "@/components/networking";
import { useTheme } from "@/contexts/ThemeContext";
import { clearTokenCookies } from "@/utils/cookieUtils";
import { clearStoredReturnUrl } from "@/utils/returnUrlUtils";
import { fetchProxySettings } from "@/utils/proxyUtils";
-import { MenuFoldOutlined, MenuUnfoldOutlined, MoonOutlined, SunOutlined } from "@ant-design/icons";
-import { Button, Switch, Tag } from "antd";
+import { DownOutlined, MenuFoldOutlined, MenuUnfoldOutlined } from "@ant-design/icons";
+import { Tag } from "antd";
import Link from "next/link";
import React, { useEffect, useState } from "react";
import { BlogDropdown } from "./Navbar/BlogDropdown/BlogDropdown";
import { CommunityEngagementButtons } from "./Navbar/CommunityEngagementButtons/CommunityEngagementButtons";
+import { NAV_PRODUCT_LINK_CLASS } from "./Navbar/navProductLinkClass";
+import { NotificationsBell } from "./Navbar/NotificationsBell/NotificationsBell";
import UserDropdown from "./Navbar/UserDropdown/UserDropdown";
import WorkerDropdown from "./Navbar/WorkerDropdown/WorkerDropdown";
@@ -30,18 +34,12 @@ interface NavbarProps {
}
const Navbar: React.FC
= ({
- userID,
- userEmail,
- userRole,
- premiumUser,
proxySettings,
setProxySettings,
accessToken,
isPublicPage = false,
sidebarCollapsed = false,
onToggleSidebar,
- isDarkMode,
- toggleDarkMode,
}) => {
const baseUrl = getProxyBaseUrl();
const [logoutUrl, setLogoutUrl] = useState("");
@@ -49,8 +47,10 @@ const Navbar: React.FC = ({
const { data: healthData } = useHealthReadiness();
const version = healthData?.litellm_version;
const disableBouncingIcon = useDisableBouncingIcon();
+ const hideCommunityLinks = useDisableShowPrompts();
+ const { isControlPlane, selectedWorker } = useWorker();
+ const showWorkerSwitch = isControlPlane && selectedWorker !== null;
- // Simple logo URL: use custom logo if available, otherwise default
const imageUrl = logoUrl || `${baseUrl}/get_image`;
useEffect(() => {
@@ -87,14 +87,14 @@ const Navbar: React.FC = ({
};
return (
-