VendeeDocs
Frontend

Sidebar e Layout

AppLayout, sidebar e navegação

O layout segue o padrão oficial de sidebar do shadcn/ui.

Estrutura

AppLayout = SidebarProvider > AppSidebar + SidebarInset
  • AppLayoutsrc/components/layout/AppLayout.tsx
  • AppSidebarsrc/components/layout/Sidebar.tsx (o arquivo se chama Sidebar.tsx e exporta AppSidebar)`
  • AppHeadersrc/components/layout/AppHeader.tsx

AppSidebar

Usa Sidebar collapsible="icon" com:

  • Header — logo do Vendee + nome do workspace ativo, em texto. Não há mais troca de workspace pela sidebar (1 login = 1 workspace).
  • Content — NavMain (itens de navegação)
  • Footer — NavUser (menu do usuário)
  • Rail — Barra lateral para toggle

Definida em src/lib/navigation.ts:

export const mainNavItems: NavItem[] = [
  { title: "Dashboard", url: ROUTES.dashboard, icon: LayoutDashboard },
  { title: "Negócios", url: ROUTES.deals, icon: Kanban },
  { title: "Contatos", url: ROUTES.contacts, icon: Users },
  { title: "Empresas", url: ROUTES.companies, icon: Building2 },
  { title: "Atividades", url: ROUTES.activities, icon: CalendarCheck },
];

export const settingsNavItem: NavItem = {
  title: "Configurações",
  url: "/settings",
  icon: Settings,
  items: [
    { title: "Empresa", url: "/settings/empresa", icon: Building },
    { title: "Equipe", url: "/settings/equipe", icon: UserCog },
    // ... 8 sub-items
  ],
};

Adicionar novo item de navegação

  1. Adicione o item em src/lib/navigation.ts
  2. O NavMain renderiza automaticamente usando SidebarMenu
  3. Sub-items usam Collapsible para expandir/recolher

AppHeader

Composto por:

  • SidebarTrigger — Toggle da sidebar
  • Separator — Divisor visual
  • Breadcrumb — Navegação por caminho

As URLs vêm de ROUTES

☠️ As rotas do app são em português (/negocios, /contatos, /empresas, /atividades) e nunca são escritas à mão no menu — saem da constante ROUTES em src/lib/constants.ts. Rota nova entra lá primeiro.

Os quatro grupos da sidebar

O menu é montado por grupo, e cada grupo aparece conforme papel e flags do workspace:

GrupoO que traz
CRMDashboard, Negócios, Contatos, Empresas, Atividades, Propostas + Prospecção, Automações e Base de Clientes (cada um atrás da própria flag)
InteligênciaBase de Conhecimento, Aurora e Copiloto — o grupo inteiro só aparece se alguma flag de IA estiver ligada
Configuraçõesmontado por getSettingsNavItem(role, settings): itens condicionados a permissão e a flag
Adminsó para super admin

Configurações não é uma lista estática. É função — cada sub-item depende de permissão (canManageSettings) e, alguns, de flag de workspace. Item novo entra na função, não num array solto.

Nesta página