Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
3481 stevensc 1
import { useEffect, useState } from 'react';
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
 
3510 stevensc 34
  const addComment = async ({ comment, rating }) => {
35
    try {
3538 stevensc 36
      const {
37
        message,
38
        capsule,
39
        comment: newComment
40
      } = await addCapsuleComment(capsule.link_comment_add, {
41
        comment,
42
        rating
43
      });
3510 stevensc 44
      showSuccess(message);
3538 stevensc 45
      setCapsule((prev) => ({ ...prev, ...capsule, comments: [newComment, ...prev.comments] }));
3510 stevensc 46
    } catch (error) {
47
      showError(error.message);
48
    }
49
  };
50
 
3538 stevensc 51
  const removeComment = async (url, uuid) => {
52
    try {
53
      const { message, capsule } = await deleteCapsuleComment(url);
54
      showSuccess(message);
55
      setCapsule((prev) => ({
56
        ...prev,
57
        ...capsule,
58
        comments: prev.comments.filter((c) => c.uuid !== uuid)
59
      }));
60
    } catch (error) {
61
      showError(error.message);
62
    }
63
  };
64
 
65
  const deleteComment = (url, uuid) => {
66
    showAlert({
67
      message: '¿Estás seguro de querer eliminar este comentario?',
3542 stevensc 68
      onConfirm: () => {
69
        removeComment(url, uuid);
70
      }
3538 stevensc 71
    });
72
  };
73
 
3481 stevensc 74
  useEffect(() => {
75
    if (data) setCapsule(data);
76
  }, [data]);
77
 
3538 stevensc 78
  return { capsule, loading, refetch, addComment, deleteComment };
3481 stevensc 79
}