diff --git a/susconecta/app/paciente/page.tsx b/susconecta/app/paciente/page.tsx index 0d23ec2..8bd8e24 100644 --- a/susconecta/app/paciente/page.tsx +++ b/susconecta/app/paciente/page.tsx @@ -2,6 +2,7 @@ // import { useAuth } from '@/hooks/useAuth' // removido duplicado import { useState } from 'react' +import { useRouter } from 'next/navigation' import { Button } from '@/components/ui/button' import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from '@/components/ui/dialog' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' @@ -163,6 +164,7 @@ export default function PacientePage() { const consultasDoDia = consultasFicticias.filter(c => c.data === todayStr); function Consultas() { + const router = useRouter() const [tipoConsulta, setTipoConsulta] = useState<'teleconsulta' | 'presencial'>('teleconsulta') const [especialidade, setEspecialidade] = useState('cardiologia') const [localizacao, setLocalizacao] = useState('') @@ -175,6 +177,15 @@ export default function PacientePage() { const selectedDate = new Date(currentDate); selectedDate.setHours(0, 0, 0, 0); const isSelectedDateToday = selectedDate.getTime() === today.getTime() + const handlePesquisar = () => { + const params = new URLSearchParams({ + tipo: tipoConsulta, + especialidade, + local: localizacao + }) + router.push(`/resultados?${params.toString()}`) + } + return (
@@ -237,7 +248,12 @@ export default function PacientePage() {
- +
diff --git a/susconecta/app/resultados/page.tsx b/susconecta/app/resultados/page.tsx new file mode 100644 index 0000000..5a966c3 --- /dev/null +++ b/susconecta/app/resultados/page.tsx @@ -0,0 +1,304 @@ +'use client' + +import { useMemo, useState } from 'react' +import { useSearchParams, useRouter } from 'next/navigation' +import { Button } from '@/components/ui/button' +import { Card } from '@/components/ui/card' +import { Toggle } from '@/components/ui/toggle' +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' +import { Badge } from '@/components/ui/badge' +import { + Building2, + Filter, + Globe, + HeartPulse, + Languages, + MapPin, + ShieldCheck, + Star, + Stethoscope, + ChevronRight +} from 'lucide-react' +import { cn } from '@/lib/utils' + +type TipoConsulta = 'teleconsulta' | 'local' + +type Medico = { + id: number + nome: string + especialidade: string + avaliacao: number + avaliacaoQtd: number + convenios: string[] + endereco?: string + bairro?: string + cidade?: string + precoLocal?: string + precoTeleconsulta?: string + atendeLocal: boolean + atendeTele: boolean +} + +const especialidadesHero = ['Psicólogo', 'Médico clínico geral', 'Pediatra', 'Dentista', 'Ginecologista', 'Veja mais'] + +const medicosMock: Medico[] = [ + { + id: 1, + nome: 'Paula Pontes', + especialidade: 'Psicóloga', + avaliacao: 4.9, + avaliacaoQtd: 23, + convenios: ['Amil', 'Unimed'], + endereco: 'Av. Doutor José Machado de Souza, 200 - Jardins', + bairro: 'Jardins', + cidade: 'Aracaju • SE', + precoLocal: 'R$ 180', + precoTeleconsulta: 'R$ 160', + atendeLocal: true, + atendeTele: true + }, + { + id: 2, + nome: 'Dr. Carlos Andrade', + especialidade: 'Cardiologista', + avaliacao: 4.8, + avaliacaoQtd: 128, + convenios: ['SulAmérica', 'Bradesco Saúde'], + endereco: 'Rua Sergipe, 88 - Centro Médico Jardins', + bairro: 'Centro', + cidade: 'Aracaju • SE', + precoLocal: 'R$ 320', + precoTeleconsulta: 'R$ 290', + atendeLocal: true, + atendeTele: true + }, + { + id: 3, + nome: 'Dra. Fernanda Lima', + especialidade: 'Dermatologista', + avaliacao: 5, + avaliacaoQtd: 210, + convenios: ['Amil', 'Particular'], + precoTeleconsulta: 'R$ 250', + atendeLocal: false, + atendeTele: true + }, + { + id: 4, + nome: 'Dr. João Silva', + especialidade: 'Ortopedista', + avaliacao: 4.7, + avaliacaoQtd: 96, + convenios: ['Unimed', 'Bradesco Saúde'], + endereco: 'Av. Beira Mar, 1450 - Farolândia', + bairro: 'Farolândia', + cidade: 'Aracaju • SE', + precoLocal: 'R$ 310', + atendeLocal: true, + atendeTele: false + } +] + +export default function ResultadosPage() { + const params = useSearchParams() + const router = useRouter() + const [tipoConsulta, setTipoConsulta] = useState( + params.get('tipo') === 'presencial' ? 'local' : 'teleconsulta' + ) + const [especialidadeHero, setEspecialidadeHero] = useState(params.get('especialidade') || 'Psicólogo') + const [convenio, setConvenio] = useState('Todos') + const [bairro, setBairro] = useState('Todos') + + const profissionais = useMemo(() => { + return medicosMock.filter(medico => { + if (tipoConsulta === 'local' && !medico.atendeLocal) return false + if (tipoConsulta === 'teleconsulta' && !medico.atendeTele) return false + if (convenio !== 'Todos' && !medico.convenios.includes(convenio)) return false + if (bairro !== 'Todos' && medico.bairro !== bairro) return false + if (especialidadeHero !== 'Veja mais' && medico.especialidade !== especialidadeHero) return false + return true + }) + }, [bairro, convenio, especialidadeHero, tipoConsulta]) + + const toggleBase = + 'rounded-full px-4 py-[10px] text-sm font-medium transition hover:bg-primary hover:text-primary-foreground focus-visible:ring-2 focus-visible:ring-primary/60 active:scale-[0.97]' + + return ( +
+
+
+
+
+

Resultados da procura

+

Qual especialização você deseja?

+
+ +
+
+ {especialidadesHero.map(item => ( + + ))} +
+
+ +
+ setTipoConsulta('teleconsulta')} + className={cn(toggleBase, tipoConsulta === 'teleconsulta' ? 'bg-primary text-primary-foreground' : 'border border-primary/40 text-primary')} + > + + Teleconsulta + + setTipoConsulta('local')} + className={cn(toggleBase, tipoConsulta === 'local' ? 'bg-primary text-primary-foreground' : 'border border-primary/40 text-primary')} + > + + Consulta no local + + + + + + + + + +
+ +
+ {profissionais.map(medico => ( + +
+
+

{medico.nome}

+ {medico.especialidade} +
+
+ + + {medico.avaliacao.toFixed(1)} • {medico.avaliacaoQtd} avaliações + + {medico.convenios.join(', ')} +
+
+ + {tipoConsulta === 'local' && medico.atendeLocal && ( +
+ + + {medico.endereco} + +
+ {medico.cidade} + {medico.precoLocal} +
+
+ )} + + {tipoConsulta === 'teleconsulta' && medico.atendeTele && ( +
+ + + Teleconsulta + + {medico.precoTeleconsulta} +
+ )} + +
+ + + Idiomas: Português, Inglês + + + + Acolhimento em cada consulta + + + + Pagamento seguro + + + + Especialista recomendado + +
+ +
+ + + +
+
+ ))} + + {!profissionais.length && ( + + Nenhum profissional encontrado. Ajuste os filtros para ver outras opções. + + )} +
+
+
+ ) +}