Files
medusa-store/www/apps/resources/providers/sidebar.tsx
2025-03-10 10:32:45 +02:00

55 lines
1.2 KiB
TypeScript

"use client"
import {
SidebarProvider as UiSidebarProvider,
useScrollController,
} from "docs-ui"
import { usePathname } from "next/navigation"
import { useCallback, useEffect, useState } from "react"
import { Sidebar } from "types"
import { getSidebarForPath } from "../utils/get-sidebar-for-path"
type SidebarProviderProps = {
children?: React.ReactNode
}
const SidebarProvider = ({ children }: SidebarProviderProps) => {
const { scrollableElement } = useScrollController()
const [sidebar, setSidebar] = useState<Sidebar.Sidebar | undefined>()
const pathname = usePathname()
const loadSidebar = useCallback(
async () => getSidebarForPath(pathname),
[pathname]
)
useEffect(() => {
loadSidebar()
.then(setSidebar)
.catch((error) => {
console.error("Error loading sidebar:", error)
})
}, [loadSidebar])
return (
<UiSidebarProvider
scrollableElement={scrollableElement}
sidebars={
sidebar
? [sidebar]
: [
{
sidebar_id: "default",
title: "Default",
items: [],
},
]
}
>
{children}
</UiSidebarProvider>
)
}
export default SidebarProvider