feat(frontend): Call Center > Filas/Pausas/Disposições, Telefonia > Troncos, Discador > Lista de Bloqueio
Cinco telas novas no app do tenant, todas contra endpoints de backend que já existiam (Queues/PauseReasons/Dispositions/Trunks/Suppression) — mesmo padrão de listagem+form inline+remoção com confirmação de 2 cliques usado em Ramais. StatusBadge ganhou o mapa de TrunkStatus. Corrigido bug real: PauseReasonsController.list() não filtrava enabled:true, então um motivo removido nunca sumia da lista. Testado ponta a ponta contra a API real do tenant Acme. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BFaBaBSQGhyXGEgtTYZGV8
This commit is contained in:
@@ -11,14 +11,16 @@ import {
|
||||
} from "lucide-react";
|
||||
import type { NavSection } from "../shell/nav-types";
|
||||
|
||||
/** IA fixa do menu Tenant (agente.md secao 169) — "Dashboard" (PHASE 23),
|
||||
* "Telefonia > Ramais" (PHASE 25) e "Discador > Campanhas" (PHASE 26) têm
|
||||
* página construída até agora, o resto existe pra provar a arquitetura
|
||||
* completa (Product Principle #5 em PRODUCT.md), renderizado como
|
||||
* indisponível em vez de virar link morto. "Itens sem permissão não
|
||||
* aparecem" (secao 169) ainda não é aplicado aqui — este primeiro corte
|
||||
* mostra a IA inteira pra qualquer usuário tenant autenticado; filtrar por
|
||||
* permission real fica pra quando mais telas existirem pra testar contra. */
|
||||
/** IA fixa do menu Tenant (agente.md secao 169). Páginas construídas até
|
||||
* agora: Dashboard (PHASE 23), Telefonia > Ramais (PHASE 25), Discador >
|
||||
* Campanhas (PHASE 26), Call Center > Filas/Pausas/Disposições, Telefonia
|
||||
* > Troncos e Discador > Lista de Bloqueio (PHASE 27) — o resto existe pra
|
||||
* provar a arquitetura completa (Product Principle #5 em PRODUCT.md),
|
||||
* renderizado como indisponível em vez de virar link morto. "Itens sem
|
||||
* permissão não aparecem" (secao 169) ainda não é aplicado aqui — este
|
||||
* primeiro corte mostra a IA inteira pra qualquer usuário tenant
|
||||
* autenticado; filtrar por permission real fica pra quando mais telas
|
||||
* existirem pra testar contra. */
|
||||
export const TENANT_NAV: NavSection[] = [
|
||||
{
|
||||
label: "Dashboard",
|
||||
@@ -38,13 +40,34 @@ export const TENANT_NAV: NavSection[] = [
|
||||
{ label: "Leads" },
|
||||
{ label: "Importações" },
|
||||
{ label: "Callbacks" },
|
||||
{ label: "Lista de Bloqueio" },
|
||||
{
|
||||
label: "Lista de Bloqueio",
|
||||
href: "/app/discador/bloqueio",
|
||||
description: "Números que o discador nunca chama",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
label: "Call Center",
|
||||
icon: Headset,
|
||||
children: [{ label: "Agentes" }, { label: "Filas" }, { label: "Pausas" }, { label: "Disposições" }],
|
||||
children: [
|
||||
{ label: "Agentes" },
|
||||
{
|
||||
label: "Filas",
|
||||
href: "/app/callcenter/filas",
|
||||
description: "Filas de atendimento deste tenant",
|
||||
},
|
||||
{
|
||||
label: "Pausas",
|
||||
href: "/app/callcenter/pausas",
|
||||
description: "Motivos de pausa que o agente pode escolher",
|
||||
},
|
||||
{
|
||||
label: "Disposições",
|
||||
href: "/app/callcenter/disposicoes",
|
||||
description: "Motivos de encerramento de chamada",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
label: "Telefonia",
|
||||
@@ -55,7 +78,11 @@ export const TENANT_NAV: NavSection[] = [
|
||||
href: "/app/telefonia/ramais",
|
||||
description: "Ramais SIP deste tenant — números, senha, caller ID",
|
||||
},
|
||||
{ label: "Troncos" },
|
||||
{
|
||||
label: "Troncos",
|
||||
href: "/app/telefonia/troncos",
|
||||
description: "Troncos SIP deste tenant",
|
||||
},
|
||||
{ label: "Dialplan" },
|
||||
],
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user