Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3545 | Rev 3547 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3546 stevensc 1
import { useCallback, useEffect, useState } from 'react';
3481 stevensc 2
 
3538 stevensc 3
import { useAlert, useAlertModal, useFetch } from '@shared/hooks';
4
import { addCapsuleComment, deleteCapsuleComment } from '@microlearning/services';
3481 stevensc 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
 
3510 stevensc 29
  const { showSuccess, showError } = useAlert();
3538 stevensc 30
  const { showAlert } = useAlertModal();
3510 stevensc 31
 
3527 stevensc 32
  const { data, loading, refetch } = useFetch(`/microlearning/capsules/${uuid}`);
3481 stevensc 33
 
3546 stevensc 34
  const addComment = useCallback(
35
    async ({ comment, rating }) => {
36
      try {
37
        const {
38
          message,
39
          capsule,
40
          comment: newComment
41
        } = await addCapsuleComment(capsule.link_comment_add, {
42
          comment,
43
          rating
44
        });
45
        showSuccess(message);
46
        setCapsule((prev) => ({ ...prev, ...capsule, comments: [newComment, ...prev.comments] }));
47
      } catch (error) {
48
        showError(error.message);
49
      }
50
    },
51
    [capsule.link_comment_add, showError, showSuccess]
52
  );
3510 stevensc 53
 
3546 stevensc 54
  const removeComment = useCallback(
55
    async (url, uuid) => {
56
      try {
57
        const { message, capsule } = await deleteCapsuleComment(url);
58
        showSuccess(message);
59
        setCapsule((prev) => ({
60
          ...prev,
61
          ...capsule,
62
          comments: prev.comments.filter((c) => c.uuid !== uuid)
63
        }));
64
      } catch (error) {
65
        showError(error.message);
66
      }
67
    },
68
    [showError, showSuccess]
69
  );
3538 stevensc 70
 
3546 stevensc 71
  const deleteComment = useCallback(
72
    (url, uuid) => {
73
      if (!url || !uuid) {
74
        showError('Error: URL o UUID no válidos');
75
        return;
76
      }
3545 stevensc 77
 
3546 stevensc 78
      try {
79
        showAlert({
80
          message: '¿Estás seguro de querer eliminar este comentario?',
81
          onConfirm: () => {
82
            removeComment(url, uuid);
83
          }
84
        });
85
      } catch (error) {
86
        console.error('Error al mostrar el diálogo de confirmación:', error);
87
        showError('Error al mostrar el diálogo de confirmación');
88
      }
89
    },
90
    [showError, showSuccess]
91
  );
3538 stevensc 92
 
3481 stevensc 93
  useEffect(() => {
94
    if (data) setCapsule(data);
95
  }, [data]);
96
 
3538 stevensc 97
  return { capsule, loading, refetch, addComment, deleteComment };
3481 stevensc 98
}