Proyectos de Subversion LeadersLinked - SPA

Rev

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