text: import axios from 'axios';
  import { setAlert } from './alert';
  import {
    GET_POSTS,
    GET_POST,
    ADD_POST,
    DELETE_POST,
    POST_ERROR,
    UPDATE_LIKES,
    ADD_COMMENT,
    DELETE_COMMENT
  } from './types';
  
  // Get posts
  export const getPosts = () => async dispatch => {
    try {
      const res = await axios.get('/api/posts');
  
      dispatch({
        type: GET_POSTS,
        payload: res.data
      });
    } catch (err) {
      dispatch({
        type: POST_ERROR,
        payload: { msg: err.response.statusText, status: err.response.status }
      });
    }
  };
  
  // Get post
  export const getPost = id => async dispatch => {
    try {
      const res = await axios.get(`/api/posts/${id}`);
  
      dispatch({
        type: GET_POST,
        payload: res.data
      });
    } catch (err) {
      dispatch({
        type: POST_ERROR,
        payload: { msg: err.response.statusText, status: err.response.status }
      });
    }
  };
  
  // Add like
  // The id parameter is the post id, not the like id
  export const addLike = id => async dispatch => {
    try {
      // Array of likes is returned in response
      const res = await axios.put(`/api/posts/like/${id}`);
  
      dispatch({
        type: UPDATE_LIKES,
        payload: { id, likes: res.data }
      });
    } catch (err) {
      dispatch({
        type: POST_ERROR,
        payload: { msg: err.response.statusText, status: err.response.status }
      });
    }
  };
  
  // Remove like
  export const removeLike = id => async dispatch => {
    try {
      // Array of likes is returned in response
      const res = await axios.put(`/api/posts/unlike/${id}`);
  
      dispatch({
        type: UPDATE_LIKES,
        payload: { id, likes: res.data }
      });
    } catch (err) {
      dispatch({
        type: POST_ERROR,
        payload: { msg: err.response.statusText, status: err.response.status }
      });
    }
  };
  
  // Delete post
  export const deletePost = id => async dispatch => {
    try {
      await axios.delete(`/api/posts/${id}`);
  
      dispatch({
        type: DELETE_POST,
        payload: id
      });
  
      dispatch(setAlert('Post removed', 'success'));
    } catch (err) {
      dispatch({
        type: POST_ERROR,
        payload: { msg: err.response.statusText, status: err.response.status }
      });
    }
  };
  
  // Add post
  export const addPost = formData => async dispatch => {
    const config = {
      headers: {
        'Content-Type': 'application/json'
      }
    };
  
    try {
      const res = await axios.post('/api/posts', formData, config);
  
      dispatch({
        type: ADD_POST,
        // This will be the post
        payload: res.data
      });
  
      dispatch(setAlert('Post added', 'success'));
    } catch (err) {
      dispatch({
        type: POST_ERROR,
        payload: { msg: err.response.statusText, status: err.response.status }
      });
    }
  };
  
  // Add comment
  export const addComment = (postId, formData) => async dispatch => {
    const config = {
      headers: {
        'Content-Type': 'application/json'
      }
    };
  
    try {
      const res = await axios.post(
        `/api/posts/comment/${postId}`,
        formData,
        config
      );
  
      dispatch({
        type: ADD_COMMENT,
        // Array of comments for post
        payload: res.data
      });
  
      dispatch(setAlert('Comment added', 'success'));
    } catch (err) {
      dispatch({
        type: POST_ERROR,
        payload: { msg: err.response.statusText, status: err.response.status }
      });
    }
  };
  
  // Delete comment
  export const deleteComment = (postId, commentId) => async dispatch => {
    try {
      const res = await axios.delete(`/api/posts/comment/${postId}/${commentId}`);
  
      dispatch({
        type: DELETE_COMMENT,
        payload: commentId
      });
  
      dispatch(setAlert('Comment deleted', 'success'));
    } catch (err) {
      dispatch({
        type: POST_ERROR,
        payload: { msg: err.response.statusText, status: err.response.status }
      });
    }
  };
  