Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 1622 | Rev 2209 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
707 stevensc 1
import { useState, useEffect } from 'react'
2
import { axios } from '../utils'
3
import { useDispatch } from 'react-redux'
4
import { addNotification } from '../redux/notification/notification.actions'
5
 
1622 stevensc 6
const useFetch = (url, defaultValue = {}) => {
707 stevensc 7
  const [data, setData] = useState(defaultValue)
1003 stevensc 8
  const [isLoading, setIsLoading] = useState(true)
707 stevensc 9
  const dispatch = useDispatch()
10
 
1363 stevensc 11
  const getResources = () => {
1121 stevensc 12
    if (!url) return
1120 stevensc 13
 
1304 stevensc 14
    setIsLoading(true)
15
 
707 stevensc 16
    axios
1622 stevensc 17
      .get(url)
758 stevensc 18
      .then(({ data }) => {
19
        if (!data.data) {
20
          setData(data)
21
          return
22
        }
707 stevensc 23
 
758 stevensc 24
        if (!data.success) {
707 stevensc 25
          const errorMessage =
26
            typeof data === 'string'
27
              ? data
28
              : Object.entries(data)
29
                  .map(([key, value]) => `${key}: ${value}`)
30
                  .join(', ')
31
          throw new Error(errorMessage)
32
        }
33
 
758 stevensc 34
        setData(data.data)
707 stevensc 35
      })
36
      .finally(() => setIsLoading(false))
37
  }
38
 
39
  useEffect(() => {
1363 stevensc 40
    getResources()
1622 stevensc 41
  }, [url])
707 stevensc 42
 
43
  return {
44
    data,
1067 stevensc 45
    mutate: setData,
1363 stevensc 46
    isLoading,
47
    refetch: getResources
707 stevensc 48
  }
49
}
50
 
51
export default useFetch