"use client"; import { useEffect, useState } from "react"; import Card from "@/components/ui/Card"; import Button from "@/components/ui/Button"; import Input from "@/components/ui/Input"; interface Servicio { id: string; nombre: string; duracionHoras: number; activo: boolean; } export default function ServiciosPage() { const [servicios, setServicios] = useState([]); const [loading, setLoading] = useState(true); const [mostrarForm, setMostrarForm] = useState(false); const [form, setForm] = useState({ nombre: "", duracionHoras: "" }); const [guardando, setGuardando] = useState(false); const [editando, setEditando] = useState(null); const [errorForm, setErrorForm] = useState(""); useEffect(() => { cargar(); }, []); async function cargar() { setLoading(true); const res = await fetch("/api/admin/servicios"); setServicios(await res.json()); setLoading(false); } function set(f: string) { return (e: React.ChangeEvent) => setForm((v) => ({ ...v, [f]: e.target.value })); } async function guardar(e: React.FormEvent) { e.preventDefault(); setGuardando(true); setErrorForm(""); if (editando) { const res = await fetch(`/api/admin/servicios/${editando.id}`, { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ nombre: form.nombre, duracionHoras: Number(form.duracionHoras) }), }); if (!res.ok) { setErrorForm("Error al guardar"); setGuardando(false); return; } } else { const res = await fetch("/api/admin/servicios", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ nombre: form.nombre, duracionHoras: Number(form.duracionHoras) }), }); if (!res.ok) { setErrorForm("Error al guardar"); setGuardando(false); return; } } setGuardando(false); setMostrarForm(false); setEditando(null); setForm({ nombre: "", duracionHoras: "" }); cargar(); } async function toggleActivo(s: Servicio) { await fetch(`/api/admin/servicios/${s.id}`, { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ activo: !s.activo }), }); cargar(); } function iniciarEdicion(s: Servicio) { setEditando(s); setForm({ nombre: s.nombre, duracionHoras: String(s.duracionHoras) }); setMostrarForm(true); } return (

Tipos de servicio

{mostrarForm && (
{errorForm &&

{errorForm}

}
)} {loading ? (
Cargando...
) : (
{servicios.map((s) => (

{s.nombre}

{s.duracionHoras === 1 ? "1 hora" : `${s.duracionHoras} horas`}

))}
)}
); }