Proyectos de Subversion LeadersLinked - SPA

Rev

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