Rev 3416 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import { useState, useEffect } from 'react'import { useDispatch } from 'react-redux'import { axios } from '@utils'import { asyncLogout } from '@store/auth/auth.actions'import { addNotification } from '@store/notification/notification.actions'export function useFetch(url, defaultValue = {}) {const [data, setData] = useState(defaultValue)const [isLoading, setIsLoading] = useState(true)const dispatch = useDispatch()const handleError = (response) => {const { success, data } = response.dataif (!data) {return response.data}if (!success) {const errorMessage =typeof data === 'string'? data: Object.entries(data).map(([key, value]) => `${key}: ${value}`).join(', ')throw new Error(errorMessage)}return data}const getResources = (url) => {if (!url) returnsetIsLoading(true)axios.get(url).then((response) => handleError(response)).then((data) => setData(data)).catch((error) => {dispatch(addNotification({ style: 'danger', msg: error.message }))if (error.message.includes('sesión')) dispatch(asyncLogout())}).finally(() => setIsLoading(false))}const refetch = () => getResources(url)const mutate = (data) => setData(data)useEffect(() => {getResources(url)}, [url])return {data,mutate,isLoading,refetch}}