diff --git a/app/(private)/AsignacionMesas/page.tsx b/app/(private)/AsignacionMesas/page.tsx index e624d29..d6366f1 100644 --- a/app/(private)/AsignacionMesas/page.tsx +++ b/app/(private)/AsignacionMesas/page.tsx @@ -103,7 +103,7 @@ export default async function Page(props: { }, { key: "Liberar", - label: "Cancelar mesa", + label: "Liberar mesa", content: , }, ]} diff --git a/app/Components/CheckBoxMesa.tsx b/app/Components/CheckBoxMesa.tsx index 9bcc88a..54975b2 100644 --- a/app/Components/CheckBoxMesa.tsx +++ b/app/Components/CheckBoxMesa.tsx @@ -3,6 +3,7 @@ import { useState } from "react"; import SearchUser from "./Global/SearchUser/searchUser"; import SearchBoxEquipo from "./SearchEquipo"; +import SearchMesa from "./SearchMesa"; export default function CheckBoxMesa({ numAcount, @@ -38,7 +39,7 @@ export default function CheckBoxMesa({ {modo === "Cuenta" && } - {modo === "Mesa" && } + {modo === "Mesa" && } ); } diff --git a/app/Components/Global/SearchUser/searchUserTable.tsx b/app/Components/Global/SearchUser/searchUserTable.tsx new file mode 100644 index 0000000..2de3a56 --- /dev/null +++ b/app/Components/Global/SearchUser/searchUserTable.tsx @@ -0,0 +1,87 @@ +"use client"; + +import { useEffect, useState } from "react"; +import axios from "axios"; + +interface SearchUserProps { + value?: string | null; +} + +type Alumno = { + nombre: string; + carrera: string; + mesaActiva: boolean; +}; + +export default function SearchUserTable({ value }: SearchUserProps) { + const [numAcount, setNumAcount] = useState(value || ""); + const [alumno, setAlumno] = useState(null); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(null); + + // Si el prop cambia, actualizar el input + useEffect(() => { + if (value) setNumAcount(value); + }, [value]); + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + + if (!numAcount) { + setError("Ingresa un número de cuenta"); + return; + } + + setLoading(true); + setError(null); + setAlumno(null); + + try { + // Llamada a la API con Axios + const { data } = await axios.get(`/api/alumnos/${numAcount}`); + setAlumno(data); + } catch (err: any) { + setAlumno(null); + setError(err.response?.data?.message || "Alumno no encontrado"); + } finally { + setLoading(false); + } + }; + + return ( +
+
+ +
+ { + const value = e.target.value; + // Solo números y máximo 9 dígitos + if (/^\d*$/.test(value) && value.length <= 9) { + setNumAcount(value); + } + }} + placeholder="Coloca un número de cuenta..." + inputMode="numeric" + pattern="[0-9]*" + /> + +
+
+ + {error &&

{error}

} + + {alumno && ( +
+

Nombre: {alumno.nombre}

+

Carrera: {alumno.carrera}

+

Mesa activada: {alumno.mesaActiva ? "Sí" : "No"}

+
+ )} +
+ ); +} diff --git a/app/Components/Mesas b/app/Components/Mesas new file mode 100644 index 0000000..c38d979 --- /dev/null +++ b/app/Components/Mesas @@ -0,0 +1,22 @@ +"use client"; +import axios from 'axios'; +import { useEffect } from 'react'; + +interface Props { + id_cuenta: number; +} + +export function Mesas({ id_cuenta }: Props) { + + useEffect(() => { + if (!id_cuenta) return; + + axios.get(`/cuenta/${id_cuenta}`) + .then(res => { + console.log('Mesas:', res.data); + }) + .catch(err => console.error(err)); + }, [id_cuenta]); + + return
Buscando mesas para cuenta {id_cuenta}...; +} diff --git a/app/Components/SearchMesa.tsx b/app/Components/SearchMesa.tsx new file mode 100644 index 0000000..fa7f550 --- /dev/null +++ b/app/Components/SearchMesa.tsx @@ -0,0 +1,83 @@ +"use client"; +import axios from 'axios'; +import { useEffect, useState } from 'react'; + +interface Mesa { + id_mesa: number; + nombre?: string; +} + +interface Props { + id_cuenta: number; +} + +function Mesas({ id_cuenta }: Props) { + const [mesas, setMesas] = useState([]); + const [loading, setLoading] = useState(false); + + useEffect(() => { + if (!id_cuenta) return; + + setLoading(true); + + axios.get(`/cuenta/${id_cuenta}`) + .then(res => { + setMesas(res.data); + }) + .catch(err => console.error(err)) + .finally(() => setLoading(false)); + }, [id_cuenta]); + + if (loading) return

Cargando mesas...

; + + return ( +
+

Mesas asignadas

+ + {mesas.length === 0 ? ( +

No hay mesas

+ ) : ( +
    + {mesas.map(mesa => ( +
  • + Mesa {mesa.id_mesa} {mesa.nombre && `- ${mesa.nombre}`} +
  • + ))} +
+ )} +
+ ); +} + +export default function SearchMesa() { + const [inputValue, setInputValue] = useState(''); + const [idCuenta, setIdCuenta] = useState(null); + + const buscar = (e: React.FormEvent) => { + e.preventDefault(); + setIdCuenta(Number(inputValue)); + }; + + return ( + <> +
+ + +
+ setInputValue(e.target.value)} + /> + + +
+
+ + {idCuenta && } + + ); +} diff --git a/tsconfig.json b/tsconfig.json index 74f6560..e7ff3a2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,7 +15,7 @@ "moduleResolution": "bundler", "resolveJsonModule": true, "isolatedModules": true, - "jsx": "preserve", + "jsx": "react-jsx", "incremental": true, "plugins": [ {