Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3719 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3741 stevensc 1
import { useEffect, useState } from 'react';
3719 stevensc 2
 
3
import { useAlert, useAlertModal, useApi } from '@shared/hooks';
4
import { addCapsuleComment, deleteCapsuleComment, getCapsule } from '@microlearning/services';
5
 
6
const DEFAULT_STATE = {
7
  uuid: '',
8
  name: '',
9
  description: '',
10
  image: '',
11
  link_comments: '',
12
  link_comment_add: '',
13
  link_slides: '',
14
  total_comments: '',
15
  total_rating: '0',
16
  progress: 0,
17
  completed: 0,
18
  total_slides: null,
19
  link_first_slide: '',
20
  type_first_slide: '',
21
  order: null,
22
  added_on: '',
23
  updated_on: ''
24
};
25
 
26
export function useCapsule(uuid) {
27
  const [capsule, setCapsule] = useState(DEFAULT_STATE);
28
  const [deletedUrl, setDeletedUrl] = useState(null);
29
 
30
  const { showSuccess, showError } = useAlert();
31
  const { showAlert, closeAlert } = useAlertModal();
32
 
33
  const { loading, execute: fetchCapsule } = useApi(getCapsule, {
34
    autoFetch: true,
35
    autoFetchArgs: [uuid],
36
    onSuccess: (data) => {
37
      setCapsule(data);
38
    },
39
    onError: (error) => {
40
      showError(error.message);
41
    }
42
  });
43
 
44
  const { execute: addComment } = useApi(addCapsuleComment, {
45
    onSuccess: ({ message, capsule: updatedCapsule, comment: newComment }) => {
46
      setCapsule((prev) => ({
47
        ...prev,
48
        ...updatedCapsule,
49
        comments: [newComment, ...prev.comments]
50
      }));
51
      showSuccess(message);
52
    },
53
    onError: (error) => {
54
      showError(error.message);
55
    }
56
  });
57
 
3741 stevensc 58
  const { data: deleteCommentData, execute: executeDeleteComment } = useApi(deleteCapsuleComment, {
3719 stevensc 59
    onError: (error) => {
60
      showError(error.message);
61
    }
62
  });
63
 
64
  const handleAddComment = (comment) => {
65
    addComment(capsule.link_comment_add, comment);
66
  };
67
 
68
  const removeComment = (url) => {
69
    setDeletedUrl(url);
70
    showAlert({
71
      message: '¿Estás seguro de querer eliminar este comentario?',
3741 stevensc 72
      onConfirm: () => executeDeleteComment(url)
3719 stevensc 73
    });
74
  };
75
 
3741 stevensc 76
  useEffect(() => {
77
    if (deleteCommentData) {
78
      setCapsule((prev) => ({
79
        ...prev,
80
        ...deleteCommentData.capsule,
81
        comments: prev.comments.filter((c) => c.link_delete !== deletedUrl)
82
      }));
83
      showSuccess(deleteCommentData.message);
84
      setDeletedUrl(null);
85
      closeAlert();
86
    }
87
  }, [deleteCommentData]);
88
 
3719 stevensc 89
  return { capsule, loading, fetchCapsule, addComment: handleAddComment, removeComment };
90
}