Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3286 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

import { axios } from "../../utils";
import { feedActionTypes } from "./feed.types";

export const setTimelineUrl = (url) => ({
  type: feedActionTypes.SET_TIMELINE_URL,
  payload: url,
});

export const loadFeeds = () => ({
  type: feedActionTypes.LOAD_FEEDS,
});

export const loadFeedsSuccess = (feeds, currentPage, pages) => ({
  type: feedActionTypes.LOAD_FEEDS_SUCCESS,
  payload: { feeds, currentPage, pages },
});

export const addFeed = (url, feed, shareId) => {
  return async (dispatch) => {
    const form = new FormData();
    const feedFields = Object.keys(feed);

    feedFields.forEach((field) => form.append(field, feed[field]));

    const response = await axios.post(url, form);
    const { data, success } = response.data;

    if (!success) {
      const error = typeof data === "string" ? data : "Error al publicar";
      throw new Error(error);
    }

    dispatch(addFeedSuccess(data, shareId));
  };
};

export const addFeedSuccess = (feed, feedSharedId = "") => ({
  type: feedActionTypes.ADD_FEED,
  payload: { feed, feedSharedId },
});

export const deleteFeed = (url, id) => {
  return async (dispatch) => {
    const response = await axios.post(url);
    const { data, success } = response.data;

    if (!success) {
      const err =
        typeof data === "string" ? data : "Error al borrar la publicación";
      throw new Error(err);
    }

    dispatch(deleteFeedSuccess(id));
    return data;
  };
};

export const deleteFeedSuccess = (feedId) => ({
  type: feedActionTypes.DELETE_FEED,
  payload: feedId,
});

export const updateFeed = ({ feed, uuid }) => ({
  type: feedActionTypes.UPDATE_FEED,
  payload: { feed, uuid },
});

export const setCurrentPage = (page) => ({
  type: feedActionTypes.SET_CURRENT_PAGE,
  payload: page,
});

export const fetchFeeds = (url, page) => {
  return (dispatch) => {
    if (!url || url.includes("undefined")) return;

    dispatch(loadFeeds());

    axios.get(url + "?page=" + page).then((response) => {
      const { data, success } = response.data;

      if (!success) {
        throw new Error(
          "Error al obtener las publicaciones, por favor intente más tarde"
        );
      }

      const feeds = data.current.items;
      const currentPage = data.current.page;
      const pages = data.total.pages;

      dispatch(loadFeedsSuccess(feeds, currentPage, pages));
    });
  };
};

export const removeComment = ({ feedId, commentId }) => ({
  type: feedActionTypes.REMOVE_COMMENT,
  payload: { feedId, commentId },
});

export const addComment = ({ feedId, comment }) => ({
  type: feedActionTypes.ADD_COMMENT,
  payload: { feedId, comment },
});