You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
2.2 KiB
110 lines
2.2 KiB
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 = {
|
|
todoCounter: todoCounter,
|
|
list: [
|
|
{
|
|
id: todoCounter,
|
|
createdAt: date,
|
|
},
|
|
],
|
|
};
|
|
}
|
|
|
|
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=index</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={index} {...todo} />
|
|
))}
|
|
</table>
|
|
</div>
|
|
);
|
|
}
|
|
}
|
|
|
|
ReactDOM.render(
|
|
<ToDoList />,
|
|
document.getElementById('root')
|
|
);
|
|
|