docs: spec das secoes escondidas na tela de log
This commit is contained in:
@@ -0,0 +1,66 @@
|
|||||||
|
# Log: seções escondidas por padrão, com clique para abrir
|
||||||
|
|
||||||
|
## Contexto
|
||||||
|
|
||||||
|
A tela `/log` mostra duas tabelas: "Ações no painel" (histórico de ações do
|
||||||
|
painel, já limitado aos 20 registros mais recentes) e "Envios automáticos de
|
||||||
|
chave (n8n)" (log dos envios automáticos de chave via WhatsApp, sem limite).
|
||||||
|
Como ambas aparecem sempre expandidas, a tela fica grande e atrapalha quando
|
||||||
|
o usuário só quer olhar rapidamente um dos dois logs.
|
||||||
|
|
||||||
|
## Objetivo
|
||||||
|
|
||||||
|
Cada seção da tela `/log` deve começar **escondida** (fechada) ao carregar a
|
||||||
|
página, exigindo um clique para expandir. Isso facilita, por exemplo, olhar
|
||||||
|
só o log de envios de chave sem precisar rolar past o log inteiro do painel.
|
||||||
|
|
||||||
|
## Design
|
||||||
|
|
||||||
|
**Estrutura:** cada seção (`Ações no painel` e `Envios automáticos de chave
|
||||||
|
(n8n)`) é envolvida em um elemento `<details class="secao-log">` HTML
|
||||||
|
nativo, **fechado por padrão** (sem o atributo `open`). A ordem das seções
|
||||||
|
não muda: Ações no painel primeiro, Envios automáticos de chave embaixo.
|
||||||
|
|
||||||
|
**Controles (dois, redundantes, ambos alternam o mesmo estado):**
|
||||||
|
- O título da seção (dentro de `<summary>`) é clicável — clicar nele
|
||||||
|
abre/fecha a seção. Uma seta (▸ fechado / ▾ aberto) ao lado do título
|
||||||
|
indica visualmente o estado atual.
|
||||||
|
- Um botão no estilo dos demais botões do painel (`Mostrar` / `Ocultar`)
|
||||||
|
fica ao lado do título, dentro do mesmo `<summary>`. Como ele está dentro
|
||||||
|
do `<summary>`, clicar nele já aciona o toggle nativo do `<details>` —
|
||||||
|
não precisa de lógica de toggle separada. Um script pequeno escuta o
|
||||||
|
evento `toggle` de cada `<details>` e só atualiza o texto do botão
|
||||||
|
(`Mostrar`↔`Ocultar`) e o atributo `aria-expanded`, para acessibilidade.
|
||||||
|
|
||||||
|
**Estado não é persistido:** toda vez que a página `/log` é carregada, as
|
||||||
|
duas seções começam fechadas — não guarda se o usuário tinha deixado aberta
|
||||||
|
antes (sem localStorage, sem cookie, sem parâmetro de URL). Simplicidade,
|
||||||
|
sem necessidade adicional hoje.
|
||||||
|
|
||||||
|
**Sem mudança de comportamento:** os dados carregados por seção (limite de
|
||||||
|
20 em "Ações no painel", botão "Limpar log" restrito a administradores
|
||||||
|
dentro dessa seção, listagem de envios do n8n) continuam exatamente como
|
||||||
|
estão hoje — só o wrapper de exibição (fechado/aberto) muda.
|
||||||
|
|
||||||
|
## Fora de escopo
|
||||||
|
|
||||||
|
- Lembrar o estado aberto/fechado entre recarregamentos de página.
|
||||||
|
- Abrir automaticamente alguma seção por padrão (as duas começam fechadas).
|
||||||
|
- Qualquer mudança nos dados exibidos, na paginação, no limite de 20 ou no
|
||||||
|
botão de limpar log.
|
||||||
|
|
||||||
|
## Arquivos afetados
|
||||||
|
|
||||||
|
- `app/templates/log.html` — envolver cada seção em `<details>`/`<summary>`,
|
||||||
|
adicionar o botão Mostrar/Ocultar e a seta indicadora dentro do `summary`.
|
||||||
|
- `app/static/estilo.css` — estilo do `<details>`/`<summary>` (remoção do
|
||||||
|
marcador padrão do navegador, seta customizada que gira com `[open]`,
|
||||||
|
espaçamento do botão dentro do `summary`).
|
||||||
|
- Um pequeno `<script>` inline (ou incluído no bloco já existente do
|
||||||
|
template) para sincronizar o texto do botão com o evento `toggle`.
|
||||||
|
|
||||||
|
## Testes
|
||||||
|
|
||||||
|
- Teste de router (`tests/test_router_log.py`) verificando que a resposta
|
||||||
|
de `GET /log` contém os elementos `<details>` para as duas seções, sem o
|
||||||
|
atributo `open`, confirmando que ambas carregam fechadas por padrão.
|
||||||
Reference in New Issue
Block a user