Proyectos de Subversion LeadersLinked - SPA

Rev

Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

import React from 'react';

import { useAlertModal, useModal } from '@shared/hooks';
import { useCategories, useQuestions } from '@my-coach/hooks';
import { parseHelperToSelect } from '@shared/utils';

import {
  FilterSelect,
  FiltersRow,
  PageHeader,
  SearchBar,
  Spinner,
  Button,
  Grid
} from '@shared/components';
import { QuestionCard, QuestionForm } from '@my-coach/components';

export function MyCoachPage() {
  const {
    questions,
    loading,
    hasMore,
    search,
    category,
    loadMore,
    searchQuestion,
    searchCategory,
    clearFilters,
    editQuestion,
    deleteQuestion,
    addQuestion
  } = useQuestions();

  const { categories, loading: categoriesLoading } = useCategories();

  const { showModal, closeModal } = useModal();
  const { showAlert, closeAlert } = useAlertModal();

  const handleAddQuestion = () => {
    showModal(
      'Agregar pregunta',
      <QuestionForm
        categories={categories}
        onSubmit={(data) => {
          addQuestion(data);
          closeModal();
        }}
      />
    );
  };

  const handleEditQuestion = async (question) => {
    showModal(
      'Editar pregunta',
      <QuestionForm
        question={question}
        categories={categories}
        onSubmit={(data) => {
          editQuestion(question.uuid, data);
          closeModal();
        }}
      />
    );
  };

  const handleDeleteQuestion = (question) => {
    showAlert({
      title: 'Eliminar pregunta',
      message: '¿Estás seguro de querer eliminar esta pregunta?',
      onConfirm: () => {
        deleteQuestion(question.link_delete);
        closeAlert();
      }
    });
  };

  if (categoriesLoading || loading || !categories || !questions) {
    return <Spinner />;
  }

  return (
    <>
      <PageHeader title='Mi Coach' labelAdd='Agregar pregunta' onAdd={handleAddQuestion} />

      <FiltersRow>
        <FilterSelect
          options={parseHelperToSelect(categories)}
          value={category}
          onChange={searchCategory}
          placeholder='Filtrar por categoría'
        />
        <SearchBar onChange={searchQuestion} value={search} />
        <Button onClick={clearFilters}>Limpiar filtros</Button>
      </FiltersRow>

      <Grid
        items={questions}
        emptyMessage='No hay preguntas para mostrar'
        keyExtractor={(question) => question.uuid}
        renderItem={(question) => (
          <QuestionCard
            question={question}
            onEdit={handleEditQuestion}
            onDelete={handleDeleteQuestion}
          />
        )}
        renderFooter={() => (hasMore ? <Button onClick={loadMore}>Cargar más</Button> : null)}
      />
    </>
  );
}