Rev 2798 | Rev 3432 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import { useEffect, useState } from "react";import { useDispatch } from "react-redux";import { axios } from "@app/utils";import { useFetch } from "@hooks";import { addNotification } from "@app/redux/notification/notification.actions";export function usePosts(postUrl) {const { data: post, loading, mutate } = useFetch(postUrl);const [comments, setComments] = useState([]);const dispatch = useDispatch();const getComments = (url) => {axios.get(url).then((response) => {const { data, success } = response.data;if (!success) {const errorMessage =typeof data === "string" ? data : "Error interno. Intente más tarde.";dispatch(addNotification({ style: "danger", msg: errorMessage }));return;}setComments(data);});};const updateTotalShare = (value) => {mutate((prevPost) => ({...prevPost,total_share_external: value,}));};const updateReactions = (reactions) => {mutate((prevPost) => ({ ...prevPost, reactions }));};const updateMyReaction = (reaction) => {mutate((prevPost) => ({ ...prevPost, my_reaction: reaction }));};const addComment = (comment) => {const formData = new FormData();formData.append("comment", comment);axios.post(post.comments_add_url, formData).then((response) => {const { success, data } = response.data;if (!success) {const errorMessage =typeof data === "string"? data: "Error interno. Intente más tarde.";throw new Error(errorMessage);}setComments((prevComments) => [...prevComments, data]);}).catch((error) => {dispatch(addNotification({ style: "danger", msg: error.message }));});};useEffect(() => {if (post.comments_url) getComments(post.comments_url);}, [post]);return {post: { ...post, comments },loading,updateTotalShare,addComment,updateReactions,updateMyReaction,};}