, correção de UX para gerara prévia do romaneio

This commit is contained in:
2026-08-28 12:13:42 -03:00
parent b690dfb54c
commit 1143ed373b
6 changed files with 191 additions and 70 deletions

View File

@@ -131,10 +131,15 @@ export default class extends Controller {
this.buscaTarget.focus()
}
// ── Prévia (bloco <details> nativo) ─────────────────────────────────────
// Abrir e fechar é do NAVEGADOR — o <details> não depende deste controller,
// e é isso que mantém a prévia viva quando o JavaScript não carrega. O que
// sobra aqui é só recarregar a folha depois de uma edição.
// ── Prévia (pop-up por :target, CSS puro) ───────────────────────────────
// Abrir, fechar e trocar de folha são do NAVEGADOR: link para `#previa`,
// link para `#sem-previa` e links `?veiculo=X#previa`. Nada disso depende
// deste controller — é o que mantém a prévia viva quando o JS não carrega.
// O que sobra aqui é recarregar a folha depois de uma edição.
previewAberta() {
return this.hasOverlayTarget && this.overlayTarget.matches(":target")
}
carregarPreview() {
if (!this.hasPreviewTarget) return
@@ -145,23 +150,21 @@ export default class extends Controller {
this.previewDesatualizado = false
}
// Chamada depois de cada gravação. Com o bloco FECHADO não gera PDF nenhum —
// Chamada depois de cada gravação. Com o pop-up FECHADO não gera PDF nenhum —
// o `loading="lazy"` do iframe já garante isso, e recarregar o src de um
// iframe escondido forçaria o servidor a montar um PDF que ninguém vai ver.
atualizarPreview() {
if (!this.hasOverlayTarget || !this.overlayTarget.open) {
if (!this.previewAberta()) {
this.previewDesatualizado = true
return
}
this.carregarPreview()
}
// O operador pode abrir a prévia depois de ter editado: neste caso o iframe
// ainda mostra a folha antiga, então recarregamos no momento da abertura.
aoAbrirPreview() {
if (this.hasOverlayTarget && this.overlayTarget.open && this.previewDesatualizado) {
this.carregarPreview()
}
// O operador pode abrir a prévia DEPOIS de editar: aí o iframe ainda mostra a
// folha antiga. Como quem abre é o `:target`, o gancho é o hashchange.
aoTrocarHash() {
if (this.previewAberta() && this.previewDesatualizado) this.carregarPreview()
}
// ── Infra ───────────────────────────────────────────────────────────────