| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import { Outlet } from '@tanstack/react-router'
- import { getCookie } from '@/lib/cookies'
- import { cn } from '@/lib/utils'
- import { LayoutProvider } from '@/context/layout-context'
- import { SearchProvider } from '@/context/search-context'
- import {
- SidebarContent,
- SidebarFooter,
- SidebarHeader,
- SidebarInset,
- SidebarProvider,
- SidebarRail,
- } from '@/components/ui/sidebar'
- import { AppSidebar } from '@/components/layout/app-sidebar'
- import { SkipToMain } from '@/components/skip-to-main'
- import { sidebarData } from './data/sidebar-data'
- import { NavGroup } from './nav-group'
- import { NavUser } from './nav-user'
- import { TeamSwitcher } from './team-switcher'
- interface Props {
- children?: React.ReactNode
- }
- export function AuthenticatedLayout({ children }: Props) {
- const defaultOpen = getCookie('sidebar_state') !== 'false'
- return (
- <SearchProvider>
- <SidebarProvider defaultOpen={defaultOpen}>
- <LayoutProvider>
- <SkipToMain />
- <AppSidebar>
- <SidebarHeader>
- <TeamSwitcher teams={sidebarData.teams} />
- </SidebarHeader>
- <SidebarContent>
- {sidebarData.navGroups.map((props) => (
- <NavGroup key={props.title} {...props} />
- ))}
- </SidebarContent>
- <SidebarFooter>
- <NavUser user={sidebarData.user} />
- </SidebarFooter>
- <SidebarRail />
- </AppSidebar>
- <SidebarInset
- className={cn(
- // If layout is fixed, set the height
- // to 100svh to prevent overflow
- 'has-[[data-layout=fixed]]:h-svh',
- // If layout is fixed and sidebar is inset,
- // set the height to 100svh - 1rem (total margins) to prevent overflow
- // 'peer-data-[variant=inset]:has-[[data-layout=fixed]]:h-[calc(100svh-1rem)]',
- 'peer-data-[variant=inset]:has-[[data-layout=fixed]]:h-[calc(100svh-(var(--spacing)*4))]',
- // Set content container, so we can use container queries
- '@container/content'
- )}
- >
- {children ?? <Outlet />}
- </SidebarInset>
- </LayoutProvider>
- </SidebarProvider>
- </SearchProvider>
- )
- }
|