Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 2210 | Rev 2212 | 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'
2211 stevensc 2
import { useDispatch } from 'react-redux'
707 stevensc 3
 
2210 stevensc 4
import { axios } from '@app/utils'
2211 stevensc 5
import { addNotification } from '@app/redux/notification/notification.actions'
2210 stevensc 6
 
1622 stevensc 7
const useFetch = (url, defaultValue = {}) => {
707 stevensc 8
  const [data, setData] = useState(defaultValue)
1003 stevensc 9
  const [isLoading, setIsLoading] = useState(true)
2211 stevensc 10
  const dispatch = useDispatch()
707 stevensc 11
 
2210 stevensc 12
  const handleError = (response) => {
13
    const { success, data } = response.data
14
 
15
    if (!data) {
16
      return response.data
17
    }
18
 
19
    if (success === false) {
20
      const errorMessage =
21
        typeof data === 'string'
22
          ? data
23
          : Object.entries(data)
24
              .map(([key, value]) => `${key}: ${value}`)
25
              .join(', ')
26
      throw new Error(errorMessage)
27
    }
28
 
29
    return data
30
  }
31
 
32
  const getResources = (url) => {
1304 stevensc 33
    setIsLoading(true)
34
 
707 stevensc 35
    axios
1622 stevensc 36
      .get(url)
2210 stevensc 37
      .then((response) => handleError(response))
38
      .then((data) => setData(data))
2211 stevensc 39
      .catch((error) =>
40
        dispatch(addNotification({ style: 'danger', msg: error.message }))
41
      )
707 stevensc 42
      .finally(() => setIsLoading(false))
43
  }
44
 
45
  useEffect(() => {
2210 stevensc 46
    url && getResources(url)
1622 stevensc 47
  }, [url])
707 stevensc 48
 
49
  return {
50
    data,
1067 stevensc 51
    mutate: setData,
1363 stevensc 52
    isLoading,
53
    refetch: getResources
707 stevensc 54
  }
55
}
56
 
57
export default useFetch