Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3529 | Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3511 stevensc 1
import { useEffect, useState } from 'react';
2
 
3
import { useFetch } from './useFetch';
4
 
5
export function usePagination({ initialPage = 1, initialLimit = 10, apiUrl, initialParams = {} }) {
6
  const [page, setPage] = useState(initialPage);
7
  const [limit, setLimit] = useState(initialLimit);
8
 
9
  // Creamos un nuevo objeto de parámetros que incluye la página y el límite
10
  const currentParams = { ...initialParams, page, limit };
11
 
12
  // Usamos nuestro useFetch hook
13
  const { data, loading, error, refetch } = useFetch(apiUrl, { params: currentParams });
14
 
15
  // Opcional: Estado para el total de elementos (si la API lo devuelve en la respuesta)
16
  const [total, setTotal] = useState(0);
17
 
18
  // Efecto para actualizar el total si los datos cambian (asumiendo que la API devuelve el total en la data o en headers)
19
  // Esto dependerá de cómo tu API implemente la paginación y devuelva el total.
20
  // Ejemplo asumiendo que 'totalCount' viene en los datos:
21
  useEffect(() => {
22
    if (data) {
23
      setPage(data.current.page);
24
      setTotal(data.total.count);
25
    }
26
  }, [data]);
27
 
28
  const nextPage = () => {
29
    setPage((prevPage) => prevPage + 1);
30
  };
31
 
32
  const prevPage = () => {
33
    setPage((prevPage) => Math.max(1, prevPage - 1));
34
  };
35
 
36
  const goToPage = (newPage) => {
37
    setPage(newPage);
38
  };
39
 
40
  const setPageLimit = (newLimit) => {
41
    setLimit(newLimit);
42
    setPage(1); // Resetear a la primera página al cambiar el límite
43
  };
44
 
45
  // No necesitamos una función de "fetch" explícita aquí,
46
  // useFetch se encarga de hacer la petición cuando apiUrl o currentParams cambian.
47
 
48
  return {
49
    page,
50
    limit,
51
    data,
52
    loading,
53
    error,
54
    total, // Opcional
55
    nextPage,
56
    prevPage,
57
    goToPage,
58
    setPageLimit,
59
    refetch // Exponemos la función refetch de useFetch por si el componente la necesita
60
  };
61
}