From 6309bc1b96ef25773a8ae16dd41ca8810f2da808 Mon Sep 17 00:00:00 2001 From: Kevin Rosales Date: Fri, 22 Aug 2025 23:48:26 -0600 Subject: [PATCH] Solucion de paginacion de datastage --- src/api/datastage.js | 10 ++++------ src/pages/Datastage.jsx | 32 +++++++++++++++++++++----------- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/api/datastage.js b/src/api/datastage.js index 06419a2..7670a8e 100644 --- a/src/api/datastage.js +++ b/src/api/datastage.js @@ -10,14 +10,12 @@ import.meta.env; import { getWithAuth, postWithAuth, patchWithAuth, deleteWithAuth } from '../fetchWithAuth'; const API_BASE = `${import.meta.env.VITE_EFC_API_URL}/datastage/datastages/`; -export async function fetchDatastages() { - const res = await getWithAuth(API_BASE); +export async function fetchDatastages(page = 1, page_size = 10) { + const url = `${API_BASE}?page=${page}&page_size=${page_size}`; + const res = await getWithAuth(url); if (!res.ok) throw new Error('Error al obtener datastages'); const data = await res.json(); - // Si la respuesta es paginada, devolver results - if (data && Array.isArray(data.results)) return data.results; - // Si la respuesta no es un array, devolver array vacío - if (!Array.isArray(data)) return []; + // Si la respuesta es paginada, devolver el objeto completo return data; } diff --git a/src/pages/Datastage.jsx b/src/pages/Datastage.jsx index 5591767..7914c58 100644 --- a/src/pages/Datastage.jsx +++ b/src/pages/Datastage.jsx @@ -116,7 +116,8 @@ function downloadDatastageFile(id, filename) { export default function Datastage() { const focusKeeperRef = useRef(null); - const [datastages, setDatastages] = useState([]); + // datastages will hold the full API response object (with .results and .count) + const [datastages, setDatastages] = useState({ results: [], count: 0 }); const [currentPage, setCurrentPage] = useState(1); const [itemsPerPage, setItemsPerPage] = useState(10); const [selected, setSelected] = useState(null); @@ -150,9 +151,17 @@ export default function Datastage() { setError(null); try { const data = await fetchDatastages(); - setDatastages(data); + // Defensive: if data is not the expected object, fallback to empty + if (data && Array.isArray(data.results)) { + setDatastages(data); + } else if (Array.isArray(data)) { + setDatastages({ results: data, count: data.length }); + } else { + setDatastages({ results: [], count: 0 }); + } } catch (e) { setError(e.message); + setDatastages({ results: [], count: 0 }); } setLoading(false); }; @@ -280,7 +289,7 @@ export default function Datastage() {

Datastage - {datastages.length} + {datastages.count}

Gestiona y visualiza la información de Datastage.

@@ -349,7 +358,7 @@ export default function Datastage() { - {datastages.slice((currentPage - 1) * itemsPerPage, currentPage * itemsPerPage).map(item => ( + {(Array.isArray(datastages.results) ? datastages.results : []).map(item => ( {item.id} @@ -431,10 +440,10 @@ export default function Datastage() { {/* Paginación */} - {datastages.length > itemsPerPage && ( + {datastages.count > itemsPerPage && (
- Mostrando {((currentPage - 1) * itemsPerPage) + 1} a {Math.min(currentPage * itemsPerPage, datastages.length)} de {datastages.length} registros + Mostrando {((currentPage - 1) * itemsPerPage) + 1} a {Math.min(currentPage * itemsPerPage, datastages.count)} de {datastages.count} registros
- {Array.from({ length: Math.ceil(datastages.length / itemsPerPage) }, (_, i) => i + 1).map(pageNum => ( + {Array.from({ length: Math.ceil(datastages.count / itemsPerPage) }, (_, i) => i + 1).map(pageNum => ( ))}