remote-todo.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. import React, { Component } from "react";
  2. import { connect } from "react-redux";
  3. import {
  4. changeInputValue,
  5. createPost,
  6. getPosts,
  7. resetPostForm,
  8. removePost,
  9. showEditForm,
  10. cancelUpdate,
  11. update,
  12. handleChangeEditForm
  13. } from "../actions/remote-todo";
  14. import Input from "../components/input";
  15. import Button from "../components/button/button";
  16. import Loder from "../components/HOC/loader";
  17. import Modal from "../components/modal";
  18. export class RemoteTodo extends Component {
  19. state = { open: false };
  20. close = () => this.setState({ open: false });
  21. open = () => this.setState({ open: true });
  22. componentDidMount() {
  23. this.props.getPosts();
  24. }
  25. showEditModalForm = id => {
  26. this.props.showEditForm(id);
  27. this.open();
  28. };
  29. udatePostHandler = () => {
  30. const { sendDataObject, update } = this.props;
  31. update(sendDataObject);
  32. this.close();
  33. };
  34. cancelUpdatePostHandler = () => {
  35. const { cancelUpdate } = this.props;
  36. cancelUpdate();
  37. this.close();
  38. };
  39. render() {
  40. const {
  41. changeInputValue,
  42. myForm,
  43. createPost,
  44. postList,
  45. resetPostForm,
  46. sendDataObject,
  47. removePost,
  48. isFetching,
  49. editForm,
  50. editFormField,
  51. handleChangeEditForm
  52. } = this.props;
  53. return (
  54. <div
  55. style={{
  56. width: "100%",
  57. padding: 50,
  58. display: "flex"
  59. }}>
  60. <div
  61. style={{
  62. width: "20%",
  63. display: "flex",
  64. flexDirection: "column"
  65. }}>
  66. {myForm.map(el => {
  67. return (
  68. <Input
  69. key={el.id}
  70. id={el.id}
  71. value={el.value}
  72. checked={el.checked}
  73. type={el.type}
  74. name={el.name}
  75. label={el.label}
  76. onChange={changeInputValue}
  77. />
  78. );
  79. })}
  80. <div>
  81. <Loder flag={isFetching}>
  82. <Button text="Create Post" onClick={createPost.bind(null, sendDataObject)} />
  83. </Loder>
  84. <Button text="RESET" onClick={resetPostForm} />
  85. </div>
  86. </div>
  87. <div className="list">
  88. {postList.map(el => (
  89. <div key={el.id} className="list__item">
  90. <Button text="x" className="list__rm-btn" onClick={removePost.bind(null, el.id)} />
  91. {el.editable && (
  92. <Button
  93. text="edit"
  94. className="list__edit-btn"
  95. onClick={this.showEditModalForm.bind(null, el.id)}
  96. />
  97. )}
  98. <h3>
  99. {el.firstName} {el.lastName}
  100. </h3>
  101. <p>{el.age}</p>
  102. </div>
  103. ))}
  104. </div>
  105. {editForm && (
  106. <div>
  107. <div
  108. style={{
  109. width: "100%",
  110. display: "flex",
  111. flexDirection: "column"
  112. }}
  113. />
  114. </div>
  115. )}
  116. <Modal open={this.state.open} close={this.close}>
  117. <div>
  118. {editFormField.map(el => {
  119. return (
  120. <Input
  121. key={el.id}
  122. id={el.id}
  123. value={el.value}
  124. checked={el.checked}
  125. type={el.type}
  126. name={el.name}
  127. label={el.label}
  128. onChange={handleChangeEditForm}
  129. />
  130. );
  131. })}
  132. <div>
  133. <Loder flag={isFetching}>
  134. <Button text="Update Post" onClick={this.udatePostHandler} />
  135. </Loder>
  136. <Button text="CANCEL" onClick={this.cancelUpdatePostHandler} />
  137. </div>
  138. </div>
  139. </Modal>
  140. </div>
  141. );
  142. }
  143. }
  144. const mapStateToProps = state => {
  145. return {
  146. myForm: state.remote_todo.myForm,
  147. postList: state.remote_todo.postList,
  148. sendDataObject: state.remote_todo.sendDataObject,
  149. isFetching: state.remote_todo.isFetching,
  150. editForm: state.remote_todo.editForm,
  151. editFormField: state.remote_todo.editFormField
  152. };
  153. };
  154. export default connect(
  155. mapStateToProps,
  156. {
  157. changeInputValue,
  158. createPost,
  159. getPosts,
  160. resetPostForm,
  161. removePost,
  162. showEditForm,
  163. cancelUpdate,
  164. handleChangeEditForm,
  165. update
  166. }
  167. )(RemoteTodo);