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};}