codigo0/src/pages/Herramientas.tsx
gpt-engineer-app[bot] 69dacbe188 Changes
2025-12-13 11:55:24 +00:00

138 lines
4.2 KiB
TypeScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { useState } from 'react';
import { Calculator, Table, AlertCircle } from 'lucide-react';
import GlasgowCalculator from '@/components/tools/GlasgowCalculator';
import InfusionTableView from '@/components/tools/InfusionTableView';
import { infusionTables } from '@/data/calculators';
import { Link } from 'react-router-dom';
const tabs = [
{ id: 'calculadoras', label: 'Calculadoras', icon: Calculator },
{ id: 'perfusiones', label: 'Perfusiones', icon: Table },
{ id: 'codigos', label: 'Códigos', icon: AlertCircle },
];
const codigosProtocolo = [
{
name: 'Código Ictus',
description: 'Activación ante sospecha de ictus agudo',
path: '/patologias?tab=neurologicas',
color: 'bg-secondary',
},
{
name: 'Código IAM',
description: 'SCACEST - Infarto con elevación ST',
path: '/patologias?tab=circulatorias',
color: 'bg-primary',
},
{
name: 'Código Sepsis',
description: 'Sospecha de sepsis severa / shock séptico',
path: '/soporte-vital',
color: 'bg-emergency-high',
},
{
name: 'Código Parada',
description: 'PCR - Parada cardiorrespiratoria',
path: '/soporte-vital?id=rcp-adulto-svb',
color: 'bg-primary',
},
];
const Herramientas = () => {
const [activeTab, setActiveTab] = useState('calculadoras');
return (
<div className="space-y-4">
<div>
<h1 className="text-2xl font-bold text-foreground mb-1">Herramientas</h1>
<p className="text-muted-foreground text-sm">
Calculadoras, tablas y códigos
</p>
</div>
{/* Tabs */}
<div className="flex gap-2 overflow-x-auto scrollbar-hide -mx-4 px-4">
{tabs.map((tab) => {
const Icon = tab.icon;
return (
<button
key={tab.id}
onClick={() => setActiveTab(tab.id)}
className={`flex items-center gap-2 px-4 py-2 rounded-full text-sm font-medium whitespace-nowrap transition-colors ${
activeTab === tab.id
? 'bg-secondary text-secondary-foreground'
: 'bg-muted text-muted-foreground hover:bg-accent'
}`}
>
<Icon className="w-4 h-4" />
{tab.label}
</button>
);
})}
</div>
{/* Content */}
{activeTab === 'calculadoras' && (
<div className="space-y-4">
<GlasgowCalculator />
{/* Placeholder for more calculators */}
<div className="card-procedure opacity-60">
<h3 className="font-bold text-foreground text-lg mb-2">
🔥 Fórmula de Parkland (Quemados)
</h3>
<p className="text-muted-foreground text-sm">
Próximamente disponible
</p>
</div>
<div className="card-procedure opacity-60">
<h3 className="font-bold text-foreground text-lg mb-2">
Dosis Pediátricas por Peso
</h3>
<p className="text-muted-foreground text-sm">
Próximamente disponible
</p>
</div>
</div>
)}
{activeTab === 'perfusiones' && (
<div className="space-y-4">
{infusionTables.map((table) => (
<InfusionTableView key={table.id} table={table} />
))}
</div>
)}
{activeTab === 'codigos' && (
<div className="space-y-3">
{codigosProtocolo.map((codigo) => (
<Link
key={codigo.name}
to={codigo.path}
className="block card-procedure hover:border-primary/50"
>
<div className="flex items-center gap-4">
<div
className={`w-12 h-12 rounded-lg ${codigo.color} flex items-center justify-center`}
>
<AlertCircle className="w-6 h-6 text-white" />
</div>
<div>
<h3 className="font-bold text-foreground">{codigo.name}</h3>
<p className="text-muted-foreground text-sm">
{codigo.description}
</p>
</div>
</div>
</Link>
))}
</div>
)}
</div>
);
};
export default Herramientas;