@@ -19,6 +19,12 @@ import { WebsiteHeader } from './navigation/website-header';
1919import { OrganizationSelector } from './organization-selector' ;
2020import { TopHeader } from './top-header' ;
2121
22+ type NavigationConfig = {
23+ navigation : typeof mainNavigation ;
24+ header : React . ReactNode ;
25+ currentWebsiteId ?: string | null ;
26+ } ;
27+
2228export function Sidebar ( ) {
2329 const pathname = usePathname ( ) ;
2430 const [ isMobileOpen , setIsMobileOpen ] = useState ( false ) ;
@@ -48,73 +54,39 @@ export function Sidebar() {
4854 return ( ) => document . removeEventListener ( 'keydown' , handleKeyDown ) ;
4955 } , [ isMobileOpen , closeSidebar ] ) ;
5056
51- const renderNavigation = ( ) => {
57+ const getNavigationConfig = ( ) : NavigationConfig => {
5258 if ( isWebsite ) {
53- return (
54- < div className = "space-y-4" >
55- < WebsiteHeader website = { currentWebsite } />
56- { websiteNavigation . map ( ( section ) => (
57- < NavigationSection
58- currentWebsiteId = { websiteId }
59- items = { section . items }
60- key = { section . title }
61- pathname = { pathname }
62- title = { section . title }
63- />
64- ) ) }
65- </ div >
66- ) ;
59+ return {
60+ navigation : websiteNavigation ,
61+ header : < WebsiteHeader website = { currentWebsite } /> ,
62+ currentWebsiteId : websiteId ,
63+ } ;
6764 }
6865
6966 if ( isDemo ) {
70- return (
71- < div className = "space-y-4" >
72- < WebsiteHeader website = { currentWebsite } />
73- { demoNavigation . map ( ( section ) => (
74- < NavigationSection
75- currentWebsiteId = { websiteId }
76- items = { section . items }
77- key = { section . title }
78- pathname = { pathname }
79- title = { section . title }
80- />
81- ) ) }
82- </ div >
83- ) ;
67+ return {
68+ navigation : demoNavigation ,
69+ header : < WebsiteHeader website = { currentWebsite } /> ,
70+ currentWebsiteId : websiteId ,
71+ } ;
8472 }
8573
8674 if ( isSandbox ) {
87- return (
88- < div className = "space-y-4" >
89- < SandboxHeader />
90- { sandboxNavigation . map ( ( section ) => (
91- < NavigationSection
92- currentWebsiteId = "sandbox"
93- items = { section . items }
94- key = { section . title }
95- pathname = { pathname }
96- title = { section . title }
97- />
98- ) ) }
99- </ div >
100- ) ;
75+ return {
76+ navigation : sandboxNavigation ,
77+ header : < SandboxHeader /> ,
78+ currentWebsiteId : 'sandbox' ,
79+ } ;
10180 }
10281
103- return (
104- < div className = "space-y-4" >
105- < OrganizationSelector />
106- { mainNavigation . map ( ( section ) => (
107- < NavigationSection
108- items = { section . items }
109- key = { section . title }
110- pathname = { pathname }
111- title = { section . title }
112- />
113- ) ) }
114- </ div >
115- ) ;
82+ return {
83+ navigation : mainNavigation ,
84+ header : < OrganizationSelector /> ,
85+ } ;
11686 } ;
11787
88+ const { navigation, header, currentWebsiteId } = getNavigationConfig ( ) ;
89+
11890 return (
11991 < >
12092 < TopHeader setMobileOpen = { ( ) => setIsMobileOpen ( true ) } />
@@ -124,6 +96,8 @@ export function Sidebar() {
12496 className = "fixed inset-0 z-30 bg-black/20 md:hidden"
12597 onClick = { closeSidebar }
12698 onKeyDown = { closeSidebar }
99+ role = "button"
100+ tabIndex = { 0 }
127101 />
128102 ) }
129103
@@ -145,7 +119,18 @@ export function Sidebar() {
145119 </ Button >
146120
147121 < ScrollArea className = "h-[calc(100vh-4rem)]" >
148- < div className = "select-none space-y-4 p-3" > { renderNavigation ( ) } </ div >
122+ < div className = "select-none space-y-4 p-3" >
123+ { header }
124+ { navigation . map ( ( section ) => (
125+ < NavigationSection
126+ currentWebsiteId = { currentWebsiteId }
127+ items = { section . items }
128+ key = { section . title }
129+ pathname = { pathname }
130+ title = { section . title }
131+ />
132+ ) ) }
133+ </ div >
149134 </ ScrollArea >
150135 </ div >
151136 </ >
0 commit comments