diff --git a/src/components/drugs/DrugCard.tsx b/src/components/drugs/DrugCard.tsx index 4eaf221c..106b8040 100644 --- a/src/components/drugs/DrugCard.tsx +++ b/src/components/drugs/DrugCard.tsx @@ -1,9 +1,10 @@ import { useState } from 'react'; -import { ChevronDown, ChevronUp, Star, Package, Syringe, User, Baby, AlertCircle } from 'lucide-react'; +import { ChevronDown, ChevronUp, Star, Package, Syringe, User, Baby, AlertCircle, Share2 } from 'lucide-react'; import { Drug } from '@/data/drugs'; import Badge from '@/components/shared/Badge'; import { cn } from '@/lib/utils'; import { useFavorites } from '@/hooks/useFavorites'; +import { toast } from 'sonner'; interface DrugCardProps { drug: Drug; @@ -24,6 +25,40 @@ const DrugCard = ({ drug, defaultExpanded = false }: DrugCardProps) => { }); }; + const handleShare = async (e: React.MouseEvent) => { + e.stopPropagation(); + + const url = `${window.location.origin}/farmacos?id=${drug.id}`; + const shareData = { + title: `${drug.genericName} - EMERGES TES`, + text: `Fármaco: ${drug.genericName} (${drug.tradeName})\n\nCategoría: ${drug.category}\nDosis adulto: ${drug.adultDose}`, + url: url, + }; + + try { + // Intentar usar Web Share API nativa (móviles) + if (navigator.share) { + await navigator.share(shareData); + toast.success('Fármaco compartido'); + } else { + // Fallback: copiar al portapapeles + await navigator.clipboard.writeText(`${shareData.title}\n${shareData.text}\n${url}`); + toast.success('Enlace copiado al portapapeles'); + } + } catch (error: any) { + // El usuario canceló el share o hubo un error + if (error.name !== 'AbortError') { + // Si no es cancelación, intentar copiar al portapapeles + try { + await navigator.clipboard.writeText(`${shareData.title}\n${shareData.text}\n${url}`); + toast.success('Enlace copiado al portapapeles'); + } catch (clipboardError) { + toast.error('No se pudo compartir'); + } + } + } + }; + const isFav = isFavorite(drug.id); return ( diff --git a/src/components/layout/SearchModal.tsx b/src/components/layout/SearchModal.tsx index 5264bed0..99f2f2b7 100644 --- a/src/components/layout/SearchModal.tsx +++ b/src/components/layout/SearchModal.tsx @@ -103,6 +103,19 @@ const SearchModal = ({ isOpen, onClose }: SearchModalProps) => { setResults([...procedures, ...drugs].slice(0, 12)); }, [query, typeFilter, categoryFilter]); + // Obtener categorías únicas para los filtros + const procedureCategories: Category[] = ['soporte_vital', 'patologias', 'escena']; + const drugCategories: DrugCategory[] = ['cardiovascular', 'respiratorio', 'neurologico', 'analgesia', 'oxigenoterapia', 'otros']; + + // Resetear filtros cuando se cierra el modal + useEffect(() => { + if (!isOpen) { + setTypeFilter('all'); + setCategoryFilter('all'); + setQuery(''); + } + }, [isOpen]); + const handleResultClick = (result: SearchResult) => { // Añadir al historial addToHistory({ @@ -149,137 +162,6 @@ const SearchModal = ({ isOpen, onClose }: SearchModalProps) => { - {/* Filtros */} -