|
|
|
const ToDo = props => (
|
|
|
|
<tr>
|
|
|
|
<td>
|
|
|
|
<label>{props.id}</label>
|
|
|
|
</td>
|
|
|
|
<td>
|
|
|
|
<input />
|
|
|
|
</td>
|
|
|
|
<td>
|
|
|
|
<label>{props.createdAt.toTimeString()}</label>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
);
|
|
|
|
|
|
|
|
class ToDoList extends React.Component {
|
|
|
|
constructor() {
|
|
|
|
super();
|
|
|
|
const date = new Date();
|
|
|
|
const toDoCounter = 1;
|
|
|
|
this.state = {
|
|
|
|
list: [
|
|
|
|
{
|
|
|
|
id: toDoCounter,
|
|
|
|
createdAt: date,
|
|
|
|
},
|
|
|
|
],
|
|
|
|
toDoCounter: toDoCounter,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
sortByEarliest() {
|
|
|
|
const sortedList = this.state.list.sort((a, b) => {
|
|
|
|
return a.createdAt - b.createdAt;
|
|
|
|
});
|
|
|
|
this.setState({
|
|
|
|
list: [...sortedList],
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
sortByLatest() {
|
|
|
|
const sortedList = this.state.list.sort((a, b) => {
|
|
|
|
return b.createdAt - a.createdAt;
|
|
|
|
});
|
|
|
|
this.setState({
|
|
|
|
list: [...sortedList],
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
addToEnd() {
|
|
|
|
const date = new Date();
|
|
|
|
const nextId = this.state.toDoCounter + 1;
|
|
|
|
const newList = [
|
|
|
|
...this.state.list,
|
|
|
|
{id: nextId, createdAt: date},
|
|
|
|
];
|
|
|
|
this.setState({
|
|
|
|
list: newList,
|
|
|
|
toDoCounter: nextId,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
addToStart() {
|
|
|
|
const date = new Date();
|
|
|
|
const nextId = this.state.toDoCounter + 1;
|
|
|
|
const newList = [
|
|
|
|
{id: nextId, createdAt: date},
|
|
|
|
...this.state.list,
|
|
|
|
];
|
|
|
|
this.setState({
|
|
|
|
list: newList,
|
|
|
|
toDoCounter: nextId,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
render() {
|
|
|
|
return (
|
|
|
|
<div>
|
|
|
|
<code>key=id</code>
|
|
|
|
<br />
|
|
|
|
<button onClick={this.addToStart.bind(this)}>
|
|
|
|
Add New to Start
|
|
|
|
</button>
|
|
|
|
<button onClick={this.addToEnd.bind(this)}>
|
|
|
|
Add New to End
|
|
|
|
</button>
|
|
|
|
<button onClick={this.sortByEarliest.bind(this)}>
|
|
|
|
Sort by Earliest
|
|
|
|
</button>
|
|
|
|
<button onClick={this.sortByLatest.bind(this)}>
|
|
|
|
Sort by Latest
|
|
|
|
</button>
|
|
|
|
<table>
|
|
|
|
<tr>
|
|
|
|
<th>ID</th>
|
|
|
|
<th />
|
|
|
|
<th>created at</th>
|
|
|
|
</tr>
|
|
|
|
{this.state.list.map((todo, index) => (
|
|
|
|
<ToDo key={todo.id} {...todo} />
|
|
|
|
))}
|
|
|
|
</table>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ReactDOM.render(
|
|
|
|
<ToDoList />,
|
|
|
|
document.getElementById('root')
|
|
|
|
);
|