From c60ddf0797dd3c1ece302e36d890d1703f8d2612 Mon Sep 17 00:00:00 2001 From: IO <320154041@pcpuma.acatlan.unam.mx> Date: Tue, 17 Mar 2026 09:37:14 -0500 Subject: [PATCH] added new boton to refresh monitor and modified search machine and merge Carlos --- .../AsignacionEquipo/PlaticaGate.tsx | 37 +++++++++--- app/(private)/AsignacionEquipo/asignacion.css | 15 ++++- app/(private)/AsignacionMesas/TableMesas.tsx | 60 +++++++++++-------- app/(private)/Monitor/RefreshButton.tsx | 17 ++++++ app/(private)/Monitor/page.tsx | 5 +- app/(private)/Usuarios/page.tsx | 2 +- .../BitacoraSanciones/BitacoraEquipo.tsx | 39 ++++++++---- .../InformacionEquipos/SelectorEquipo.tsx | 38 ++++++++---- proxy.ts | 4 +- 9 files changed, 158 insertions(+), 59 deletions(-) create mode 100644 app/(private)/Monitor/RefreshButton.tsx diff --git a/app/(private)/AsignacionEquipo/PlaticaGate.tsx b/app/(private)/AsignacionEquipo/PlaticaGate.tsx index 46a0750..da84ae5 100644 --- a/app/(private)/AsignacionEquipo/PlaticaGate.tsx +++ b/app/(private)/AsignacionEquipo/PlaticaGate.tsx @@ -27,6 +27,8 @@ export default function PlaticaGate({ inscripcion, numAcount }: Props) { const [bitacora, setBitacora] = useState<[] | null>([]); const [error, setError] = useState("Equipo"); + const [search, setSearch] = useState(""); + const token = Cookies.get("token"); const headers = { Authorization: `Bearer ${token}` }; @@ -148,6 +150,16 @@ export default function PlaticaGate({ inscripcion, numAcount }: Props) { } }; + const equiposFiltrados = equipos.filter((eq) => { + const texto = search.toLowerCase(); + + return ( + eq.ubicacion?.toString().toLowerCase().includes(texto) || + eq.plataforma?.nombre?.toLowerCase().includes(texto) || + eq.nombre_equipo?.toLowerCase().includes(texto) + ); + }); + if (bitacora) { return error === "Mesa" ?

Ya cuentas con una mesa asignada

@@ -181,12 +193,20 @@ export default function PlaticaGate({ inscripcion, numAcount }: Props) { >
!loadingEquipos && setOpen(!open)} - > - {equipoSeleccionado ? ( + onClick={() => !loadingEquipos && setOpen(!open)} > + {open ? ( + setSearch(e.target.value)} + onClick={(e) => e.stopPropagation()} + className="inputSelect" + /> + ) : equipoSeleccionado ? ( - {equipoSeleccionado.ubicacion}{" "} - {equipoSeleccionado.nombre_equipo} + {equipoSeleccionado.ubicacion} {equipoSeleccionado.nombre_equipo} ) : ( @@ -201,19 +221,20 @@ export default function PlaticaGate({ inscripcion, numAcount }: Props) { {open && (
- {equipos.length === 0 && ( + {equiposFiltrados.length === 0 && (
- No hay equipos disponibles + No hay resultados
)} - {equipos.map((eq) => ( + {equiposFiltrados.map((eq) => (
{ setEquipoSeleccionado(eq); setOpen(false); + setSearch(""); }} > {eq.ubicacion} {eq.nombre_equipo} diff --git a/app/(private)/AsignacionEquipo/asignacion.css b/app/(private)/AsignacionEquipo/asignacion.css index 51f3312..2b7a070 100644 --- a/app/(private)/AsignacionEquipo/asignacion.css +++ b/app/(private)/AsignacionEquipo/asignacion.css @@ -64,7 +64,8 @@ .selectHeader { border-radius: 6px; - padding: 8px 12px; + padding: 0px 6px; + height: 35px; display: flex; justify-content: space-between; align-items: center; @@ -91,4 +92,16 @@ z-index: 10; max-height: 250px; overflow-y: auto; +} + +.inputSelect{ + border: none; + padding: 0 5px; + margin: 0; +} + +.inputSelect:focus{ + background-color: #fff; + outline: none; + box-shadow:none; } \ No newline at end of file diff --git a/app/(private)/AsignacionMesas/TableMesas.tsx b/app/(private)/AsignacionMesas/TableMesas.tsx index c6edf40..47b4c65 100644 --- a/app/(private)/AsignacionMesas/TableMesas.tsx +++ b/app/(private)/AsignacionMesas/TableMesas.tsx @@ -13,11 +13,13 @@ type Mesa = { export default function TableMesas() { const [mesas, setMesas] = useState([]); const [loading, setLoading] = useState(true); + const [refresh, setRefresh] = useState(false) const token = Cookies.get("token"); const headers = { Authorization: `Bearer ${token}` }; const fetchMesas = async () => { + setLoading(true); try { const res = await axios.get( `${process.env.NEXT_PUBLIC_API_URL}/mesa/usoWhitout`, @@ -34,37 +36,43 @@ export default function TableMesas() { useEffect(() => { fetchMesas(); - }, []); + setRefresh(false) + }, [refresh]); if (loading) { - return
- - - - - - -
Cargando mesas...
-
+ return ( +
+ + + + + + +
Cargando mesas...
+
+ ) } return ( -
- - - - - - - - - {mesas.map((mesa) => ( - - + <> + +
+
ID Mesa
{mesa.id_mesa}
+ + + - ))} - -
ID Mesa
-
+ + + + {mesas.map((mesa) => ( + + {mesa.id_mesa} + + ))} + + +
+ ); } \ No newline at end of file diff --git a/app/(private)/Monitor/RefreshButton.tsx b/app/(private)/Monitor/RefreshButton.tsx new file mode 100644 index 0000000..877f3b5 --- /dev/null +++ b/app/(private)/Monitor/RefreshButton.tsx @@ -0,0 +1,17 @@ +"use client" + +import { useRouter } from "next/navigation" +import styles from "./Page.module.css" + +export default function RefreshButton() { + const router = useRouter() + + return ( + + ) +} \ No newline at end of file diff --git a/app/(private)/Monitor/page.tsx b/app/(private)/Monitor/page.tsx index 83c06a5..e84b0c7 100644 --- a/app/(private)/Monitor/page.tsx +++ b/app/(private)/Monitor/page.tsx @@ -4,6 +4,7 @@ import DSC from "./DSC"; import ToggleTable from "@/app/Components/Global/Toggle/ToggleTable"; import TableTable from "./TableTable"; import { Metadata } from "next"; +import RefreshButton from "./RefreshButton"; export const metadata: Metadata = { title: "Monitor", @@ -21,9 +22,11 @@ export default async function Page(props: {

MONITOR

- +
+
-
+
diff --git a/app/Components/BitacoraSanciones/BitacoraEquipo.tsx b/app/Components/BitacoraSanciones/BitacoraEquipo.tsx index 8885744..ab1c9dd 100644 --- a/app/Components/BitacoraSanciones/BitacoraEquipo.tsx +++ b/app/Components/BitacoraSanciones/BitacoraEquipo.tsx @@ -21,6 +21,8 @@ export default function BitacoraEquipo({ date }: { date: string | null }) { const [equipoSeleccionado, setEquipoSeleccionado] = useState(null); const [equipos, setEquipos] = useState([]); + const [search, setSearch] = useState(""); + const token = Cookies.get("token"); const headers = { Authorization: `Bearer ${token}` }; @@ -52,6 +54,15 @@ export default function BitacoraEquipo({ date }: { date: string | null }) { }); }, [equipoSeleccionado, date]); + const equiposFiltrados = equipos.filter((eq) => { + const texto = search.toLowerCase(); + + return ( + eq.ubicacion?.toString().toLowerCase().includes(texto) || + eq.plataforma?.nombre?.toLowerCase().includes(texto) || + eq.nombre_equipo?.toLowerCase().includes(texto) + ); + }); return ( <> @@ -64,13 +75,20 @@ export default function BitacoraEquipo({ date }: { date: string | null }) { >
!loadingEquipos && setOpen(!open)} - > - {equipoSeleccionado ? ( - - {equipoSeleccionado.ubicacion}{" "} - {equipoSeleccionado.nombre_equipo} + onClick={() => !loadingEquipos && setOpen(!open)} > + {open ? ( + setSearch(e.target.value)} + onClick={(e) => e.stopPropagation()} + className="inputSelect" + /> + ) : equipoSeleccionado ? ( + + {equipoSeleccionado.ubicacion} {equipoSeleccionado.nombre_equipo} ) : ( @@ -85,19 +103,20 @@ export default function BitacoraEquipo({ date }: { date: string | null }) { {open && (
- {equipos.length === 0 && ( + {equiposFiltrados.length === 0 && (
- No hay equipos disponibles + No hay resultados
)} - {equipos.map((eq) => ( + {equiposFiltrados.map((eq) => (
{ setEquipoSeleccionado(eq); setOpen(false); + setSearch(""); }} > {eq.ubicacion} {eq.nombre_equipo} diff --git a/app/Components/InformacionEquipos/SelectorEquipo.tsx b/app/Components/InformacionEquipos/SelectorEquipo.tsx index 9560903..c669128 100644 --- a/app/Components/InformacionEquipos/SelectorEquipo.tsx +++ b/app/Components/InformacionEquipos/SelectorEquipo.tsx @@ -35,6 +35,7 @@ export default function SelectorEquipo({ onSearch }: Props) { const [loadingEquipos, setLoadingEquipos] = useState(false); const [open, setOpen] = useState(false); + const [search, setSearch] = useState(""); const token = Cookies.get("token"); const headers = { Authorization: `Bearer ${token}` }; @@ -61,6 +62,15 @@ export default function SelectorEquipo({ onSearch }: Props) { } }, [paramEquipo, equipos]); + const equiposFiltrados = equipos.filter((eq) => { + const texto = search.toLowerCase(); + + return ( + eq.ubicacion?.toString().toLowerCase().includes(texto) || + eq.plataforma?.nombre?.toLowerCase().includes(texto) || + eq.nombre_equipo?.toLowerCase().includes(texto) + ); + }); return (
@@ -71,14 +81,20 @@ export default function SelectorEquipo({ onSearch }: Props) { >
!loadingEquipos && setOpen(!open)} - > - {selected ? ( - - {selected.ubicacion}{" "} - {selected.nombre_equipo}{" "} - {selected.areaUbicacion.area} + onClick={() => !loadingEquipos && setOpen(!open)} > + {open ? ( + setSearch(e.target.value)} + onClick={(e) => e.stopPropagation()} + className="inputSelect" + /> + ) : selected ? ( + + {selected.ubicacion} {selected.nombre_equipo} ) : ( @@ -93,13 +109,13 @@ export default function SelectorEquipo({ onSearch }: Props) { {open && (
- {equipos.length === 0 && ( + {equiposFiltrados.length === 0 && (
No hay equipos disponibles
)} - {equipos.map((eq) => ( + {equiposFiltrados.map((eq) => (
{eq.ubicacion} {eq.nombre_equipo} {eq.areaUbicacion.area} diff --git a/proxy.ts b/proxy.ts index a2be7ff..8624d57 100644 --- a/proxy.ts +++ b/proxy.ts @@ -42,7 +42,7 @@ export async function proxy(request: NextRequest) { "/Monitor", "/ActivosMantenimiento", "/Periodo", - "/Usuarios", + "/Usuarios", ]; if (role === 5 && !onlyImpresiones.includes(pathname)) { @@ -68,7 +68,7 @@ export const config = { matcher: [ "/", "/Reportes", - "/Usuarios", + "/Usuarios", "/Periodo", "/Monitor", "/QuitarSancion",