Proyectos de Subversion LeadersLinked - SPA

Rev

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