Rev 3545 | Rev 3547 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import { useCallback, useEffect, useState } from 'react';
import { useAlert, useAlertModal, useFetch } from '@shared/hooks';
import { addCapsuleComment, deleteCapsuleComment } from '@microlearning/services';
const DEFAULT_STATE = {
uuid: '',
name: '',
description: '',
image: '',
link_comments: '',
link_comment_add: '',
link_slides: '',
total_comments: '',
total_rating: '0',
progress: 0,
completed: 0,
total_slides: null,
link_first_slide: '',
type_first_slide: '',
order: null,
added_on: '',
updated_on: ''
};
export function useCapsule(uuid) {
const [capsule, setCapsule] = useState(DEFAULT_STATE);
const { showSuccess, showError } = useAlert();
const { showAlert } = useAlertModal();
const { data, loading, refetch } = useFetch(`/microlearning/capsules/${uuid}`);
const addComment = useCallback(
async ({ comment, rating }) => {
try {
const {
message,
capsule,
comment: newComment
} = await addCapsuleComment(capsule.link_comment_add, {
comment,
rating
});
showSuccess(message);
setCapsule((prev) => ({ ...prev, ...capsule, comments: [newComment, ...prev.comments] }));
} catch (error) {
showError(error.message);
}
},
[capsule.link_comment_add, showError, showSuccess]
);
const removeComment = useCallback(
async (url, uuid) => {
try {
const { message, capsule } = await deleteCapsuleComment(url);
showSuccess(message);
setCapsule((prev) => ({
...prev,
...capsule,
comments: prev.comments.filter((c) => c.uuid !== uuid)
}));
} catch (error) {
showError(error.message);
}
},
[showError, showSuccess]
);
const deleteComment = useCallback(
(url, uuid) => {
if (!url || !uuid) {
showError('Error: URL o UUID no válidos');
return;
}
try {
showAlert({
message: '¿Estás seguro de querer eliminar este comentario?',
onConfirm: () => {
removeComment(url, uuid);
}
});
} catch (error) {
console.error('Error al mostrar el diálogo de confirmación:', error);
showError('Error al mostrar el diálogo de confirmación');
}
},
[showError, showSuccess]
);
useEffect(() => {
if (data) setCapsule(data);
}, [data]);
return { capsule, loading, refetch, addComment, deleteComment };
}