Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 994 | Rev 1067 | 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
 
6
const useFetch = (url = '', defaultValue = null) => {
7
  const [data, setData] = useState(defaultValue)
1003 stevensc 8
  const [isLoading, setIsLoading] = useState(true)
707 stevensc 9
  const dispatch = useDispatch()
10
 
11
  const getResources = (url = '') => {
12
    axios
13
      .get(url)
758 stevensc 14
      .then(({ data }) => {
15
        if (!data.data) {
16
          setData(data)
17
          return
18
        }
707 stevensc 19
 
758 stevensc 20
        if (!data.success) {
707 stevensc 21
          const errorMessage =
22
            typeof data === 'string'
23
              ? data
24
              : Object.entries(data)
25
                  .map(([key, value]) => `${key}: ${value}`)
26
                  .join(', ')
27
          throw new Error(errorMessage)
28
        }
29
 
758 stevensc 30
        setData(data.data)
707 stevensc 31
      })
32
      .catch((err) => {
33
        dispatch(addNotification({ style: 'danger', msg: err.message }))
34
      })
35
      .finally(() => setIsLoading(false))
36
  }
37
 
38
  useEffect(() => {
39
    getResources(url)
994 stevensc 40
  }, [url])
707 stevensc 41
 
42
  return {
43
    data,
44
    isLoading
45
  }
46
}
47
 
48
export default useFetch