Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3496 | Rev 3658 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3496 stevensc 1
import { useState, useCallback } from 'react';
3481 stevensc 2
 
3575 stevensc 3
const defaultOptions = {
4
  onSuccess: () => {},
5
  onError: () => {}
6
};
7
 
8
export function useApi(apiFunction, options = defaultOptions) {
9
  const { onSuccess, onError } = { ...defaultOptions, ...options };
10
 
3481 stevensc 11
  const [data, setData] = useState(null);
12
  const [error, setError] = useState(null);
13
  const [loading, setLoading] = useState(false);
14
 
15
  const execute = useCallback(
16
    async (...args) => {
17
      setLoading(true);
18
      setData(null);
19
      setError(null);
20
      try {
21
        const result = await apiFunction(...args);
22
        setData(result);
3575 stevensc 23
        onSuccess(result);
3481 stevensc 24
        return result;
25
      } catch (err) {
3496 stevensc 26
        console.error('Error on api: ', err);
27
        setError(err.message);
3575 stevensc 28
        onError(err);
3481 stevensc 29
      } finally {
30
        setLoading(false);
31
      }
32
    },
3575 stevensc 33
    [apiFunction, onSuccess, onError]
3481 stevensc 34
  );
35
 
36
  return { loading, data, error, execute };
37
}