Proyectos de Subversion LeadersLinked - SPA

Rev

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

import { useEffect, useState } from 'react';

import { useApi, useDebouncedSearchParam, usePagination } from '@shared/hooks';
import { addQuestion, editQuestion, deleteQuestion } from '@my-coach/services';

export function useQuestions() {
  const [questions, setQuestions] = useState([]);

  const { data, loading, hasMore, loadMore, applyFilters } = usePagination('/my-coach/questions');

  const { data: addedQuestion, execute: executeAddQuestion } = useApi(addQuestion);
  const { data: updatedQuestion, execute: executeEditQuestion } = useApi(editQuestion);
  const { data: deletedQuestion, execute: executeDeleteQuestion } = useApi(deleteQuestion);

  const {
    inputValue: searchTerm,
    setInputValue: setSearchTerm,
    debouncedValue: debouncedSearchTerm
  } = useDebouncedSearchParam('search');

  const {
    inputValue: searchCategory,
    setInputValue: setSearchCategory,
    debouncedValue: debouncedSearchCategory
  } = useDebouncedSearchParam('category_id');

  const clearFilters = () => {
    setSearchTerm('');
    setSearchCategory('');
  };

  useEffect(() => {
    applyFilters({
      search: debouncedSearchTerm,
      category_id: debouncedSearchCategory
    });
  }, [debouncedSearchTerm, debouncedSearchCategory]);

  useEffect(() => {
    if (data) {
      setQuestions(data);
    }
  }, [data]);

  useEffect(() => {
    if (addedQuestion) {
      setQuestions([...questions, addedQuestion]);
    }
  }, [addedQuestion]);

  useEffect(() => {
    if (updatedQuestion) {
      setQuestions(
        questions.map((question) =>
          question.id === updatedQuestion.id ? updatedQuestion : question
        )
      );
    }
  }, [updatedQuestion]);

  useEffect(() => {
    if (deletedQuestion) {
      setQuestions(questions.filter((question) => question.id !== deletedQuestion.id));
    }
  }, [deletedQuestion]);

  return {
    questions,
    loading,
    hasMore,
    search: searchTerm,
    category: searchCategory,
    loadMore,
    applyFilters,
    searchQuestion: setSearchTerm,
    searchCategory: setSearchCategory,
    clearFilters,
    addQuestion: executeAddQuestion,
    editQuestion: executeEditQuestion,
    deleteQuestion: executeDeleteQuestion
  };
}