Advertisement
Guest User

Untitled

a guest
Oct 14th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React from 'react';
  2. import './Todo.css'
  3.  
  4. class Todo extends React.Component {
  5.   state = {
  6.     todos: [
  7.         { id: 1, text: ' react', done: true },
  8.         { id: 2, text: 'build an react app', done: false },
  9.         { id: 3, text: 'modify', done: true },
  10.         { id: 4, text: 'test', done: false },
  11.     ],
  12.     text: '',
  13.     filter: ''
  14.   };
  15.  
  16.   onChangeCheck(id) {
  17.     return () => {
  18.       this.setState({
  19.         todos: this.state.todos.map(item => {
  20.           return item.id === id ? { id: item.id, text: item.text, done: !item.done } : item;
  21.         })
  22.       });
  23.     }
  24.   }
  25.  
  26.  
  27.  
  28. clearTodo = () => {
  29.   this.setState({
  30.     todos: this.state.todos.filter(item => !item.done)
  31.   })
  32. }
  33.  
  34. todoRender() {
  35.   let filtredTodos = this.state.todos.filter(item => {
  36.     return item.text.toLowerCase().search(
  37.       this.state.filter.toLowerCase()) !== -1;
  38.   });
  39.   return filtredTodos.map(item => {
  40.     return (
  41.       <li key={item.id}>
  42.         <input type="checkbox" checked={item.done} onChange={this.onChangeCheck(item.id)} />
  43.         <span className={`done-${item.done}`}> {item.text} </span>
  44.         [<a href="#" onClick={this.deleteTask(item.id)}> Delete me! </a>]
  45.       </li>
  46.     )
  47.   })
  48. }
  49.  
  50. deleteTask(id) {
  51.   return () => {
  52.     this.setState({
  53.       todos: this.state.todos.filter(item => item.id !== id)
  54.     })
  55.   }
  56. }
  57.  
  58. addTodo = (e) => {
  59.   e.preventDefault();
  60.   var items = [
  61.     ...this.state.todos,
  62.     {text: this.state.text, id: Date.now(), done: false}
  63.   ];
  64.   var txt = '';
  65.   this.setState({todos: items, text: txt});
  66. }
  67.  
  68.  
  69.   render() {
  70.     return (
  71.       <div className="Todo">
  72.         <h2>Todo</h2>
  73.         <div>
  74.           <input type="text" placeholder="filter tasks" onChange={ (e) => {
  75.             this.setState({filter: e.target.value})
  76.           }
  77.           }/>
  78.           <br />
  79.           <span>{this.state.todos.filter(item => !item.done).length} remaining </span>
  80.         </div>
  81.         <ul>
  82.           {this.todoRender()}
  83.         </ul>
  84.  
  85.         <form onSubmit={this.addTodo}>
  86.           <input type="text" onChange = {(e) => {
  87.             this.setState({text: e.target.value})
  88.           }} />
  89.           <button type="submit">Add</button>
  90.         </form>
  91.         <a href="#" onClick={this.clearTodo}> Clean </a>
  92.       </div>
  93.     );
  94.   }
  95.  
  96. }
  97.  
  98. export default Todo;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement