Proyectos de Subversion LeadersLinked - SPA

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3416 stevensc 1
import { useState, useCallback, useEffect } from "react";
2
 
3
export function useApi(
4
  apiFunction,
5
  args = {
6
    autoFetch: false,
7
    config: undefined,
8
  }
9
) {
10
  const [data, setData] = useState(null);
11
  const [error, setError] = useState(null);
12
  const [loading, setLoading] = useState(false);
13
 
14
  const execute = useCallback(
15
    async (...args) => {
16
      setLoading(true);
17
      setData(null);
18
      setError(null);
19
      try {
20
        const result = await apiFunction(...args);
21
        setData(result);
22
        return result;
23
      } catch (err) {
24
        setError(err);
25
        throw err;
26
      } finally {
27
        setLoading(false);
28
      }
29
    },
30
    [apiFunction]
31
  );
32
 
33
  useEffect(() => {
34
    if (args?.autoFetch) {
35
      execute(args.config);
36
    }
37
    // eslint-disable-next-line react-hooks/exhaustive-deps
38
  }, [args, execute]); // Dependencias para autoFetch
39
 
40
  return { loading, data, error, execute };
41
}