Rev 3416 | 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, isLoading, mutate } = useFetch(postUrl)const [comments, setComments] = useState([])const dispatch = useDispatch()const getComments = (url) => {axios.get(url).then((response) => {const { data, success } = response.dataif (!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.dataif (!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 },isLoading,updateTotalShare,addComment,updateReactions,updateMyReaction}}