1
+ import { MouseEvent } from 'react' ;
1
2
import Nav from 'react-bootstrap/Nav' ;
2
- import RBNavbar from 'react-bootstrap/Navbar' ;
3
- import { NavLink , useLocation } from 'react-router-dom' ;
3
+ import Navbar from 'react-bootstrap/Navbar' ;
4
+ import NavDropdown from 'react-bootstrap/NavDropdown' ;
5
+ import { NavLink , useLocation , useNavigate } from 'react-router-dom' ;
4
6
5
- export default function Navbar ( ) {
7
+ import { useSchemaContext } from './SchemaContext' ;
8
+
9
+ export default function NavBar ( ) {
10
+ const { version, allVersions } = useSchemaContext ( ) ;
6
11
const location = useLocation ( ) ;
12
+ const navigate = useNavigate ( ) ;
7
13
8
14
const isActive = ( path : string ) => {
9
15
return location . pathname . startsWith ( path ) ? "active" : "" ;
10
16
} ;
11
17
18
+ const changeVersion = ( ev : MouseEvent < HTMLElement > ) => {
19
+ ev . preventDefault ( ) ;
20
+ const version = ev . currentTarget . textContent ;
21
+ if ( version ) {
22
+ let pathParts = location . pathname . split ( '/' ) ;
23
+ pathParts [ 1 ] = version ;
24
+ navigate ( pathParts . join ( '/' ) ) ;
25
+ }
26
+ } ;
27
+
12
28
return (
13
- < RBNavbar expand = "lg" className = "Navbar bg-body-tertiary fixed-top" >
14
- < RBNavbar . Brand >
29
+ < Navbar expand = "lg" className = "NavBar bg-body-tertiary fixed-top" >
30
+ < Navbar . Brand >
15
31
< img
16
32
src = "/logo-elastic-glyph-color.svg"
17
33
width = "30"
@@ -21,15 +37,22 @@ export default function Navbar() {
21
37
/>
22
38
23
39
Elasticsearch Specification Viewer
24
- </ RBNavbar . Brand >
25
- < RBNavbar . Toggle aria-controls = "basic-navbar-nav" />
26
- < RBNavbar . Collapse id = "basic-navbar-nav" >
40
+ </ Navbar . Brand >
41
+ < Navbar . Toggle aria-controls = "basic-navbar-nav" />
42
+ < Navbar . Collapse id = "basic-navbar-nav" >
27
43
< Nav className = "me-auto" >
28
- < Nav . Link as = { NavLink } to = "/" className = { isActive ( "/endpoints" ) } > Endpoints</ Nav . Link >
29
- < Nav . Link as = { NavLink } to = "/ types" className = { isActive ( "/types" ) } > Types</ Nav . Link >
44
+ < Nav . Link as = { NavLink } to = { `/ ${ version } /endpoints` } className = { isActive ( "/endpoints" ) } > Endpoints</ Nav . Link >
45
+ < Nav . Link as = { NavLink } to = { `/ ${ version } / types` } className = { isActive ( "/types" ) } > Types</ Nav . Link >
30
46
</ Nav >
31
- </ RBNavbar . Collapse >
32
- </ RBNavbar >
47
+ </ Navbar . Collapse >
48
+ < Navbar . Collapse className = "justify-content-end" >
49
+ < NavDropdown title = < span > Elasticsearch version: < b > { version } </ b > </ span > >
50
+ { allVersions . map ( v => (
51
+ < NavDropdown . Item key = { v } onClick = { changeVersion } > { v } </ NavDropdown . Item >
52
+ ) ) }
53
+ </ NavDropdown >
54
+ </ Navbar . Collapse >
55
+ </ Navbar >
33
56
) ;
34
57
}
35
58
0 commit comments