Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3745 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3746 stevensc 1
import React from 'react';
2
import { useNavigate, useParams } from 'react-router-dom';
3741 stevensc 3
 
3746 stevensc 4
import { useAlertModal, useModal } from '@shared/hooks';
5
import { useAnswers, useQuestion } from '@my-coach/hooks';
6
 
7
import { List, Spinner } from '@shared/components';
8
import { AnswerCard, AnswerForm, QuestionCard } from '@my-coach/components';
9
import PageHeader from '@components/common/page-header';
10
 
3741 stevensc 11
export function MyCoachViewPage() {
3746 stevensc 12
  const { uuid } = useParams();
3741 stevensc 13
  const navigate = useNavigate();
14
 
3746 stevensc 15
  const { showModal, closeModal } = useModal();
16
  const { showAlert, closeAlert } = useAlertModal();
3741 stevensc 17
 
3746 stevensc 18
  const {
19
    question,
20
    loading,
21
    deleteQuestion,
22
    updateTotalAnswers,
23
    updateTotalComments,
24
    updateTotalReactions
25
  } = useQuestion(uuid, {
26
    onDeleteQuestion: () => {
27
      closeAlert();
28
      navigate('/my-coach');
29
    }
30
  });
3741 stevensc 31
 
3746 stevensc 32
  const {
33
    answers,
34
    loading: answersLoading,
35
    addAnswer,
36
    editAnswer,
37
    deleteAnswer,
38
    updateComments
39
  } = useAnswers(question, {
40
    onAddAnswer: (total_answers) => {
41
      updateTotalAnswers(total_answers);
42
      closeModal();
43
    },
44
    onEditAnswer: () => {
45
      closeModal();
46
    },
47
    onDeleteAnswer: ({ total_answers, total_comments, total_reactions }) => {
48
      updateTotalAnswers(total_answers);
49
      updateTotalComments(total_comments);
50
      updateTotalReactions(total_reactions);
51
      closeAlert();
52
    }
53
  });
3741 stevensc 54
 
3746 stevensc 55
  const handleDeleteQuestion = (url) => {
56
    showAlert({
57
      title: 'Eliminar pregunta',
58
      message: '¿Estás seguro de querer eliminar esta pregunta?',
59
      onConfirm: () => deleteQuestion(url)
60
    });
3741 stevensc 61
  };
62
 
3746 stevensc 63
  const handleDeleteAnswer = (url) => {
64
    showAlert({
65
      title: 'Eliminar respuesta',
66
      message: '¿Estás seguro de querer eliminar esta respuesta?',
67
      onConfirm: () => deleteAnswer(url)
3741 stevensc 68
    });
69
  };
70
 
3746 stevensc 71
  const handleAddAnswer = (addUrl) => {
72
    showModal('Agregar respuesta', <AnswerForm onSubmit={(answer) => addAnswer(addUrl, answer)} />);
3741 stevensc 73
  };
74
 
3746 stevensc 75
  const handleEditAnswer = (editUrl, description) => {
76
    showModal(
77
      'Editar respuesta',
78
      <AnswerForm
79
        defaultValues={{ description }}
80
        onSubmit={(answer) => editAnswer(editUrl, answer)}
81
      />
82
    );
3741 stevensc 83
  };
84
 
3746 stevensc 85
  if (loading || !question) {
86
    return <Spinner />;
87
  }
3741 stevensc 88
 
89
  return (
3745 stevensc 90
    <>
3746 stevensc 91
      <PageHeader title={question.title} goBack />
3745 stevensc 92
      <QuestionCard
93
        question={question}
3746 stevensc 94
        onDelete={question.link_delete ? () => handleDeleteQuestion(question.link_delete) : null}
95
        onReply={
96
          question.link_answers_add ? () => handleAddAnswer(question.link_answers_add) : null
97
        }
3745 stevensc 98
      />
3746 stevensc 99
      {answersLoading ? (
100
        <Spinner />
101
      ) : (
102
        <List
103
          items={answers}
104
          emptyMessage='No hay respuestas'
105
          keyExtractor={(item) => item.uuid}
106
          renderItem={(answer) => (
107
            <AnswerCard
108
              answer={answer}
109
              onEdit={
110
                answer.link_edit ? () => handleEditAnswer(answer.link_edit, answer.text) : null
111
              }
112
              onDelete={answer.link_delete ? () => handleDeleteAnswer(answer.link_delete) : null}
113
              onUpdateComments={(uuid, data) => {
114
                updateComments(uuid, data.total_comments_answer);
115
                updateTotalComments(data.total_comments_question);
116
              }}
117
            />
118
          )}
3745 stevensc 119
        />
3746 stevensc 120
      )}
3745 stevensc 121
    </>
3741 stevensc 122
  );
123
}