1- import { useState } from "react" ;
1+ import { useState , type ReactNode } from "react" ;
22import {
33 Nav ,
44 NavList ,
@@ -15,40 +15,50 @@ interface NavOnSelectProps {
1515 to : string ;
1616}
1717
18- export const Navigation : React . FunctionComponent = ( ) => {
19- const [ activeItem , setActiveItem ] = useState ( 1 ) ;
18+ interface NavEntry {
19+ id : string ;
20+ slug : string ;
21+ data : {
22+ title : string ;
23+ } ;
24+ collection : string ;
25+ }
26+
27+ interface NavigationProps {
28+ navEntries : NavEntry [ ] ;
29+ }
30+
31+ export const Navigation : React . FunctionComponent < NavigationProps > = ( {
32+ navEntries,
33+ } : NavigationProps ) => {
34+ const [ activeItem , setActiveItem ] = useState ( "" ) ;
2035
2136 const onNavSelect = (
2237 _event : React . FormEvent < HTMLInputElement > ,
2338 selectedItem : NavOnSelectProps
2439 ) => {
25- typeof selectedItem . itemId === "number " &&
40+ typeof selectedItem . itemId === "string " &&
2641 setActiveItem ( selectedItem . itemId ) ;
2742 } ;
2843
2944 const $isNavOpen = useStore ( isNavOpen ) ;
3045
46+ const navItems = navEntries . map ( ( entry ) => (
47+ < NavItem
48+ key = { entry . id }
49+ itemId = { entry . id }
50+ isActive = { activeItem === entry . id }
51+ to = { `/${ entry . collection } /${ entry . slug } ` }
52+ >
53+ { entry . data . title }
54+ </ NavItem >
55+ ) ) ;
56+
3157 return (
3258 < PageSidebar isSidebarOpen = { $isNavOpen } >
3359 < PageSidebarBody >
3460 < Nav onSelect = { onNavSelect } >
35- < NavList >
36- < NavItem itemId = { 0 } isActive = { activeItem === 0 } to = "test" >
37- Test
38- </ NavItem >
39- < NavItem itemId = { 1 } isActive = { activeItem === 1 } to = "#policy" >
40- Policy
41- </ NavItem >
42- < NavItem itemId = { 2 } isActive = { activeItem === 2 } to = "#auth" >
43- Authentication
44- </ NavItem >
45- < NavItem itemId = { 3 } isActive = { activeItem === 3 } to = "#network" >
46- Network services
47- </ NavItem >
48- < NavItem itemId = { 4 } isActive = { activeItem === 4 } to = "#server" >
49- Server
50- </ NavItem >
51- </ NavList >
61+ < NavList > { navItems } </ NavList >
5262 </ Nav >
5363 </ PageSidebarBody >
5464 </ PageSidebar >
0 commit comments