From f5bc72443bcccf4e61d7fc29513ace9d0df33fd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Ign=C3=A1cio=20Fontoura=20Solla?= Date: Sun, 2 Aug 2026 16:12:12 -0300 Subject: [PATCH 1/2] =?UTF-8?q?docs(plans):=20inten=C3=A7=C3=A3o=20B131=20?= =?UTF-8?q?=E2=80=94=20papel=20no=20perfil=20+=20Sair=20=C3=ADcone?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Related #272 --- docs/plans/sidebar-perfil-sair-icone.md | 81 +++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 docs/plans/sidebar-perfil-sair-icone.md diff --git a/docs/plans/sidebar-perfil-sair-icone.md b/docs/plans/sidebar-perfil-sair-icone.md new file mode 100644 index 00000000..0747b00f --- /dev/null +++ b/docs/plans/sidebar-perfil-sair-icone.md @@ -0,0 +1,81 @@ +# Sidebar — papel no perfil + Sair como ícone + +Status: registrada +Atualizado em: 2026-08-02 +Issue: #272 +Priority: P2 +Model: composer-2.5 +Impeccable: B — encaixe no rodapé da sidebar (`CampaignSidebar`) +Appetite: ~0,5 dia eng; um ajuste de shell, sem fluxo novo +Responsável: — + +## Intenção + +No rodapé da sidebar de `/campanha`, o botão “Sair” ocupa uma linha inteira abaixo do link de perfil, e o subtítulo fixo “Meu perfil” não informa quem está logado além do nome. Querem densificar: sair vira ícone à direita da mesma linha do perfil, e o subtítulo passa a mostrar o **papel** do usuário (Coordenador Geral, Assessor, Candidato, Liderança). + +## Persona e fluxo + +- **Persona / contexto:** qualquer `campaignUser` com a sidebar aberta (mesa desktop ou Sheet mobile) — staff ou liderança. +- **Job principal:** ver quem sou (nome + papel) e sair da sessão sem gastar uma linha extra. +- **Fluxo desejado:** + 1. Olha o rodapé → vê avatar, nome, papel. + 2. Toca o bloco de perfil (exceto o ícone de sair) → vai a `/campanha/perfil`. + 3. Toca o **ícone** de sair (não um botão com texto “Sair”) → mesmo fluxo de logout de hoje (limpa caches/históricos locais e encerra a sessão). +- **Anti-goals de produto:** redesign da sidebar inteira; segundo botão “Sair” em outro lugar; manter o botão full-width “Sair”; trocar o destino do perfil; inventar papéis novos na UI. + +### Esboço de fluxo (B) + +```text +[rodapé sidebar] + [avatar + nome + papel …………… ⏻] + │ │ + └→ /campanha/perfil └→ logout (comportamento = atual; UI = só ícone) +``` + +## Objetivo e aceite + +- O subtítulo sob o nome deixa de ser “Meu perfil” e mostra o rótulo pt-BR do papel do usuário logado (os mesmos rótulos já usados no escopo: Coordenador Geral / Assessor / Candidato / Liderança). +- “Sair” **não** é mais botão full-width com label “Sair” abaixo do perfil: vira **somente ícone** à **direita** da mesma linha do perfil (sem texto visível no controle). +- O ícone tem rótulo acessível (“Sair” / estado “Saindo…”), alvo tocável adequado (≈ `min-h-11`), e o **funcionamento** de logout (incluindo limpeza client-side já existente) permanece — só a apresentação muda. +- O link/área de perfil continua levando a `/campanha/perfil` sem disparar logout por acidente (alvos distintos). +- Sem mudança de auth, rotas ou papéis. + +## Dados (intenção) + +- **Vou apresentar dados?** Não — só rótulo de papel já conhecido da sessão. +- **Decisões desbloqueadas:** N/A (identidade visual / densidade de shell, não decisão operacional). +- **Forma:** *adiada ao plano de implementação*. + +## Direção no codebase (hipótese) + +- **Áreas prováveis:** `src/components/campaign/shell/CampaignSidebar.tsx` (rodapé); rótulos já existem em `campaignRoleLabels` (`campaignUserProfile`). +- **Precedente a olhar:** o próprio footer atual; badge de escopo no topo da sidebar (já mostra o papel). +- **Risco de acoplamento:** logout client-side (recent visits, PWA caches, filtros salvos) não pode sumir; leader lockdown intocado. + +## Dependências + +- Nenhuma dura. Soft: **B130** (#271) também mexe no shell da sidebar (logo / chips de escopo) — se o badge de escopo sair dali, o subtítulo com papel neste item fica ainda mais importante; não bloqueia. + +## Fora de escopo + +- Remover ou redesenhar o `CampaignScopeBadge` do topo da sidebar (papel pode continuar lá — ver questão aberta). +- Alterar `/campanha/perfil`, bottom nav, FAB/drawer de ações rápidas. +- Collapsed/icon-only sidebar (tablet) além do necessário para não quebrar o footer atual. +- Copy nova de papéis ou mudança de RBAC. + +## Rabbit holes de produto + +- **“Já que estamos no footer…”.** Menu de conta, troca de usuário, confirmação de logout. **Corte:** só realocar Sair + trocar subtítulo. +- **Deduplicar papel no badge.** Pode ser tentador tirar o badge porque o subtítulo passa a mostrar o papel. **Corte neste item:** não mexer no badge salvo decisão explícita no gate. + +## Questões em aberto (produto) + +- **Papel duplicado (badge no topo + subtítulo no rodapé)?** **Opções:** A) manter badge e mostrar papel no rodapé (pedido literal) | B) mostrar papel só no rodapé e remover/alterar o badge | C) subtítulo = papel só se o badge sumir em algum viewport. **Recomendação:** **A** — este item é densificar o footer; o badge de escopo é outro sinal de “com que ótica estou vendo a árvore”. _(assumido — validar)_ +- **Texto do subtítulo:** papel curto (“Assessor”) vs. frase (“Perfil · Assessor”)? **Opções:** A) só o rótulo do papel | B) “Meu perfil · {papel}”. **Recomendação:** **A** — pedido explícito; o link já implica perfil. _(assumido)_ + +## Referências + +- GitHub Issue #272 +- `src/components/campaign/shell/CampaignSidebar.tsx` +- `src/utilities/campaignUserProfile.ts` (`campaignRoleLabels`) +- Plano histórico de perfil: `docs/plans/reset-senha-foto-perfil.md` From 005d3d24b5365489915810285f0d935f09c2735b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Ign=C3=A1cio=20Fontoura=20Solla?= Date: Sun, 2 Aug 2026 16:13:48 -0300 Subject: [PATCH 2/2] docs(plans): format B131 intention plan Related #272 --- docs/plans/sidebar-perfil-sair-icone.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/plans/sidebar-perfil-sair-icone.md b/docs/plans/sidebar-perfil-sair-icone.md index 0747b00f..36a9ee59 100644 --- a/docs/plans/sidebar-perfil-sair-icone.md +++ b/docs/plans/sidebar-perfil-sair-icone.md @@ -44,7 +44,7 @@ No rodapé da sidebar de `/campanha`, o botão “Sair” ocupa uma linha inteir - **Vou apresentar dados?** Não — só rótulo de papel já conhecido da sessão. - **Decisões desbloqueadas:** N/A (identidade visual / densidade de shell, não decisão operacional). -- **Forma:** *adiada ao plano de implementação*. +- **Forma:** _adiada ao plano de implementação_. ## Direção no codebase (hipótese)