achmadzainulkarim

workshop-reactjs

Aug 20th, 2022 (edited)
423
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.26 KB | None | 0 0
  1. ------------App----------------------------
  2. import React, { Component } from "react";
  3. import TodoInput from "./components/TodoInput";
  4. import TodoList from "./components/TodoList";
  5.  
  6. export default class App extends Component {
  7. state={
  8. data:[
  9. {id:1,nama:'paijo'},
  10. {id:2,nama:'paimen'},
  11. ],
  12. activeItem:{
  13. nama:"",
  14. complated:false
  15. },
  16. editItem:false
  17. }
  18. handleChange=(e)=>{
  19. let {name,value}=e.target;
  20.  
  21. if(e.target.type==="checkbox"){
  22. value=e.target.checked;
  23. }
  24.  
  25. const activeItem={...this.state.activeItem, [name]:value};
  26. this.setState({activeItem});
  27. }
  28. handleSubmit=(item)=>{
  29. console.log('item',item)
  30. console.log(this.state.activeItem)
  31. }
  32. handleEdit = (item) => {
  33. console.log(item)
  34. this.setState({ activeItem: item, editItem: true });
  35. };
  36. handleDelete = (item) => {
  37. alert("Delete :: " + JSON.stringify(item));
  38. };
  39. render() {
  40. return (
  41. <div className="container">
  42. <h1 className="text-uppercase text-center my-2">Todo App</h1>
  43. <div className="row">
  44. <div className="col-8 col-md-6 mx-auto mt-2">
  45. <TodoInput
  46. activeItem={this.state.activeItem}
  47. editItem={this.state.editItem}
  48. handleChange={this.handleChange}
  49. handleSubmit={this.handleSubmit}
  50. />
  51. <TodoList
  52. data={this.state.data}
  53. handleEdit={this.handleEdit}
  54. handleDelete={this.handleDelete}
  55. />
  56. </div>
  57. </div>
  58. </div>
  59. );
  60. }
  61. }
  62.  
  63. -------------------TodoList------------------
  64. import React, { Component } from "react";
  65. import TodoItem from "./TodoItem";
  66.  
  67. export default class TodoList extends Component {
  68. render() {
  69. const {data, handleEdit, handleDelete}=this.props;
  70. return (
  71. <ul className="list-group my-2">
  72. {data.map((item)=>{
  73. return (
  74. <TodoItem
  75. items={item}
  76. handleEdit={handleEdit}
  77. handleDelete={handleDelete}
  78. />
  79. )
  80. })}
  81. </ul>
  82. );
  83. }
  84. }
  85.  
  86. --------------------TodoItem------------------
  87. import React, { Component } from "react";
  88.  
  89. export default class TodoItem extends Component {
  90. render() {
  91. const {items, handleEdit, handleDelete}=this.props;
  92. return (
  93. <li key={items.id}
  94. className="list-group-item d-flex justify-content-between align-items-center">
  95. <span className="todo-title mr-2">{items.nama}</span>
  96. <span>
  97. <button
  98. className="btn btn-secondary mr-2"
  99. onClick={() => handleEdit(items)}
  100. >
  101. Edit
  102. </button>
  103. <button className="btn btn-danger" onClick={() => handleDelete(items)}>
  104. Delete
  105. </button>
  106. </span>
  107. </li>
  108. );
  109. }
  110. }
  111.  
  112. ---------------------TodoInput----------------------
  113. import React, { Component } from "react";
  114.  
  115. export default class TodoInput extends Component {
  116. render() {
  117. const {activeItem, editItem, handleChange, handleSubmit}=this.props
  118. return (
  119. <div className="card card-body">
  120. <form action="">
  121. <div className="form-group">
  122. <label>Title</label>
  123. <input
  124. type="text"
  125. name="title"
  126. className="form-control text-capitalize"
  127. placeholder="add todo item"
  128. value={activeItem.nama}
  129. onChange={handleChange}
  130. />
  131. </div>
  132. <div className="form-group form-check">
  133. <input
  134. type="checkbox"
  135. name="completed"
  136. className="form-check-input"
  137. value={activeItem.complated}
  138. onChange={handleChange}
  139. />
  140. <label className="form-check-label">Completed</label>
  141. </div>
  142. <button
  143. type="submit"
  144. className={
  145. editItem ? "btn btn-success mt-3" : "btn btn-primary mt-3"
  146. }
  147. onClick={() => handleSubmit(activeItem)}
  148. >
  149. {editItem ? "Edit" : "Add"}
  150. </button>
  151. </form>
  152. </div>
  153. );
  154. }
  155. }
Advertisement
Add Comment
Please, Sign In to add comment