Skip to content

Commit 1b9fd7a

Browse files
Chore: pass pathname as prop into navigation group to avoid layout shift on initial render (#754)
This pr improves the initial navigation sub groups expanded state, by passing in the pathname as a prop instead of hooking it in and determining the state in an effect. This avoid layout shifts when doing initial page renders, while inside a navigation subgroup item
1 parent 2ab29f8 commit 1b9fd7a

2 files changed

Lines changed: 18 additions & 13 deletions

File tree

apps/web/src/components/Navigation/NavigationSubgroup.tsx

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,22 @@
11
import clsx from 'clsx'
22
import { ChevronDown, ChevronRight } from 'lucide-react'
3-
import { usePathname } from 'next/navigation'
4-
import { useEffect, useState } from 'react'
3+
import { useState } from 'react'
54

65
import { NavigationLink } from './NavigationLink'
76
import { NavSubgroup } from './routes'
87

9-
export function NavigationSubgroup({ subgroup }: { subgroup: NavSubgroup }) {
10-
const [isExpanded, setIsExpanded] = useState(false)
11-
const pathname = usePathname()
8+
interface NavigationSubgroupProps {
9+
subgroup: NavSubgroup
10+
pathname: string
11+
}
1212

13+
export function NavigationSubgroup({
14+
subgroup,
15+
pathname,
16+
}: NavigationSubgroupProps) {
1317
const isActive = subgroup.links.some((link) => link.href === pathname)
1418

15-
// Automatically expand the subgroup if it's active
16-
useEffect(() => {
17-
if (isActive) {
18-
setIsExpanded(true)
19-
}
20-
}, [isActive])
19+
const [isExpanded, setIsExpanded] = useState(isActive)
2120

2221
const toggleExpand = () => {
2322
setIsExpanded(!isExpanded)

apps/web/src/components/Navigation/index.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,10 @@ function NavigationGroup({
6363
{group.items?.map((item) => (
6464
<React.Fragment key={item.title}>
6565
{(item as any).links ? (
66-
<NavigationSubgroup subgroup={item as NavSubgroup} />
66+
<NavigationSubgroup
67+
subgroup={item as NavSubgroup}
68+
pathname={initialPathname}
69+
/>
6770
) : (
6871
<NavigationLink
6972
link={item as NavLink}
@@ -139,7 +142,10 @@ function VersionedNavigationGroup({
139142
{group.versionedItems[curVersion]?.map((item) => (
140143
<React.Fragment key={item.title}>
141144
{(item as any).links ? (
142-
<NavigationSubgroup subgroup={item as NavSubgroup} />
145+
<NavigationSubgroup
146+
subgroup={item as NavSubgroup}
147+
pathname={initialPathname}
148+
/>
143149
) : (
144150
<NavigationLink
145151
link={item as NavLink}

0 commit comments

Comments
 (0)