From 4b5f0f8d77856488fbec95c8d9bd0619a89899de Mon Sep 17 00:00:00 2001 From: Administrator Date: Fri, 10 Jul 2026 14:34:59 -0500 Subject: [PATCH] =?UTF-8?q?A=C3=B1adir=20frontend/src/components/Indicador?= =?UTF-8?q?Actualizacion.jsx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/IndicadorActualizacion.jsx | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 frontend/src/components/IndicadorActualizacion.jsx diff --git a/frontend/src/components/IndicadorActualizacion.jsx b/frontend/src/components/IndicadorActualizacion.jsx new file mode 100644 index 0000000..6da6483 --- /dev/null +++ b/frontend/src/components/IndicadorActualizacion.jsx @@ -0,0 +1,97 @@ +// src/components/IndicadorActualizacion.jsx +// Indicador (arriba-derecha) con la hora de la última actualización + botón de +// recarga. Al pulsar: re-lee las bases para la vista actual y recachea el resto. +import { useState, useEffect, useCallback } from "react"; +import { api } from "../lib/api"; +import { getVistaActual, emitirRefresco } from "../lib/vistaActual"; + +function formatearHora(iso) { + if (!iso) return "—"; + try { + const d = new Date(iso); + return d.toLocaleString("es-PE", { + day: "2-digit", month: "2-digit", + hour: "2-digit", minute: "2-digit", + }); + } catch { + return "—"; + } +} + +export default function IndicadorActualizacion() { + const [hora, setHora] = useState(null); + const [cargando, setCargando] = useState(false); + + const consultar = useCallback(async () => { + try { + const r = await api.ultimaActualizacion(); + setHora(r?.hora || null); + } catch { /* silencioso */ } + }, []); + + useEffect(() => { + consultar(); + const id = setInterval(consultar, 60000); + return () => clearInterval(id); + }, [consultar]); + + async function recargar() { + if (cargando) return; + setCargando(true); + try { + const r = await api.cacheRefreshManual(getVistaActual()); + setHora(r?.hora || null); + emitirRefresco(); + } catch { /* silencioso */ } + finally { setCargando(false); } + } + + return ( + <> + +
+ + {cargando ? "Actualizando…" : formatearHora(hora)} + + +
+ + ); +} \ No newline at end of file