Skip to content

Commit 153a732

Browse files
committed
Extract components into a js object
1 parent 5c69a9e commit 153a732

File tree

3 files changed

+39
-27
lines changed

3 files changed

+39
-27
lines changed

views/components/Main.jsx

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22

33
import React, { Component } from 'react';
44
import NavBar from './NavBar';
5-
import Announcements from './Announcements/Container';
6-
import Multimedia from './Multimedia/Container';
5+
import ComponentList from './Shared/componentList';
76
import Storage from './../../controllers/storage';
87

98
export default class Main extends Component {
@@ -16,6 +15,7 @@ export default class Main extends Component {
1615

1716
this.observeDatabase('list');
1817
this.switchView = this.switchView.bind(this);
18+
this.renderContainer = this.renderContainer.bind(this);
1919
}
2020

2121
observeDatabase(pathToWatch) {
@@ -28,22 +28,23 @@ export default class Main extends Component {
2828
this.setState({ windowToRender: view });
2929
}
3030

31+
renderContainer(containerName) {
32+
const Container = ComponentList[containerName].container;
33+
return <Container list={this.state.list} />;
34+
}
35+
3136
render() {
3237
return (
3338
<div>
3439
<div id="aSide">
35-
<NavBar switchView={this.switchView} windowToRender={this.state.windowToRender} />
40+
<NavBar
41+
switchView={this.switchView}
42+
windowToRender={this.state.windowToRender}
43+
componentList={ComponentList}
44+
/>
3645
</div>
3746
<div id="content">
38-
{(() => {
39-
switch (this.state.windowToRender) {
40-
case 'announcements': return <Announcements list={this.state.list} />;
41-
case 'multimedia': return <Multimedia list={this.state.list} />;
42-
case 'forum': return <Announcements list={this.state.list} />;
43-
default: return <Announcements list={this.state.list} />;
44-
}
45-
})()}
46-
47+
{ this.renderContainer(this.state.windowToRender) }
4748
</div>
4849
</div>
4950
);

views/components/NavBar.jsx

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,30 +14,21 @@ export default class NavBar extends Component {
1414
}
1515

1616
render() {
17-
const navToRender = [{
18-
name: 'announcements',
19-
icon: 'announcement'
20-
}, {
21-
name: 'multimedia',
22-
icon: 'video_library'
23-
}, {
24-
name: 'forum',
25-
icon: 'forum'
26-
}];
2717
const self = this;
18+
const compList = this.props.componentList;
2819
return (
2920
<div className={styles.navBar}>
3021
<ul>
31-
{navToRender.map((navElement) =>
32-
<li key={navElement.name}>
22+
{Object.keys(compList).map((name) =>
23+
<li key={name}>
3324
<button
34-
className={`${styles.navButton} ${this.checkIsActive(navElement.name)}`}
25+
className={`${styles.navButton} ${this.checkIsActive(name)}`}
3526
onClick={function onClick() {
36-
self.handleClick(navElement.name);
27+
self.handleClick(name);
3728
}}
3829
>
3930
<i className="material-icons">
40-
{navElement.icon}
31+
{compList[name].icon}
4132
</i>
4233
</button>
4334
</li>
@@ -49,6 +40,7 @@ export default class NavBar extends Component {
4940
}
5041

5142
NavBar.propTypes = {
43+
componentList: PropTypes.object.isRequired,
5244
windowToRender: PropTypes.string.isRequired,
5345
switchView: PropTypes.func.isRequired
5446
};
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import Announcements from '../Announcements/Container';
2+
import Multimedia from '../Multimedia/Container';
3+
4+
const componentList = {
5+
announcements: {
6+
container: Announcements,
7+
icon: 'announcement'
8+
},
9+
multimedia: {
10+
container: Multimedia,
11+
icon: 'video_library'
12+
},
13+
forum: {
14+
container: Announcements,
15+
icon: 'forum'
16+
}
17+
};
18+
19+
export default componentList;

0 commit comments

Comments
 (0)