Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 1619 | Rev 1622 | 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
 
1619 stevensc 6
const useFetch = (url, defaultValue = {}, params = {}) => {
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
1619 stevensc 17
      .get(url, params)
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
      .catch((err) => {
37
        dispatch(addNotification({ style: 'danger', msg: err.message }))
38
      })
39
      .finally(() => setIsLoading(false))
40
  }
41
 
42
  useEffect(() => {
1363 stevensc 43
    getResources()
1621 stevensc 44
  }, [url, params])
707 stevensc 45
 
46
  return {
47
    data,
1067 stevensc 48
    mutate: setData,
1363 stevensc 49
    isLoading,
50
    refetch: getResources
707 stevensc 51
  }
52
}
53
 
54
export default useFetch