/* |-------------------------------------------------------------------------- | Agência PSI |-------------------------------------------------------------------------- | Criado e desenvolvido por Leonardo Nohama | | Tecnologia aplicada à escuta. | Estrutura para o cuidado. | | Arquivo: src/navigation/menus/clinic.menu.js | Data: 2026 | Local: São Carlos/SP — Brasil |-------------------------------------------------------------------------- | © 2026 — Todos os direitos reservados |-------------------------------------------------------------------------- */ export default function adminMenu(ctx = {}) { const menu = [ { label: 'Clínica', items: [ // ✅ usar name real da rota (evita /admin cair em redirect estranho) { label: 'Dashboard', icon: 'pi pi-fw pi-home', to: { name: 'admin.dashboard' } }, { label: 'Agenda da Clínica', icon: 'pi pi-fw pi-calendar', to: { name: 'admin-agenda-clinica' }, feature: 'agenda.view', badgeKey: 'agendaHoje' }, { label: 'Recorrências', icon: 'pi pi-fw pi-refresh', to: { name: 'admin-agenda-recorrencias' }, feature: 'agenda.view' }, // ✅ Compromissos determinísticos (tipos) { label: 'Compromissos', icon: 'pi pi-fw pi-clock', to: { name: 'admin-agenda-compromissos' }, feature: 'agenda.view' } ] }, // CRM de conversas / WhatsApp { label: 'Conversas', icon: 'pi pi-fw pi-comments', to: { name: 'admin-conversas' }, badgeKey: 'conversasUnread' }, // ✅ SEM IF: sempre existe, só fica visível quando a feature estiver ligada { label: 'Pacientes', visible: () => { // 1) enquanto tenant/features estão carregando, NÃO some (evita piscar ao trocar de aba) if (ctx?.tenantLoading?.()) return true; if (ctx?.tenantFeaturesLoading?.()) return true; // 2) quando estabilizou, aí sim decide pela feature return !!ctx?.tenantFeatureEnabled?.('patients'); }, items: [ // ✅ usar name real das rotas (você já tem todas no routes.clinic.js) { label: 'Lista de Pacientes', icon: 'pi pi-fw pi-users', to: { name: 'admin-pacientes' }, quickCreate: true, quickCreateRoute: 'admin-pacientes-cadastro', quickCreateLinkTo: { name: 'admin-pacientes-link-externo' } }, { label: 'Grupos', icon: 'pi pi-fw pi-sitemap', to: { name: 'admin-pacientes-grupos' } }, { label: 'Tags', icon: 'pi pi-fw pi-tags', to: { name: 'admin-pacientes-tags' } }, { label: 'Médicos & Referências', icon: 'pi pi-fw pi-heart', to: { name: 'admin-pacientes-medicos' } }, { label: 'Link Externo', icon: 'pi pi-fw pi-link', to: { name: 'admin-pacientes-link-externo' } }, { label: 'Cadastros recebidos', icon: 'pi pi-inbox', to: { name: 'admin-pacientes-recebidos' }, badgeKey: 'cadastrosRecebidos' } // "Templates de Documentos" movido pra Configurações ] }, { label: 'Gestão', items: [ { label: 'Profissionais', icon: 'pi pi-fw pi-id-card', to: { name: 'admin-clinic-professionals' } }, { label: 'Tipos de Clínicas', icon: 'pi pi-fw pi-sliders-h', to: { name: 'admin-clinic-features' }, visible: () => { if (ctx?.tenantLoading?.()) return true; // ← true durante loading (evita piscar) const role = ctx?.role?.(); return role === 'clinic_admin'; // tenant_admin normaliza para clinic_admin } }, { label: 'Meu plano', icon: 'pi pi-fw pi-credit-card', to: { name: 'admin-meu-plano' } } ] }, { label: 'Financeiro', items: [{ label: 'Cobranças', icon: 'pi pi-fw pi-wallet', to: { name: 'admin-financeiro' } }] }, { label: 'Sistema', items: [ { label: 'Meu Perfil', icon: 'pi pi-fw pi-user', to: '/account/profile' }, { label: 'Meu Negócio', icon: 'pi pi-fw pi-building', to: '/account/negocio' }, { label: 'Segurança', icon: 'pi pi-fw pi-shield', to: { name: 'admin-settings-security' } }, { label: 'Agendamento Online (PRO)', icon: 'pi pi-fw pi-calendar-plus', to: { name: 'admin-online-scheduling' }, feature: 'online_scheduling.manage', proBadge: true }, { label: 'Agendamentos Recebidos', icon: 'pi pi-fw pi-inbox', to: { name: 'admin-agendamentos-recebidos' }, feature: 'online_scheduling.manage', proBadge: true, badgeKey: 'agendamentosRecebidos' } ] } ]; return menu; }