Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3665 | 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 { useFetch } from '@hooks';
import { addComment, deleteComment } from '../services';
import { addNotification } from '@store/notification/notification.actions';

export function useKnowledge(uuid) {
  const [comments, setComments] = useState([]);
  const [knowledge, setKnowledge] = useState({
    category: '',
    title: '',
    description: '',
    link: null,
    image: '',
    attachment: '',
    reaction: '',
    routeComments: '',
    routeCommentAdd: '',
    routeSaveReaction: '',
    routeDeleteReaction: ''
  });
  const dispatch = useDispatch();

  const { data: knowledgeData, isLoading: knowledgeLoading } = useFetch(
    uuid ? `/knowledge-area/view/${uuid}` : ''
  );
  const { data: commentsData, isLoading: commentsLoading } = useFetch(knowledge.routeComments);

  const handleAddComment = async (comment) => {
    try {
      const newComment = await addComment(knowledge.routeCommentAdd, comment);
      setComments((prevMessages) => [...prevMessages, newComment]);
    } catch (error) {
      dispatch(addNotification({ style: 'danger', msg: error.message }));
    }
  };

  const handleDeleteComment = async (id, url) => {
    try {
      const message = await deleteComment(url);
      const newComments = comments.filter((comment) => comment.unique !== id);
      setComments(newComments);

      dispatch(addNotification({ style: 'success', msg: message }));
    } catch (error) {
      dispatch(addNotification({ style: 'danger', msg: error.message }));
    }
  };

  useEffect(() => {
    if (knowledgeData) setKnowledge(knowledgeData);
  }, [knowledgeData]);

  useEffect(() => {
    if (commentsData) setComments(commentsData);
  }, [commentsData]);

  return {
    knowledge,
    comments,
    knowledgeLoading,
    commentsLoading,
    addComment: handleAddComment,
    deleteComment: handleDeleteComment
  };
}