Proyectos de Subversion LeadersLinked - SPA

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3746 stevensc 1
import { useState } from 'react';
2
 
3
import { useApi, useAlert } from '@shared/hooks';
4
import { getAnswers, addAnswer, editAnswer, deleteAnswer } from '@my-coach/services';
5
 
6
export function useAnswers(question, { onAddAnswer, onEditAnswer, onDeleteAnswer }) {
7
  const [answers, setAnswers] = useState([]);
8
 
9
  const { showError, showSuccess } = useAlert();
10
 
11
  const { loading } = useApi(getAnswers, {
12
    autoFetch: !!question,
13
    autoFetchArgs: [question?.link_answers],
14
    onSuccess: (data) => {
15
      setAnswers(data.items);
16
    },
17
    onError: (error) => {
18
      showError(error.message);
19
    }
20
  });
21
  const { execute: executeAddAnswer } = useApi(addAnswer, {
22
    onSuccess: ({ answer, message, total_answers }) => {
23
      setAnswers((prev) => [...prev, answer]);
24
      showSuccess(message);
25
      onAddAnswer(total_answers);
26
    },
27
    onError: ({ message }) => {
28
      showError(message);
29
    }
30
  });
31
  const { execute: executeEditAnswer } = useApi(editAnswer);
32
  const { execute: executeDeleteAnswer } = useApi(deleteAnswer);
33
 
34
  const removeAnswer = async (url) => {
35
    await executeDeleteAnswer(url)
36
      .then(({ message, ...data }) => {
37
        setAnswers((prev) => prev.filter((a) => a.link_delete !== url));
38
        showSuccess(message);
39
        onDeleteAnswer(data);
40
      })
41
      .catch((error) => {
42
        showError(error.message);
43
      });
44
  };
45
 
46
  const updateAnswer = async (url, data) => {
47
    await executeEditAnswer(url, data)
48
      .then(({ message, ...data }) => {
49
        setAnswers((prev) =>
50
          prev.map((a) => (a.link_edit === url ? { ...a, text: data.description } : a))
51
        );
52
        showSuccess(message);
53
        onEditAnswer();
54
      })
55
      .catch((error) => {
56
        showError(error.message);
57
      });
58
  };
59
 
60
  const updateComments = (uuid, total_comments) => {
61
    setAnswers((prev) => prev.map((a) => (a.uuid === uuid ? { ...a, total_comments } : a)));
62
  };
63
 
64
  return {
65
    answers,
66
    loading,
67
    addAnswer: executeAddAnswer,
68
    editAnswer: updateAnswer,
69
    deleteAnswer: removeAnswer,
70
    updateComments
71
  };
72
}