Skip to content

Commit cb1c0dd

Browse files
authored
128 refactor header (#129)
* refactor the header to accept navlinks instead of hardcoding them * rename the navigationLinks variable for the Header * add a TODO to handle the userSession in the header * revert to hard coding the log in/out header links * fix lint error
1 parent 4aaf2dc commit cb1c0dd

File tree

3 files changed

+52
-25
lines changed

3 files changed

+52
-25
lines changed

src/compounds/Header/Header.jsx

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@ import PropTypes from 'prop-types'
33
import { Container, Nav, Navbar } from 'react-bootstrap'
44
import Logo from '../Logo/Logo'
55

6-
// may come back to hard code these
7-
8-
const Header = ({ browseLink, logInLink, logo, logOutLink, requestsLink, user }) => {
6+
const Header = ({ auth, logo, navLinks, userSession }) => {
97
const { src, alt } = logo
108

119
return (
@@ -17,12 +15,20 @@ const Header = ({ browseLink, logInLink, logo, logOutLink, requestsLink, user })
1715
<Navbar.Toggle aria-controls='basic-navbar-nav' />
1816
<Navbar.Collapse id='basic-navbar-nav'>
1917
<Nav className='ms-auto'>
20-
<Nav.Link href={browseLink} className='link-dark'>Browse</Nav.Link>
21-
<Nav.Link href={requestsLink} className='link-dark'>Requests</Nav.Link>
22-
{user ? (
23-
<Nav.Link href={logOutLink} className='link-dark'>Log Out</Nav.Link>
18+
{navLinks.map((nav) => (
19+
<Nav.Link
20+
className='link-dark'
21+
href={nav.path}
22+
key={`${nav.label}-nav-link`}
23+
onClick={nav.onClick}
24+
>
25+
{nav.label}
26+
</Nav.Link>
27+
))}
28+
{userSession ? (
29+
<Nav.Link className='link-dark' onClick={auth.signOut}>Sign Out</Nav.Link>
2430
) : (
25-
<Nav.Link href={logInLink} className='link-dark'>Log In</Nav.Link>
31+
<Nav.Link className='link-dark' onClick={auth.signIn}>Sign In</Nav.Link>
2632
)}
2733
</Nav>
2834
</Navbar.Collapse>
@@ -32,19 +38,24 @@ const Header = ({ browseLink, logInLink, logo, logOutLink, requestsLink, user })
3238
}
3339

3440
Header.propTypes = {
35-
browseLink: PropTypes.string.isRequired,
41+
auth: PropTypes.shape({
42+
signIn: PropTypes.func.isRequired,
43+
signOut: PropTypes.func.isRequired,
44+
}).isRequired,
3645
logo: PropTypes.shape({
3746
src: PropTypes.string.isRequired,
3847
alt: PropTypes.string,
3948
}).isRequired,
40-
logInLink: PropTypes.string.isRequired,
41-
logOutLink: PropTypes.string.isRequired,
42-
requestsLink: PropTypes.string.isRequired,
43-
user: PropTypes.shape({}),
49+
navLinks: PropTypes.arrayOf(PropTypes.shape({
50+
label: PropTypes.string.isRequired,
51+
onClick: PropTypes.func,
52+
path: PropTypes.string,
53+
})).isRequired,
54+
userSession: PropTypes.shape({}),
4455
}
4556

4657
Header.defaultProps = {
47-
user: null,
58+
userSession: null,
4859
}
4960

5061
export default Header
Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import React from 'react'
22
import Header from './Header'
33
import logoFull from '../../assets/img/logo-full.png'
4+
import { navigationLinks } from '../../resources/args'
45

56
export default {
67
title: 'Compounds/Header',
@@ -14,28 +15,30 @@ const Template = (args) => <Header {...args} />
1415

1516
export const LoggedIn = Template.bind({})
1617
LoggedIn.args = {
17-
browseLink: '',
18-
logInLink: '',
18+
auth: {
19+
signIn: () => console.log('I am signing in!'),
20+
signOut: () => console.log('I am signing out!'),
21+
},
1922
logo: {
2023
src: logoFull,
2124
alt: 'The company logo',
2225
},
23-
logOutLink: '',
24-
requestsLink: '',
25-
user: {
26-
name: 'Aaliyah Haughton',
26+
navLinks: navigationLinks,
27+
userSession: {
28+
2729
},
2830
}
2931

3032
export const LoggedOut = Template.bind({})
3133
LoggedOut.args = {
32-
browseLink: '',
33-
logInLink: '',
34+
auth: {
35+
signIn: () => console.log('I am signing in!'),
36+
signOut: () => console.log('I am signing out!'),
37+
},
3438
logo: {
3539
src: logoFull,
3640
alt: 'The company logo',
3741
},
38-
logOutLink: '',
39-
requestsLink: '',
40-
user: null,
42+
navLinks: navigationLinks,
43+
userSession: undefined,
4144
}

src/resources/args.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,3 +201,16 @@ export const messages = [
201201
name: 'Alisha Evans',
202202
},
203203
]
204+
205+
export const navigationLinks = [
206+
{
207+
label: 'Browse',
208+
onClick: null,
209+
path: '/browse',
210+
},
211+
{
212+
label: 'Requests',
213+
onClick: null,
214+
path: '/requests',
215+
},
216+
]

0 commit comments

Comments
 (0)