AutorÃa | Ultima modificación | Ver Log |
import { useState } from 'react';
import { useApi, useAlert } from '@shared/hooks';
import { getAnswers, addAnswer, editAnswer, deleteAnswer } from '@my-coach/services';
export function useAnswers(question, { onAddAnswer, onEditAnswer, onDeleteAnswer }) {
const [answers, setAnswers] = useState([]);
const { showError, showSuccess } = useAlert();
const { loading } = useApi(getAnswers, {
autoFetch: !!question,
autoFetchArgs: [question?.link_answers],
onSuccess: (data) => {
setAnswers(data.items);
},
onError: (error) => {
showError(error.message);
}
});
const { execute: executeAddAnswer } = useApi(addAnswer, {
onSuccess: ({ answer, message, total_answers }) => {
setAnswers((prev) => [...prev, answer]);
showSuccess(message);
onAddAnswer(total_answers);
},
onError: ({ message }) => {
showError(message);
}
});
const { execute: executeEditAnswer } = useApi(editAnswer);
const { execute: executeDeleteAnswer } = useApi(deleteAnswer);
const removeAnswer = async (url) => {
await executeDeleteAnswer(url)
.then(({ message, ...data }) => {
setAnswers((prev) => prev.filter((a) => a.link_delete !== url));
showSuccess(message);
onDeleteAnswer(data);
})
.catch((error) => {
showError(error.message);
});
};
const updateAnswer = async (url, data) => {
await executeEditAnswer(url, data)
.then(({ message, ...data }) => {
setAnswers((prev) =>
prev.map((a) => (a.link_edit === url ? { ...a, text: data.description } : a))
);
showSuccess(message);
onEditAnswer();
})
.catch((error) => {
showError(error.message);
});
};
const updateComments = (uuid, total_comments) => {
setAnswers((prev) => prev.map((a) => (a.uuid === uuid ? { ...a, total_comments } : a)));
};
return {
answers,
loading,
addAnswer: executeAddAnswer,
editAnswer: updateAnswer,
deleteAnswer: removeAnswer,
updateComments
};
}