Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
3719 stevensc 1
import { useState } from 'react';
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
 
58
  const { execute: deleteComment } = useApi(deleteCapsuleComment, {
59
    onSuccess: ({ message, capsule: updatedCapsule }) => {
60
      setCapsule((prev) => ({
61
        ...prev,
62
        ...updatedCapsule,
63
        comments: prev.comments.filter((c) => c.link_delete !== deletedUrl)
64
      }));
65
      showSuccess(message);
66
      setDeletedUrl(null);
67
      closeAlert();
68
    },
69
    onError: (error) => {
70
      showError(error.message);
71
    }
72
  });
73
 
74
  const handleAddComment = (comment) => {
75
    addComment(capsule.link_comment_add, comment);
76
  };
77
 
78
  const removeComment = (url) => {
79
    setDeletedUrl(url);
80
    showAlert({
81
      message: '¿Estás seguro de querer eliminar este comentario?',
82
      onConfirm: () => deleteComment(url)
83
    });
84
  };
85
 
86
  return { capsule, loading, fetchCapsule, addComment: handleAddComment, removeComment };
87
}