From d50555cbc4a758b031c60bee0314be155641731a Mon Sep 17 00:00:00 2001 From: kbe Date: Thu, 14 Aug 2025 17:08:56 +0200 Subject: [PATCH] In the header make use of next/navigation to get the path name and display current link --- components/ui/header.tsx | 90 +++++++++++++++++++++++++--------------- 1 file changed, 57 insertions(+), 33 deletions(-) diff --git a/components/ui/header.tsx b/components/ui/header.tsx index 2d5dd9c..08b255a 100644 --- a/components/ui/header.tsx +++ b/components/ui/header.tsx @@ -3,7 +3,9 @@ import * as React from "react" import { cn } from "@/lib/utils" import Link from "next/link" -import { useState } from "react" +import { useState, useEffect } from "react" +import { usePathname } from "next/navigation" + interface HeaderProps { className?: string @@ -24,6 +26,22 @@ const navigation = [ export function Header({ className, isLoggedIn = false, isAdmin = false }: HeaderProps) { const [mobileMenuOpen, setMobileMenuOpen] = useState(false) const [profileOpen, setProfileOpen] = useState(false) + const [activeNavItem, setActiveNavItem] = useState(null) + + // Use usePathname for client-side navigation + let pathname = usePathname() + + // Update activeNavItem when pathname changes + useEffect(() => { + if (pathname) { + setActiveNavItem(pathname) + } + }, [pathname]) + + // Only render the header after the pathname is available + if (!pathname) { + return null + } return (
@@ -41,23 +59,26 @@ export function Header({ className, isLoggedIn = false, isAdmin = false }: Heade
- {navigation.map((item) => ( - (item.requiresAuth ? (isLoggedIn || isAdmin) : true) && ( - - {item.name} - + {navigation.map((item) => { + const isCurrent = activeNavItem === item.href + return ( + (item.requiresAuth ? (isLoggedIn || isAdmin) : true) && ( + + {item.name} + + ) ) - ))} + })}
@@ -139,23 +160,26 @@ export function Header({ className, isLoggedIn = false, isAdmin = false }: Heade {mobileMenuOpen && (
- {navigation.map((item) => ( - (item.requiresAuth ? (isLoggedIn || isAdmin) : true) && ( - - {item.name} - + {navigation.map((item) => { + const isCurrent = activeNavItem === item.href + return ( + (item.requiresAuth ? (isLoggedIn || isAdmin) : true) && ( + + {item.name} + + ) ) - ))} + })}
{isLoggedIn && (