diff --git a/src/components/layout/sidebar.tsx b/src/components/layout/sidebar.tsx index cc1f19b..1ac0112 100644 --- a/src/components/layout/sidebar.tsx +++ b/src/components/layout/sidebar.tsx @@ -85,7 +85,15 @@ const ProjectLogo = ({ export function Sidebar({ className }: SidebarProps) { const pathname = usePathname() - const [expandedItems, setExpandedItems] = useState(["Settings"]) + // The Sidebar is mounted per-page (not in a shared layout), so its state + // is wiped on every navigation. Derive the initially-expanded parent from + // the current path so the active sub-item's parent stays expanded across + // sub-item clicks and on hard refresh. + const [expandedItems, setExpandedItems] = useState(() => { + if (pathname?.startsWith("/reports/")) return ["Reports"] + if (pathname?.startsWith("/settings/")) return ["Settings"] + return [] + }) const [isCollapsed, setIsCollapsed] = useState(false) const { user } = useUser() const isAuthenticated = !!user?.id @@ -120,7 +128,7 @@ export function Sidebar({ className }: SidebarProps) { const toggleExpanded = (itemName: string) => { setExpandedItems((prev) => - prev.includes(itemName) ? prev.filter((item) => item !== itemName) : [...prev, itemName], + prev.includes(itemName) ? prev.filter((item) => item !== itemName) : [itemName], ) } @@ -306,24 +314,45 @@ export function Sidebar({ className }: SidebarProps) {
{item.subItems ? (
- )} - +
{!isCollapsed && isExpanded && (
{item.subItems.map((subItem) => { @@ -345,7 +374,7 @@ export function Sidebar({ className }: SidebarProps) { )}
) : ( - + setExpandedItems([])}>