From baaf624eae9d5e90b95c2540404f0f0ea8d91716 Mon Sep 17 00:00:00 2001 From: Deon Sanchez <69873175+deon-sanchez@users.noreply.github.com> Date: Tue, 30 Sep 2025 13:26:24 -0600 Subject: [PATCH] added button themes and fixed alignment --- frontend/components/navigation-layout.tsx | 5 +- frontend/src/components/layout-wrapper.tsx | 23 +++--- frontend/src/components/ui/buttonTheme.tsx | 68 ++++++++++++++++ frontend/src/components/user-nav.tsx | 95 +++++++++++++--------- 4 files changed, 139 insertions(+), 52 deletions(-) create mode 100644 frontend/src/components/ui/buttonTheme.tsx diff --git a/frontend/components/navigation-layout.tsx b/frontend/components/navigation-layout.tsx index a2fdbe8f..2722c81f 100644 --- a/frontend/components/navigation-layout.tsx +++ b/frontend/components/navigation-layout.tsx @@ -1,7 +1,10 @@ "use client"; import { usePathname } from "next/navigation"; -import { useGetConversationsQuery, type ChatConversation } from "@/app/api/queries/useGetConversationsQuery"; +import { + useGetConversationsQuery, + type ChatConversation, +} from "@/app/api/queries/useGetConversationsQuery"; import { KnowledgeFilterDropdown } from "@/components/knowledge-filter-dropdown"; import { ModeToggle } from "@/components/mode-toggle"; import { Navigation } from "@/components/navigation"; diff --git a/frontend/src/components/layout-wrapper.tsx b/frontend/src/components/layout-wrapper.tsx index 5c2f0e13..c59b5158 100644 --- a/frontend/src/components/layout-wrapper.tsx +++ b/frontend/src/components/layout-wrapper.tsx @@ -2,7 +2,10 @@ import { Bell, Loader2 } from "lucide-react"; import { usePathname } from "next/navigation"; -import { useGetConversationsQuery, type ChatConversation } from "@/app/api/queries/useGetConversationsQuery"; +import { + useGetConversationsQuery, + type ChatConversation, +} from "@/app/api/queries/useGetConversationsQuery"; import { useGetSettingsQuery } from "@/app/api/queries/useGetSettingsQuery"; import { KnowledgeFilterPanel } from "@/components/knowledge-filter-panel"; import Logo from "@/components/logo/logo"; @@ -50,10 +53,10 @@ export function LayoutWrapper({ children }: { children: React.ReactNode }) { // Calculate active tasks for the bell icon const activeTasks = tasks.filter( - (task) => + task => task.status === "pending" || task.status === "running" || - task.status === "processing", + task.status === "processing" ); // Show loading state when backend isn't ready @@ -85,7 +88,7 @@ export function LayoutWrapper({ children }: { children: React.ReactNode }) {
-
+
{/* Knowledge Filter Dropdown */} {/* */} {/* Task Notification Bell */} - + {/* Separator */} -
+
diff --git a/frontend/src/components/ui/buttonTheme.tsx b/frontend/src/components/ui/buttonTheme.tsx new file mode 100644 index 00000000..b23b6a89 --- /dev/null +++ b/frontend/src/components/ui/buttonTheme.tsx @@ -0,0 +1,68 @@ +import { useEffect, useState } from "react"; +import { Monitor, Moon, Sun } from "lucide-react"; +import { useTheme } from "next-themes"; + +export const ThemeButtons = () => { + const { theme, setTheme } = useTheme(); + const [selectedTheme, setSelectedTheme] = useState("dark"); + + // Sync local state with theme context + useEffect(() => { + if (theme) { + setSelectedTheme(theme); + } + }, [theme]); + + const handleThemeChange = (newTheme: string) => { + setSelectedTheme(newTheme); + setTheme(newTheme); + }; + + return ( +
+ {/* Light Theme Button */} + + + {/* Dark Theme Button */} + + + {/* System Theme Button */} + +
+ ); +}; + +export default ThemeButtons; diff --git a/frontend/src/components/user-nav.tsx b/frontend/src/components/user-nav.tsx index 85ec5ddd..3adc9fd7 100644 --- a/frontend/src/components/user-nav.tsx +++ b/frontend/src/components/user-nav.tsx @@ -1,7 +1,7 @@ -"use client" +"use client"; -import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar" -import { Button } from "@/components/ui/button" +import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; +import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, @@ -9,65 +9,79 @@ import { DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, -} from "@/components/ui/dropdown-menu" -import { useAuth } from "@/contexts/auth-context" -import { LogIn, LogOut, User, Moon, Sun, ChevronsUpDown } from "lucide-react" -import { useTheme } from "next-themes" +} from "@/components/ui/dropdown-menu"; +import { useAuth } from "@/contexts/auth-context"; +import { LogIn, LogOut, User, Moon, Sun, ChevronsUpDown } from "lucide-react"; +import { useTheme } from "next-themes"; +import ThemeButtons from "./ui/buttonTheme"; export function UserNav() { - const { user, isLoading, isAuthenticated, isNoAuthMode, login, logout } = useAuth() - const { theme, setTheme } = useTheme() + const { user, isLoading, isAuthenticated, isNoAuthMode, login, logout } = + useAuth(); + const { theme, setTheme } = useTheme(); if (isLoading) { - return ( -
- ) + return
; } // In no-auth mode, show a simple theme switcher instead of auth UI if (isNoAuthMode) { return ( - - ) + ); } if (!isAuthenticated) { return ( - - ) + ); } return ( - + + -
+

{user?.name}

{user?.email} @@ -75,20 +89,21 @@ export function UserNav() {

- setTheme(theme === "light" ? "dark" : "light")}> - {theme === "light" ? ( - - ) : ( - - )} - Toggle Theme - + {/* */} +
+ Theme + +
+ {/*
*/} - + Log out - ) -} \ No newline at end of file + ); +}