import React, { useState } from 'react'; import { Mail, LogOut, Stethoscope, Clock, CheckCircle2, ArrowRight, MapPin, Users, Wrench, ChevronDown, ChevronUp, Loader2 } from 'lucide-react'; import { HybridBackend } from '../services/backend.ts'; import { useAppVersion } from '../buildInfo.ts'; const UF_LIST = ['AC','AL','AM','AP','BA','CE','DF','ES','GO','MA','MG','MS','MT','PA','PB','PE','PI','PR','RJ','RN','RO','RR','RS','SC','SE','SP','TO']; const API_URL = (window as any).__API_URL__ || ''; const ROLE_CONFIG: Record = { dentista: { label: 'Dentista', icon: Stethoscope, color: 'blue', desc: 'dentista disponível para contratação' }, protetico: { label: 'Protético', icon: Wrench, color: 'purple', desc: 'protético disponível para laboratório' }, }; export const WaitingInviteView: React.FC = () => { const ver = useAppVersion(); const userData = localStorage.getItem('SCOREODONTO_USER_DATA'); const user = userData ? JSON.parse(userData) : null; const role = user?.role ?? 'dentista'; const cfg = ROLE_CONFIG[role] ?? ROLE_CONFIG['dentista']; const email = user?.email ?? ''; const RoleIcon = cfg.icon; const [showDiretorio, setShowDiretorio] = useState(false); const [estado, setEstado] = useState(''); const [cidade, setCidade] = useState(''); const [bairro, setBairro] = useState(''); const [especialidade, setEspecialidade] = useState(''); const [saving, setSaving] = useState(false); const [saved, setSaved] = useState(false); const [saveError, setSaveError] = useState(''); const steps = [ { icon: CheckCircle2, label: 'Conta criada', done: true }, { icon: Mail, label: 'Aguardando convite', done: false }, { icon: ArrowRight, label: 'Acesso à clínica', done: false }, ]; const handleSaveDiretorio = async () => { if (!estado || !cidade) { setSaveError('Estado e cidade são obrigatórios.'); return; } setSaving(true); setSaveError(''); try { const token = localStorage.getItem('SCOREODONTO_AUTH_TOKEN'); const res = await fetch(`${API_URL}/api/usuarios/localidade`, { method: 'PUT', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` }, body: JSON.stringify({ estado, cidade, bairro, especialidade, disponivel_diretorio: true }), }); const data = await res.json(); if (!res.ok || !data.success) { setSaveError(data.message || 'Erro ao salvar.'); } else setSaved(true); } catch { setSaveError('Erro de conexão.'); } finally { setSaving(false); } }; const colorMap: Record = { blue: 'from-teal-600 to-emerald-600', purple: 'from-purple-600 to-violet-600', }; return (
{/* Logo */}
ScoreOdonto
{/* Card */}
{/* Icon */}

Conta criada com sucesso!

Seu perfil de {cfg.label} foi registrado. {role === 'protetico' ? ' Para acessar o sistema, você precisa ser convidado por um laboratório ou clínica.' : ' Para acessar o sistema, você precisa ser convidado pelo administrador de uma clínica ou consultório.'}

{/* Steps */}
{steps.map((step, i) => { const Icon = step.icon; return (
{step.label}
{i < steps.length - 1 && (
)} ); })}
{/* Info box */}

O que fazer agora?

  • 1. Informe seu e-mail {email} ao administrador
  • 2. Aguarde o convite ser enviado
  • 3. Acesse o link do convite para completar o vínculo
{/* Diretório de profissionais */}
{showDiretorio && (
{saved ? (
Perfil publicado no diretório!
) : ( <>

Preencha sua localização para que clínicas e consultórios possam te contratar como {cfg.desc}.

setCidade(e.target.value.toUpperCase())} placeholder="Cidade *" className="w-full px-3 py-2 bg-white border border-purple-200 rounded-lg text-xs font-bold text-gray-700 outline-none focus:border-purple-400 uppercase" />
setBairro(e.target.value.toUpperCase())} placeholder="Bairro" className="w-full px-3 py-2 bg-white border border-purple-200 rounded-lg text-xs font-bold text-gray-700 outline-none focus:border-purple-400 uppercase" /> setEspecialidade(e.target.value.toUpperCase())} placeholder={role === 'protetico' ? 'Especialidade (ex: METAL)' : 'Especialidade (ex: ORTO)'} className="w-full px-3 py-2 bg-white border border-purple-200 rounded-lg text-xs font-bold text-gray-700 outline-none focus:border-purple-400 uppercase" />
{saveError &&

{saveError}

} )}
)}
{ver.version}
); };