Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.70 KB | None | 0 0
  1. import React, { Component } from "react";
  2. import { generateRandomId } from "./utils";
  3. import tasks from "./tasks.json";
  4. import { getTasks } from "./task-svc";
  5.  
  6. const apiDummyGet = () =>
  7. new Promise(resolve => {
  8. setTimeout(() => {
  9. resolve({ tasks });
  10. }, 3000);
  11. });
  12.  
  13. class Loading extends Component {
  14. render() {
  15. return (
  16. <tr>
  17. <td colspan="2">Loading Tasks...</td>
  18. </tr>
  19. );
  20. }
  21. }
  22.  
  23. class TodoListItem extends Component {
  24. render() {
  25. return (
  26. <tr>
  27. <td>{this.props.task.taskName}</td>
  28. <td>
  29. <input type="checkbox" defaultChecked={this.props.task.finished} />
  30. </td>
  31. </tr>
  32. );
  33. }
  34. }
  35.  
  36. function NewTaskForm({ addTask }) {
  37. const onSubmit = evt => {
  38. evt.preventDefault();
  39. const eventNameInput = evt.target.elements.eventName;
  40. addTask(eventNameInput.value);
  41. eventNameInput.value = "";
  42. };
  43. return (
  44. <form onSubmit={onSubmit}>
  45. <input type="text" name="eventName" placeholder="Write Task Name" />
  46. <button type="submit">Add</button>
  47. </form>
  48. );
  49. }
  50.  
  51. export default class TodoList extends Component {
  52. constructor(props) {
  53. super();
  54. this.state = { tasks, loading: true };
  55. this.addTask = this.addTask.bind(this);
  56. }
  57.  
  58. addTask(name) {
  59. const oldTaskNames = this.state.tasks;
  60. const newTask = {
  61. taskName: name,
  62. finished: false,
  63. id: generateRandomId()
  64. };
  65. const newTaskNames = [...oldTaskNames, newTask];
  66. this.setState({ tasks: newTaskNames });
  67. }
  68.  
  69. componentDidMount() {
  70. apiDummyGet().then(data => {
  71. this.setState({
  72. loading: false,
  73. data
  74. });
  75. });
  76. }
  77.  
  78. render() {
  79. const taskItems = this.state.tasks.map(task => (
  80. <TodoListItem key={task.id} task={task} />
  81. ));
  82.  
  83. if (this.state.loading) {
  84. return (
  85. <div className="container">
  86. <h1>
  87. Get It Done! <br />
  88. <small>For the truly industrious</small>
  89. </h1>
  90.  
  91. <table>
  92. <thead>
  93. <tr>
  94. <td>Task</td>
  95. <td>Done?</td>
  96. </tr>
  97. </thead>
  98. <tbody>
  99. <Loading />
  100. </tbody>
  101. </table>
  102.  
  103. <hr />
  104. <NewTaskForm addTask={this.addTask} />
  105. </div>
  106. );
  107. }
  108.  
  109. return (
  110. <div className="container">
  111. <h1>
  112. Get It Done! <br />
  113. <small>For the truly industrious</small>
  114. </h1>
  115.  
  116. <table>
  117. <thead>
  118. <tr>
  119. <td>Task</td>
  120. <td>Done?</td>
  121. </tr>
  122. </thead>
  123. <tbody>{taskItems}</tbody>
  124. </table>
  125.  
  126. <hr />
  127. <NewTaskForm addTask={this.addTask} />
  128. </div>
  129. );
  130. }
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement