import { useState, useMemo } from 'react'; import { Search, MessageSquare, Filter } from 'lucide-react'; import { communicationScripts, CommunicationScript, ScriptCategory, ScriptContext, getScriptsByCategory, getScriptsByContext, searchScripts } from '@/data/communication-scripts'; import CommunicationScriptViewer from '@/components/communication-scripts/CommunicationScriptViewer'; import { Card } from '@/components/ui/card'; import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; import Badge from '@/components/shared/Badge'; const Comunicacion = () => { const [selectedScript, setSelectedScript] = useState(null); const [searchQuery, setSearchQuery] = useState(''); const [selectedCategory, setSelectedCategory] = useState('all'); const [selectedContext, setSelectedContext] = useState('all'); const filteredScripts = useMemo(() => { let filtered = communicationScripts; // Filtrar por categoría if (selectedCategory !== 'all') { filtered = getScriptsByCategory(selectedCategory); } // Filtrar por contexto if (selectedContext !== 'all') { filtered = filtered.filter(script => selectedCategory === 'all' ? script.context === selectedContext : script.context === selectedContext && script.category === selectedCategory ); } // Filtrar por búsqueda if (searchQuery.trim()) { filtered = searchScripts(searchQuery).filter(script => filtered.includes(script) ); } return filtered; }, [selectedCategory, selectedContext, searchQuery]); const categories: ScriptCategory[] = [ 'oxigenoterapia', 'aspiracion', 'bvm_canulas', 'curas_vendajes', 'transferencias', 'control_termico', 'rcp', 'desa', 'pls', 'situaciones_dificiles' ]; const contexts: ScriptContext[] = [ 'procedimiento', 'coordinacion', 'paciente', 'familiares', 'situacion_dificil' ]; const getCategoryLabel = (category: ScriptCategory) => { const labels: Record = { oxigenoterapia: 'Oxigenoterapia', aspiracion: 'Aspiración', bvm_canulas: 'BVM/Cánulas', curas_vendajes: 'Curas/Vendajes', transferencias: 'Transferencias', control_termico: 'Control Térmico', rcp: 'RCP', desa: 'DESA', pls: 'PLS', situaciones_dificiles: 'Situaciones Difíciles' }; return labels[category] || category; }; const getContextLabel = (context: ScriptContext) => { const labels: Record = { procedimiento: 'Procedimiento', coordinacion: 'Coordinación', paciente: 'Paciente', familiares: 'Familiares', situacion_dificil: 'Situación Difícil' }; return labels[context] || context; }; const getContextColor = (context: ScriptContext) => { switch (context) { case 'procedimiento': return 'bg-blue-100 text-blue-800'; case 'coordinacion': return 'bg-purple-100 text-purple-800'; case 'paciente': return 'bg-green-100 text-green-800'; case 'familiares': return 'bg-orange-100 text-orange-800'; case 'situacion_dificil': return 'bg-red-100 text-red-800'; default: return 'bg-gray-100 text-gray-800'; } }; if (selectedScript) { return (
setSelectedScript(null)} />
); } return (

Guiones de Comunicación Operativa

Guiones operativos para comunicación efectiva durante procedimientos, coordinación con equipo y situaciones difíciles.

{/* Filtros y búsqueda */}
{/* Búsqueda */}
setSearchQuery(e.target.value)} className="pl-10" />
{/* Filtros */}
Categoría:
Contexto:
{(selectedCategory !== 'all' || selectedContext !== 'all' || searchQuery) && ( )}
{/* Lista de guiones */} {filteredScripts.length === 0 ? (

No se encontraron guiones con los filtros seleccionados.

) : (
{filteredScripts.map((script) => ( setSelectedScript(script)} >

{script.shortTitle}

{script.situation}

{getContextLabel(script.context)} {getCategoryLabel(script.category)}

"{script.script.substring(0, 100)}..."

))}
)} {/* Contador */}
Mostrando {filteredScripts.length} de {communicationScripts.length} guiones
); }; export default Comunicacion;