Skip to content
This repository was archived by the owner on Oct 1, 2024. It is now read-only.

Commit 180e493

Browse files
author
george
committed
update props to live in component
1 parent 54758fe commit 180e493

File tree

6 files changed

+29
-155
lines changed

6 files changed

+29
-155
lines changed

app/components/SideNav/SideNav.js

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,29 @@
11
import React, { useState, useEffect } from "react"
2-
import PropTypes from "prop-types"
32
import classNames from "classnames"
43
import throttle from "lodash/throttle"
54
import { NavLink } from "react-router-dom"
65
import Menu from "react-feather/dist/icons/menu"
76
import ChevronRight from "react-feather/dist/icons/chevron-right"
87

8+
import { NAV_DATA } from "app/components/SideNav/navData"
99
import { Accordions } from "undernet"
1010
import "./styles.scss"
1111

1212
const pkg = require("projectRoot/package.json")
1313
const MENU_COLLAPSE_WIDTH = 1199
1414

15-
export default function SideNav(props) {
15+
export default function SideNav() {
16+
// set up effects and state
17+
1618
const getWindowInnerWidth = () => {
1719
return window.innerWidth
1820
}
1921

20-
const [menuIsOpen, setMenuIsOpen] = useState(getWindowInnerWidth() > MENU_COLLAPSE_WIDTH)
22+
const isLargerThanCollapseWidth = getWindowInnerWidth() > MENU_COLLAPSE_WIDTH
23+
const [menuIsOpen, setMenuIsOpen] = useState(isLargerThanCollapseWidth)
2124

2225
let handleMenuVisibility = () => {
23-
if (getWindowInnerWidth() > MENU_COLLAPSE_WIDTH) {
26+
if (isLargerThanCollapseWidth) {
2427
setMenuIsOpen(true)
2528
}
2629
}
@@ -30,7 +33,7 @@ export default function SideNav(props) {
3033
useEffect(() => {
3134
Accordions.start()
3235
window.addEventListener("resize", handleMenuVisibility)
33-
setMenuIsOpen(getWindowInnerWidth() > MENU_COLLAPSE_WIDTH)
36+
setMenuIsOpen(isLargerThanCollapseWidth)
3437

3538
return () => {
3639
window.removeEventListener("resize", handleMenuVisibility)
@@ -43,7 +46,7 @@ export default function SideNav(props) {
4346
Accordions.start()
4447
}, [menuIsOpen])
4548

46-
// handlers
49+
// set up handlers
4750

4851
const handleCollapseClick = () => {
4952
if (getWindowInnerWidth() <= MENU_COLLAPSE_WIDTH) {
@@ -80,6 +83,8 @@ export default function SideNav(props) {
8083
return isActive
8184
}
8285

86+
// render content
87+
8388
const renderAccordionChildLink = item => {
8489
return (
8590
<li key={item.name} role="none">
@@ -119,12 +124,12 @@ export default function SideNav(props) {
119124
}
120125

121126
const renderNavAccordion = () => {
122-
return props.navItems.map((section, i) => {
127+
return NAV_DATA.map((section, i) => {
123128
return (
124129
<div
125130
data-visible={accordionIsActive(section.links) ? "true" : "false"}
126131
data-accordion-row={`nav-acc-content${i}`}
127-
className={classNames("accordion-row", props.navListClasses)}
132+
className="accordion-row xsmall-12 columns has-no-padding"
128133
key={section.links[0].url}
129134
>
130135
{renderAccordionRow(section, i)}
@@ -158,18 +163,3 @@ export default function SideNav(props) {
158163
</div>
159164
)
160165
}
161-
162-
SideNav.propTypes = {
163-
navItems: PropTypes.arrayOf(
164-
PropTypes.shape({
165-
header: PropTypes.string,
166-
links: PropTypes.arrayOf(
167-
PropTypes.shape({
168-
name: PropTypes.string,
169-
url: PropTypes.string,
170-
})
171-
),
172-
})
173-
).isRequired,
174-
navListClasses: PropTypes.string,
175-
}

app/components/SideNav/__tests__/SideNav.spec.js

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,26 @@ import { Accordions } from "undernet"
66
jest.mock("react-feather/dist/icons/chevron-right", () => global.simpleMock("ChevronRight"))
77
jest.mock("react-feather/dist/icons/menu", () => global.simpleMock("Menu"))
88
jest.mock("projectRoot/package.json", () => ({ version: "9.9.9" }))
9+
jest.mock("app/components/SideNav/navData", () => ({
10+
NAV_DATA: [
11+
{
12+
header: "Test Header",
13+
links: [{ name: "Test 1", url: "#" }],
14+
},
15+
],
16+
}))
917

1018
Accordions.start = jest.fn()
1119
Accordions.stop = jest.fn()
1220

1321
const MENU_COLLAPSE_WIDTH = 1199
1422
const MENU_EXPAND_WIDTH = MENU_COLLAPSE_WIDTH + 1
1523
const DEFAULT_WIDTH = 1024
16-
const navItems = [
17-
{
18-
header: "Test Header",
19-
links: [{ name: "Test 1", url: "#" }],
20-
},
21-
]
2224

2325
function mountComponent() {
2426
return mount(
2527
<Router>
26-
<SideNav navItems={navItems} />
28+
<SideNav />
2729
</Router>
2830
)
2931
}

app/components/SideNav/__tests__/__snapshots__/SideNav.spec.js.snap

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ exports[`<SideNav /> #handleMenuToggleClick toggles menu when button is clicked
3838
9.9.9
3939
</p>
4040
<div
41-
className="accordion-row"
41+
className="accordion-row xsmall-12 columns has-no-padding"
4242
data-accordion-row="nav-acc-content0"
4343
data-visible="false"
4444
key="#"
@@ -139,7 +139,7 @@ exports[`<SideNav /> #handleMenuVisibility hides menu at or below 1199 1`] = `
139139
9.9.9
140140
</p>
141141
<div
142-
className="accordion-row"
142+
className="accordion-row xsmall-12 columns has-no-padding"
143143
data-accordion-row="nav-acc-content0"
144144
data-visible="false"
145145
key="#"
@@ -240,7 +240,7 @@ exports[`<SideNav /> #handleMenuVisibility shows menu above 1199 1`] = `
240240
9.9.9
241241
</p>
242242
<div
243-
className="accordion-row"
243+
className="accordion-row xsmall-12 columns has-no-padding"
244244
data-accordion-row="nav-acc-content0"
245245
data-visible="false"
246246
key="#"
@@ -304,21 +304,7 @@ exports[`<SideNav /> #handleMenuVisibility shows menu above 1199 1`] = `
304304
`;
305305

306306
exports[`<SideNav /> #render renders 1`] = `
307-
<SideNav
308-
navItems={
309-
Array [
310-
Object {
311-
"header": "Test Header",
312-
"links": Array [
313-
Object {
314-
"name": "Test 1",
315-
"url": "#",
316-
},
317-
],
318-
},
319-
]
320-
}
321-
>
307+
<SideNav>
322308
<div
323309
className="xsmall-12 xlarge-2 columns has-no-padding"
324310
id="side-nav"
@@ -360,7 +346,7 @@ exports[`<SideNav /> #render renders 1`] = `
360346
9.9.9
361347
</p>
362348
<div
363-
className="accordion-row"
349+
className="accordion-row xsmall-12 columns has-no-padding"
364350
data-accordion-row="nav-acc-content0"
365351
data-visible="false"
366352
key="#"

app/pages/Docs/Docs.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,13 @@ import React from "react"
22

33
import SideNav from "app/components/SideNav"
44
import DocsRoutes from "app/components/DocsRoutes"
5-
import { NAV_DATA } from "app/pages/Docs/navData"
65
import "./styles.scss"
76

87
export default function Docs() {
98
return (
109
<div id="docs" className="fluid grid has-no-padding">
1110
<div className="row">
12-
<SideNav navListClasses="xsmall-12 columns has-no-padding" navItems={NAV_DATA} />
11+
<SideNav />
1312
<div className="xsmall-12 xlarge-10 columns has-padding-3">
1413
<DocsRoutes />
1514
</div>

app/pages/Docs/__tests__/__snapshots__/Docs.spec.js.snap

Lines changed: 1 addition & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -32,110 +32,7 @@ exports[`<Docs /> renders 1`] = `
3232
<div
3333
className="row"
3434
>
35-
<SideNav
36-
navItems={
37-
Array [
38-
Object {
39-
"header": "Overview",
40-
"links": Array [
41-
Object {
42-
"name": "Introduction",
43-
"url": "/docs/overview/introduction",
44-
},
45-
Object {
46-
"name": "Download",
47-
"url": "/docs/overview/download",
48-
},
49-
Object {
50-
"name": "Branding",
51-
"url": "/docs/overview/branding",
52-
},
53-
Object {
54-
"name": "JavaScript",
55-
"url": "/docs/overview/javascript",
56-
},
57-
],
58-
},
59-
Object {
60-
"header": "Layout",
61-
"links": Array [
62-
Object {
63-
"name": "Flex Grid",
64-
"url": "/docs/layout/grid",
65-
},
66-
Object {
67-
"name": "Alignment",
68-
"url": "/docs/layout/alignment",
69-
},
70-
Object {
71-
"name": "Offset / Order",
72-
"url": "/docs/layout/offset-order",
73-
},
74-
Object {
75-
"name": "Spacing",
76-
"url": "/docs/layout/spacing",
77-
},
78-
],
79-
},
80-
Object {
81-
"header": "Elements",
82-
"links": Array [
83-
Object {
84-
"name": "Buttons",
85-
"url": "/docs/elements/buttons",
86-
},
87-
Object {
88-
"name": "Forms",
89-
"url": "/docs/elements/forms",
90-
},
91-
Object {
92-
"name": "Typography",
93-
"url": "/docs/elements/typography",
94-
},
95-
],
96-
},
97-
Object {
98-
"header": "Components",
99-
"links": Array [
100-
Object {
101-
"name": "Accordions",
102-
"url": "/docs/components/accordions",
103-
},
104-
Object {
105-
"name": "Dropdowns",
106-
"url": "/docs/components/dropdowns",
107-
},
108-
Object {
109-
"name": "Modals",
110-
"url": "/docs/components/modals",
111-
},
112-
Object {
113-
"name": "Tooltips",
114-
"url": "/docs/components/tooltips",
115-
},
116-
],
117-
},
118-
Object {
119-
"header": "Utilities",
120-
"links": Array [
121-
Object {
122-
"name": "Color",
123-
"url": "/docs/utilities/color",
124-
},
125-
Object {
126-
"name": "Display",
127-
"url": "/docs/utilities/display",
128-
},
129-
Object {
130-
"name": "Text",
131-
"url": "/docs/utilities/text",
132-
},
133-
],
134-
},
135-
]
136-
}
137-
navListClasses="xsmall-12 columns has-no-padding"
138-
/>
35+
<SideNav />
13936
<div
14037
className="xsmall-12 xlarge-10 columns has-padding-3"
14138
>

0 commit comments

Comments
 (0)