-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathindex.js
86 lines (68 loc) · 2.43 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import React from 'react';
import {render} from 'react-dom';
import PropTypes from 'prop-types';
import Story from './src/Story';
import StoriesTotal from './src/StoriesTotal';
import allActiveTasks from './src/allActiveTasks';
import content from './content';
function storiesState(count) {
return new Array(count).fill({active: true, displayTasks: false});
}
class Container extends React.Component {
constructor(props) {
super(props);
this.state = {stories: storiesState(this.props.stories.length)};
}
render() {
const tasks = allActiveTasks(this.props.stories, this.state.stories);
return (
<div className='container'>
<h1>Sample user stories</h1>
{this.stories()}
<StoriesTotal allTasks={tasks}/>
<ul className='footer text-right list-unstyled'>
<li>June 2016</li>
<li>
Ivan Krechetov <<a href='mailto:[email protected]'>[email protected]</a>>
</li>
</ul>
</div>
);
}
stories() {
return this.props.stories.map(({narrative, tasks}, index) => {
const onChangeActivity = () => {
this.toggleStoryActivity(index);
},
onToggleTasks = () => {
this.toggleStoryTasks(index);
},
state = this.state.stories[index];
return <Story
key={`k${index}`}
narrative={narrative}
tasks={tasks}
active={state.active}
displayTasks={state.displayTasks}
onChangeActivity={onChangeActivity}
onToggleTasks={onToggleTasks}/>;
});
}
toggleStoryActivity(index) {
const stories = this.state.stories.slice();
stories[index] = Object.assign({}, stories[index], {active: !stories[index].active});
this.setState({stories});
}
toggleStoryTasks(index) {
const stories = this.state.stories.slice();
stories[index] = Object.assign(
{},
stories[index],
{displayTasks: !stories[index].displayTasks}
);
this.setState({stories});
}
}
Container.propTypes = {stories: PropTypes.array.isRequired};
/* global global */
render(<Container stories={content}/>, global.document.getElementById('root'));