Advertisement
robertvari

Post component with edit

Apr 12th, 2020
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, {useState, useEffect} from 'react';
  2. import axios from 'axios';
  3.  
  4. function Post(props) {
  5.     const {id, title, body, created} = props.post_data;
  6.     const {refresh_posts} = props;
  7.  
  8.     const [edit_mode, set_edit_mode] = useState(false);
  9.  
  10.     const edit_post_action = () => {
  11.         set_edit_mode(true);
  12.     };
  13.  
  14.     const cancel_edit_action = () => {
  15.         set_edit_mode(false);
  16.     };
  17.  
  18.     const save_action = async () => {
  19.         const fields = get_fields();
  20.  
  21.         await axios({
  22.             method: "put",
  23.             url: `http://127.0.0.1:8000/api/posts/${id}/`,
  24.             data: {
  25.                 title: fields.title_field.value,
  26.                 body: fields.body_field.value,
  27.             }
  28.         });
  29.  
  30.         refresh_posts();
  31.         set_edit_mode(false);
  32.     };
  33.  
  34.     const get_fields = () => {
  35.         const post_title_field = document.getElementById(`post_title_field_${id}`);
  36.         const post_body_field = document.getElementById(`post_body_field_${id}`);
  37.  
  38.         return {
  39.             "title_field": post_title_field,
  40.             "body_field": post_body_field,
  41.         }
  42.     };
  43.  
  44.     useEffect(() => {
  45.         if(edit_mode){
  46.             const fields = get_fields();
  47.  
  48.             fields.title_field.value = title;
  49.             fields.body_field.value = body;
  50.         }
  51.     }, [edit_mode]);
  52.  
  53.     const delete_post_action = async () => {
  54.         await axios({
  55.             method: "delete",
  56.             url: `http://127.0.0.1:8000/api/posts/${id}/`
  57.         });
  58.  
  59.         refresh_posts();
  60.     };
  61.  
  62.     return (
  63.         <div className="post_card">
  64.             <div className="post_card_header">
  65.                 {edit_mode ?
  66.                     <input type="text" id={`post_title_field_${id}`}/>
  67.                     :
  68.                     <h2>{title}</h2>
  69.                 }
  70.             </div>
  71.  
  72.             <div className="post_body">
  73.                 {edit_mode ?
  74.                     <textarea name="" id={`post_body_field_${id}`} cols="30" rows="3"/>
  75.                     :
  76.                     <div>{body}</div>
  77.                 }
  78.             </div>
  79.  
  80.             <div className="post_card_footer">
  81.                 <div>{created}</div>
  82.  
  83.                 {edit_mode ?
  84.                     <div>
  85.                         <i className="fas fa-window-close" onClick={cancel_edit_action}/>
  86.                         <i className="fas fa-save" onClick={save_action}/>
  87.                     </div>
  88.                     :
  89.                     <div>
  90.                         <i className="fas fa-edit" onClick={edit_post_action}/>
  91.                         <i className="fas fa-trash-alt" onClick={delete_post_action}/>
  92.                     </div>
  93.                 }
  94.  
  95.  
  96.  
  97.  
  98.             </div>
  99.         </div>
  100.     );
  101. }
  102.  
  103. export default Post;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement