import { useState } from 'react'; import { Users, Plus, Search, Edit2, Trash2, User, Calendar, Phone, Mail, Droplet, AlertTriangle } from 'lucide-react'; import { Card, CardContent } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger } from '@/components/ui/alert-dialog'; import type { Paciente } from '@/types'; interface PacientesProps { pacientes: Paciente[]; internaciones: { id: string; pacienteId: string; activa: boolean }[]; onAgregar: (paciente: Omit) => void; onActualizar: (id: string, datos: Partial) => void; onEliminar: (id: string) => void; } export function Pacientes({ pacientes, internaciones, onAgregar, onActualizar, onEliminar }: PacientesProps) { const [busqueda, setBusqueda] = useState(''); const [dialogoAbierto, setDialogoAbierto] = useState(false); const [pacienteEditando, setPacienteEditando] = useState(null); // Formulario const [nombre, setNombre] = useState(''); const [apellido, setApellido] = useState(''); const [dni, setDni] = useState(''); const [fechaNacimiento, setFechaNacimiento] = useState(''); const [sexo, setSexo] = useState<'M' | 'F' | 'Otro'>('M'); const [telefono, setTelefono] = useState(''); const [email, setEmail] = useState(''); const [direccion, setDireccion] = useState(''); const [grupoSanguineo, setGrupoSanguineo] = useState(''); const [alergias, setAlergias] = useState(''); const [antecedentes, setAntecedentes] = useState(''); const resetFormulario = () => { setNombre(''); setApellido(''); setDni(''); setFechaNacimiento(''); setSexo('M'); setTelefono(''); setEmail(''); setDireccion(''); setGrupoSanguineo(''); setAlergias(''); setAntecedentes(''); setPacienteEditando(null); }; const handleEditar = (paciente: Paciente) => { setPacienteEditando(paciente); setNombre(paciente.nombre); setApellido(paciente.apellido); setDni(paciente.dni); setFechaNacimiento(paciente.fechaNacimiento); setSexo(paciente.sexo); setTelefono(paciente.telefono); setEmail(paciente.email || ''); setDireccion(paciente.direccion || ''); setGrupoSanguineo(paciente.grupoSanguineo || ''); setAlergias(paciente.alergias || ''); setAntecedentes(paciente.antecedentes || ''); setDialogoAbierto(true); }; const handleGuardar = () => { if (!nombre || !apellido || !dni || !fechaNacimiento || !telefono) return; const datos = { nombre, apellido, dni, fechaNacimiento, sexo, telefono, email: email || undefined, direccion: direccion || undefined, grupoSanguineo: grupoSanguineo || undefined, alergias: alergias || undefined, antecedentes: antecedentes || undefined, }; if (pacienteEditando) { onActualizar(pacienteEditando.id, datos); } else { onAgregar(datos); } resetFormulario(); setDialogoAbierto(false); }; const pacientesFiltrados = pacientes.filter(p => p.nombre.toLowerCase().includes(busqueda.toLowerCase()) || p.apellido.toLowerCase().includes(busqueda.toLowerCase()) || p.dni.includes(busqueda) ); const getEdad = (fechaNacimiento: string) => { const hoy = new Date(); const nacimiento = new Date(fechaNacimiento); let edad = hoy.getFullYear() - nacimiento.getFullYear(); const mes = hoy.getMonth() - nacimiento.getMonth(); if (mes < 0 || (mes === 0 && hoy.getDate() < nacimiento.getDate())) { edad--; } return edad; }; const estaInternado = (pacienteId: string) => { return internaciones.some(i => i.pacienteId === pacienteId && i.activa); }; return (
{/* Header */}

Pacientes

Gestión de pacientes del hospital

{pacienteEditando ? 'Editar Paciente' : 'Nuevo Paciente'}
setNombre(e.target.value)} placeholder="Nombre del paciente" />
setApellido(e.target.value)} placeholder="Apellido del paciente" />
setDni(e.target.value)} placeholder="Número de DNI" />
setFechaNacimiento(e.target.value)} />
setTelefono(e.target.value)} placeholder="Teléfono de contacto" />
setEmail(e.target.value)} placeholder="Correo electrónico" />
setDireccion(e.target.value)} placeholder="Dirección del paciente" />