Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 2213 | Rev 2221 | 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'
2219 stevensc 6
import { logout } from '@app/redux/auth/auth.actions'
2210 stevensc 7
 
1622 stevensc 8
const useFetch = (url, defaultValue = {}) => {
707 stevensc 9
  const [data, setData] = useState(defaultValue)
1003 stevensc 10
  const [isLoading, setIsLoading] = useState(true)
2211 stevensc 11
  const dispatch = useDispatch()
707 stevensc 12
 
2210 stevensc 13
  const handleError = (response) => {
14
    const { success, data } = response.data
15
 
16
    if (!data) {
17
      return response.data
18
    }
19
 
20
    if (success === false) {
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
 
30
    return data
31
  }
32
 
33
  const getResources = (url) => {
1304 stevensc 34
    setIsLoading(true)
35
 
707 stevensc 36
    axios
1622 stevensc 37
      .get(url)
2210 stevensc 38
      .then((response) => handleError(response))
39
      .then((data) => setData(data))
2212 stevensc 40
      .catch((error) => {
2211 stevensc 41
        dispatch(addNotification({ style: 'danger', msg: error.message }))
2212 stevensc 42
 
43
        if (error.message.includes('sesión')) {
2219 stevensc 44
          dispatch(logout())
2212 stevensc 45
        }
46
      })
707 stevensc 47
      .finally(() => setIsLoading(false))
48
  }
49
 
50
  useEffect(() => {
2210 stevensc 51
    url && getResources(url)
1622 stevensc 52
  }, [url])
707 stevensc 53
 
54
  return {
55
    data,
1067 stevensc 56
    mutate: setData,
1363 stevensc 57
    isLoading,
58
    refetch: getResources
707 stevensc 59
  }
60
}
61
 
62
export default useFetch