1+ import { faUser } from "@fortawesome/free-solid-svg-icons" ;
2+ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" ;
3+ import { useEffect , useState } from "react" ;
4+ import {
5+ Container ,
6+ Navbar ,
7+ Nav ,
8+ Dropdown ,
9+ DropdownDivider ,
10+ } from "react-bootstrap" ;
11+ import {
12+ decryptData ,
13+ getFromLocalStorage ,
14+ parseJSONData
15+ } from "./api/Utility.ts" ;
16+ import { get } from "lodash" ;
17+ import AmbariAboutModal from "./AmbariAboutModal" ;
18+
19+ type NavBarProps = {
20+ subPath : string ;
21+ clusterName : string ;
22+ } ;
23+
24+ export default function NavBar ( { subPath, clusterName } : NavBarProps ) {
25+ const [ showAmbariAboutModal , setShowAmbariAboutModal ] = useState ( false ) ;
26+ const [ loginUserName , setLoginUserName ] = useState ( "" ) ;
27+ const [ ambariLsVal , setAmbariLsVal ] = useState ( null ) ;
28+
29+ useEffect ( ( ) => {
30+ let ambariKey = getFromLocalStorage ( 'ambari' ) ;
31+ if ( ambariKey ) {
32+ setAmbariLsVal ( parseJSONData ( decryptData ( ambariKey ) ) ) ;
33+ }
34+ } , [ ] ) ;
35+
36+ useEffect ( ( ) => {
37+ if ( ambariLsVal ) {
38+ const loginName = get ( ambariLsVal , 'app.loginName' ) ;
39+ if ( loginName ) {
40+ setLoginUserName ( loginName ) ;
41+ }
42+ }
43+ } , [ ambariLsVal ] ) ;
44+
45+ return (
46+ < div >
47+ { showAmbariAboutModal ? (
48+ < AmbariAboutModal
49+ isOpen = { showAmbariAboutModal }
50+ onClose = { ( ) => setShowAmbariAboutModal ( false ) }
51+ />
52+ ) : null }
53+ < Navbar collapseOnSelect expand = "lg" className = "bg-white" >
54+ < Container className = "d-flex justify-content-between" >
55+ < Navbar . Brand
56+ className = "text-black m-0 breadcrumb d-flex align-items-center"
57+ style = { { fontSize : 24 } }
58+ >
59+ { " " }
60+ Admin /
61+ < div className = "navbar-text ms-1" style = { { fontSize : 24 } } >
62+ { subPath }
63+ </ div >
64+ </ Navbar . Brand >
65+ < div className = "d-flex align-items-center " >
66+ < Nav . Link className = "navbar-text navbar-size" >
67+ { clusterName }
68+ </ Nav . Link >
69+ < Dropdown >
70+ < Dropdown . Toggle
71+ variant = "transparent"
72+ className = "d-flex align-items-center border-0 ms-2"
73+ >
74+ < FontAwesomeIcon
75+ icon = { faUser }
76+ className = "me-1 navbar-text navbar-size"
77+ />
78+ < div className = "navbar-text navbar-size" > { loginUserName } </ div >
79+ </ Dropdown . Toggle >
80+
81+ < Dropdown . Menu className = "rounded-0" >
82+ < Dropdown . Item
83+ onClick = { ( ) => {
84+ setShowAmbariAboutModal ( true ) ;
85+ } }
86+ >
87+ About
88+ </ Dropdown . Item >
89+ < DropdownDivider />
90+ < Dropdown . Item > Signout</ Dropdown . Item >
91+ </ Dropdown . Menu >
92+ </ Dropdown >
93+ </ div >
94+ </ Container >
95+ </ Navbar >
96+ </ div >
97+ ) ;
98+ }
0 commit comments