@@ -11,85 +11,104 @@ import logo from '../../../assets/logo/safety-logo-white.png';
1111import { RootState , AppDispatch } from '../../../stores/store' ;
1212import { setHeaderExpanded } from '../../../stores' ;
1313import { useStore } from '../../../stores/storeConfig' ;
14+ import { FeatureFlags , isFeatureEnabled } from '../../../utils/featureFlags' ;
1415import '../../../styles/tabs.css' ;
1516import './header.css' ;
1617
1718interface IProps {
18- title : string ;
19+ title : string ;
1920}
2021
2122const Header : React . FC < IProps > = observer ( ( { title } ) => {
22- const { t } = useTranslation ( ) ;
23- const dispatch = useDispatch < AppDispatch > ( ) ;
24- const { isHeaderExpanded } = useSelector ( ( state : RootState ) => state . appUi ) ;
25- const { userStore } = useStore ( ) ;
26- const { isAuthenticated, user } = userStore ;
23+ const { t } = useTranslation ( ) ;
24+ const dispatch = useDispatch < AppDispatch > ( ) ;
25+ const { isHeaderExpanded } = useSelector ( ( state : RootState ) => state . appUi ) ;
26+ const { userStore } = useStore ( ) ;
27+ const { isAuthenticated, user } = userStore ;
2728
28- const toggleHeaderExpanded = ( ) => {
29- dispatch ( setHeaderExpanded ( ! isHeaderExpanded ) ) ;
30- } ;
29+ const toggleHeaderExpanded = ( ) => {
30+ dispatch ( setHeaderExpanded ( ! isHeaderExpanded ) ) ;
31+ } ;
3132
32- const onLoginHandler = ( ) => {
33- if ( isAuthenticated ) {
34- userStore . logout ( ) ;
35- } else {
36- userStore . login ( ) ;
37- }
38- } ;
33+ const onLoginHandler = ( ) => {
34+ if ( isAuthenticated ) {
35+ userStore . logout ( ) ;
36+ } else {
37+ userStore . login ( ) ;
38+ }
39+ } ;
3940
40- const UserIcon = ( ) => (
41- < svg xmlns = "http://www.w3.org/2000/svg" width = "18" height = "18" fill = "currentColor" className = "bi bi-person-circle" viewBox = "0 0 16 16" style = { { marginInlineStart : '8px' } } >
42- < path d = "M11 6a3 3 0 1 1-6 0 3 3 0 0 1 6 0z" />
43- < path fillRule = "evenodd" d = "M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8zm8-7a7 7 0 0 0-5.468 11.37C3.242 11.226 4.805 10 8 10s4.757 1.225 5.468 2.37A7 7 0 0 0 8 1z" />
44- </ svg >
45- ) ;
41+ const UserIcon = ( ) => (
42+ < svg
43+ xmlns = 'http://www.w3.org/2000/svg'
44+ width = '18'
45+ height = '18'
46+ fill = 'currentColor'
47+ className = 'bi bi-person-circle'
48+ viewBox = '0 0 16 16'
49+ style = { { marginInlineStart : '8px' } }
50+ >
51+ < path d = 'M11 6a3 3 0 1 1-6 0 3 3 0 0 1 6 0z' />
52+ < path
53+ fillRule = 'evenodd'
54+ d = 'M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8zm8-7a7 7 0 0 0-5.468 11.37C3.242 11.226 4.805 10 8 10s4.757 1.225 5.468 2.37A7 7 0 0 0 8 1z'
55+ />
56+ </ svg >
57+ ) ;
4658
47- const loginText = isAuthenticated ? t ( 'Logout' ) : t ( 'Login' ) ;
59+ const loginText = isAuthenticated ? t ( 'Logout' ) : t ( 'Login' ) ;
4860
49- return (
50- < header className = " header" >
51- < Navbar className = " navbar" expand = "lg" expanded = { isHeaderExpanded } onToggle = { toggleHeaderExpanded } >
52- < div className = " container-fluid" >
53- < img src = { logo } alt = { `${ title } logo` } height = "25" width = " 150" />
54- < Navbar . Toggle aria-controls = " basic-navbar-nav" className = " text-light" data-testid = " navbar-toggle" />
55- < Navbar . Collapse id = " basic-navbar-nav" >
56- < div className = " navbar-nav" >
57- < NavigationList />
58- </ div >
61+ return (
62+ < header className = ' header' >
63+ < Navbar className = ' navbar' expand = 'lg' expanded = { isHeaderExpanded } onToggle = { toggleHeaderExpanded } >
64+ < div className = ' container-fluid' >
65+ < img src = { logo } alt = { `${ title } logo` } height = '25' width = ' 150' />
66+ < Navbar . Toggle aria-controls = ' basic-navbar-nav' className = ' text-light' data-testid = ' navbar-toggle' />
67+ < Navbar . Collapse id = ' basic-navbar-nav' >
68+ < div className = ' navbar-nav' >
69+ < NavigationList />
70+ </ div >
5971
60- < div className = "d-flex align-items-center ms-auto" >
61- < div className = "me-3" >
62- { isAuthenticated && (
63- < Link
64- to = "/profile"
65- className = "text-white text-decoration-none small d-none d-md-inline hover-opacity me-3"
66- style = { { fontWeight : 500 } }
67- >
68- { t ( 'Welcome' ) } , { user ?. name || t ( 'User' ) }
69- </ Link >
70- ) }
71- { isAuthenticated && < div className = "vr d-none d-md-block text-white opacity-50 me-3" style = { { height : '20px' , display : 'inline-block' } } > </ div > }
72+ < div className = 'd-flex align-items-center ms-auto' >
73+ { isFeatureEnabled ( FeatureFlags . AUTH ) && (
74+ < div className = 'me-3' >
75+ { isAuthenticated && (
76+ < Link
77+ to = '/profile'
78+ className = 'text-white text-decoration-none small d-none d-md-inline hover-opacity me-3'
79+ style = { { fontWeight : 500 } }
80+ >
81+ { t ( 'Welcome' ) } , { user ?. name || t ( 'User' ) }
82+ </ Link >
83+ ) }
84+ { isAuthenticated && (
85+ < div
86+ className = 'vr d-none d-md-block text-white opacity-50 me-3'
87+ style = { { height : '20px' , display : 'inline-block' } }
88+ > </ div >
89+ ) }
7290
73- < Button
74- variant = "outline-light"
75- size = "sm"
76- className = "d-flex align-items-center px-3"
77- onClick = { onLoginHandler }
78- style = { { borderRadius : '20px' , fontWeight : 500 } }
79- >
80- { loginText }
81- < UserIcon />
82- </ Button >
83- </ div >
84- < div style = { { marginTop : '8px' } } >
85- < LanguageSelector />
86- </ div >
87- </ div >
88- </ Navbar . Collapse >
89- </ div >
90- </ Navbar >
91- </ header >
92- ) ;
91+ < Button
92+ variant = 'outline-light'
93+ size = 'sm'
94+ className = 'd-flex align-items-center px-3'
95+ onClick = { onLoginHandler }
96+ style = { { borderRadius : '20px' , fontWeight : 500 } }
97+ >
98+ { loginText }
99+ < UserIcon />
100+ </ Button >
101+ </ div >
102+ ) }
103+ < div style = { { marginTop : '8px' } } >
104+ < LanguageSelector />
105+ </ div >
106+ </ div >
107+ </ Navbar . Collapse >
108+ </ div >
109+ </ Navbar >
110+ </ header >
111+ ) ;
93112} ) ;
94113
95114export default Header ;
0 commit comments