Improve nav active state detection logic

Refined the active state logic in NavItem to ensure /dashboard and /dashboard/admin only match exactly, preventing sub-paths from being incorrectly marked as active.
This commit is contained in:
g
2025-11-30 00:29:57 +00:00
parent 785509fed9
commit 4ef0fd1a68
2 changed files with 9 additions and 3 deletions

View File

@@ -372,4 +372,4 @@ export default function AdminBanPage() {
</Card>
</div>
);
}
}

View File

@@ -16,8 +16,14 @@ interface NavItemProps {
export const NavItem: React.FC<NavItemProps> = ({ href, icon: Icon, children, onClick }) => {
const pathname = usePathname()
// More precise active state detection - exact match or starts with href followed by /
const isActive = pathname === href || (href !== '/dashboard' && pathname?.startsWith(href + '/'))
// More precise active state detection:
// - Exact match: pathname === href
// - Sub-path match: pathname starts with href + '/' (but exclude /dashboard and /dashboard/admin from matching sub-paths)
const isExactMatch = pathname === href
const isSubPathMatch = pathname?.startsWith(href + '/')
// Exclude parent routes that should only match exactly
const shouldOnlyMatchExactly = href === '/dashboard' || href === '/dashboard/admin'
const isActive = isExactMatch || (isSubPathMatch && !shouldOnlyMatchExactly)
const isNavigatingRef = useRef(false)
const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {