Guest User

Untitled

a guest
May 11th, 2020
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, { createContext, useState, useEffect } from "react"
  2. import axios from "axios"
  3. import { toast } from "react-toastify"
  4. import "react-toastify/dist/ReactToastify.css"
  5.  
  6. export const PostContext = createContext()
  7. export const PostProvider = (props) => {
  8.     const [posts, setPosts] = useState([])
  9.  
  10.     useEffect(() => {
  11.         fetchPost()
  12.     }, [])
  13.  
  14.     const fetchPost = async () => {
  15.         var response = await axios.get(
  16.             "https://jsonplaceholder.typicode.com/posts?_limit=10"
  17.         )
  18.         console.log("Fetch post success")
  19.         setPosts(response.data)
  20.     }
  21.  
  22.     const deletePost = async (id) => {
  23.         setPosts((prevPost) => [...prevPost.filter((post) => post.id !== id)])
  24.         var response = await axios.delete(
  25.             "https://jsonplaceholder.typicode.com/posts/" + id
  26.         )
  27.         console.log(response.data)
  28.         notify("Post Deleted")
  29.     }
  30.  
  31.     const editPost = async (post) => {
  32.         try {
  33.             let newData = [...posts]
  34.             newData = newData.map((item) =>
  35.                 item.id === post.id ? { ...post } : item
  36.             )
  37.             setPosts(newData)
  38.             var response = await axios.patch(
  39.                 "https://jsonplaceholder.typicode.com/posts/" + post.id,
  40.                 post
  41.             )
  42.             console.log(response.data)
  43.             notify("Post Edited")
  44.         } catch (error) {
  45.             notify(error.toString())
  46.         }
  47.     }
  48.  
  49.     const deleteAll = () => {
  50.         setPosts([])
  51.     }
  52.  
  53.     const notify = (message) => toast(message)
  54.  
  55.     return (
  56.         <PostContext.Provider value={{ posts, deletePost, editPost, deleteAll }}>
  57.             {props.children}
  58.         </PostContext.Provider>
  59.     )
  60. }
Add Comment
Please, Sign In to add comment