Rev 3741 | AutorÃa | Comparar con el anterior | Ultima modificación | Ver Log |
import { useEffect, useState } from 'react';import { useAlert, 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 { showSuccess, showError } = useAlert();const { execute: executeAddQuestion } = useApi(addQuestion, {onSuccess: ({ question, message }) => {setQuestions((prev) => [...prev, question]);showSuccess(message);},onError: ({ message }) => {showError(message);}});const { execute: executeEditQuestion } = useApi(editQuestion, {onSuccess: ({ question, message }) => {setQuestions((prev) => prev.map((q) => (q.uuid === question.uuid ? question : q)));showSuccess(message);},onError: ({ message }) => {showError(message);}});const { execute: executeDeleteQuestion } = useApi(deleteQuestion, {onSuccess: ({ question, message }) => {setQuestions((prev) => prev.filter((q) => q.uuid !== question.uuid));showSuccess(message);},onError: ({ message }) => {showError(message);}});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]);return {questions,loading,hasMore,search: searchTerm,category: searchCategory,loadMore,applyFilters,searchQuestion: setSearchTerm,searchCategory: setSearchCategory,clearFilters,addQuestion: executeAddQuestion,editQuestion: executeEditQuestion,deleteQuestion: executeDeleteQuestion};}