Atualização Automatica dos numeros e correção de erro e falha de segurança

This commit is contained in:
2026-07-06 17:31:58 -03:00
parent 89b12fc91b
commit 96b7b03f57
16 changed files with 352 additions and 15 deletions

View File

@@ -0,0 +1,45 @@
import { Controller } from "@hotwired/stimulus"
// Atualiza o painel automaticamente, sem o usuário precisar apertar F5.
//
// A cada `interval` ms faz um Turbo.visit "replace" na própria URL: o Turbo
// re-renderiza o corpo (KPIs, gráficos, mapa) e re-executa os <script> inline,
// preservando os filtros — que vivem na query string. Pausa quando a aba está
// oculta ou quando o usuário está com um campo em foco, e restaura a posição de
// rolagem após cada atualização (para não "pular" para o topo).
//
// Uso:
// <div data-controller="auto-refresh"
// data-auto-refresh-interval-value="300000"> ... </div>
export default class extends Controller {
static values = { interval: { type: Number, default: 300000 } } // 5 min
connect() {
// Restaura a rolagem salva antes da última atualização automática.
const y = sessionStorage.getItem("autoRefreshScroll")
if (y !== null) {
window.scrollTo(0, parseInt(y, 10))
sessionStorage.removeItem("autoRefreshScroll")
}
this.timer = setInterval(() => this.refresh(), this.intervalValue)
}
disconnect() {
clearInterval(this.timer)
}
refresh() {
// Não recarrega em aba oculta (economiza recursos) nem se o usuário estiver
// digitando/selecionando algo (evita perder o que está fazendo).
if (document.visibilityState !== "visible") return
const ativo = document.activeElement
if (ativo && ["INPUT", "SELECT", "TEXTAREA"].includes(ativo.tagName)) return
sessionStorage.setItem("autoRefreshScroll", String(window.scrollY))
if (window.Turbo) {
window.Turbo.visit(window.location.href, { action: "replace" })
} else {
window.location.reload()
}
}
}