cb00d9f383
ViaCEP (auto-preenche endereço ao completar 8 dígitos): - novo util services/viacep.ts (buscarCep), reutilizado - ligado em Pacientes, Salas, Profissionais(perfil); Configurações migrada p/ o util - filtro 'CEP (região)' do marketplace mantido como busca (sem auto-fill) Menus por papel: - biomédico: sem Ortodontia, RX e 'Ser Tutor Orto' (não são escopo) - protético: passa a ver Dashboard/Agenda/Tratamentos/Lançar GTO (antes não via nada) - RX/Radiografias: só papéis odonto (dentista + donos/funcionário) - bottom nav mobile ajustado (biomédico/protético) Fix 'Visualizar como': - getActivePlugins é preview-aware (todos os plugins ativos enquanto houver PREVIEW_ROLE), imune ao timing de hydrate/cache; enterPreview/exitPreview simplificados Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
28 lines
887 B
TypeScript
28 lines
887 B
TypeScript
// Busca de endereço por CEP via ViaCEP. Retorna os campos em MAIÚSCULAS
|
|
// (padrão de endereço do sistema). Retorna null se o CEP for inválido,
|
|
// não existir ou a API falhar — o chamador trata o feedback ao usuário.
|
|
export interface EnderecoCep {
|
|
logradouro: string;
|
|
bairro: string;
|
|
cidade: string;
|
|
estado: string;
|
|
}
|
|
|
|
export async function buscarCep(cep: string): Promise<EnderecoCep | null> {
|
|
const digits = (cep || '').replace(/\D/g, '');
|
|
if (digits.length !== 8) return null;
|
|
try {
|
|
const r = await fetch(`https://viacep.com.br/ws/${digits}/json/`);
|
|
const d = await r.json();
|
|
if (d.erro) return null;
|
|
return {
|
|
logradouro: (d.logradouro || '').toUpperCase(),
|
|
bairro: (d.bairro || '').toUpperCase(),
|
|
cidade: (d.localidade || '').toUpperCase(),
|
|
estado: (d.uf || '').toUpperCase(),
|
|
};
|
|
} catch {
|
|
return null;
|
|
}
|
|
}
|