Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3546 | Rev 3555 | 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,
3547 stevensc 39
          capsule: updatedCapsule,
3546 stevensc 40
          comment: newComment
41
        } = await addCapsuleComment(capsule.link_comment_add, {
42
          comment,
43
          rating
44
        });
45
        showSuccess(message);
3547 stevensc 46
        setCapsule((prev) => ({
47
          ...prev,
48
          ...updatedCapsule,
49
          comments: [newComment, ...prev.comments]
50
        }));
3546 stevensc 51
      } catch (error) {
52
        showError(error.message);
53
      }
54
    },
55
    [capsule.link_comment_add, showError, showSuccess]
56
  );
3510 stevensc 57
 
3546 stevensc 58
  const removeComment = useCallback(
59
    async (url, uuid) => {
60
      try {
3547 stevensc 61
        const { message, capsule: updatedCapsule } = await deleteCapsuleComment(url);
3546 stevensc 62
        showSuccess(message);
63
        setCapsule((prev) => ({
64
          ...prev,
3547 stevensc 65
          ...updatedCapsule,
3546 stevensc 66
          comments: prev.comments.filter((c) => c.uuid !== uuid)
67
        }));
68
      } catch (error) {
69
        showError(error.message);
70
      }
71
    },
72
    [showError, showSuccess]
73
  );
3538 stevensc 74
 
3546 stevensc 75
  const deleteComment = useCallback(
76
    (url, uuid) => {
77
      if (!url || !uuid) {
78
        showError('Error: URL o UUID no válidos');
79
        return;
80
      }
3545 stevensc 81
 
3546 stevensc 82
      try {
83
        showAlert({
84
          message: '¿Estás seguro de querer eliminar este comentario?',
3547 stevensc 85
          onConfirm: () => removeComment(url, uuid)
3546 stevensc 86
        });
87
      } catch (error) {
88
        console.error('Error al mostrar el diálogo de confirmación:', error);
89
        showError('Error al mostrar el diálogo de confirmación');
90
      }
91
    },
92
    [showError, showSuccess]
93
  );
3538 stevensc 94
 
3481 stevensc 95
  useEffect(() => {
96
    if (data) setCapsule(data);
97
  }, [data]);
98
 
3538 stevensc 99
  return { capsule, loading, refetch, addComment, deleteComment };
3481 stevensc 100
}