import { Controller } from "@hotwired/stimulus" export default class extends Controller { static values = { interval: { type: Number, default: 10000 } } connect() { this.timer = setInterval(() => this.refresh(), this.intervalValue) } disconnect() { clearInterval(this.timer) } refresh() { if (document.hidden) return const frame = this.element.closest("turbo-frame") if (frame && typeof frame.reload === "function") { this.reloadFrame(frame) return } this.refreshPreservingScroll() } reloadFrame(frame) { if (frame.hasAttribute("busy")) return const url = window.location.href if (frame.getAttribute("src") === url) { frame.reload() } else { frame.setAttribute("src", url) } } refreshPreservingScroll() { const { scrollX, scrollY } = window const restore = () => window.scrollTo(scrollX, scrollY) document.addEventListener("turbo:render", restore, { once: true }) document.addEventListener("turbo:load", restore, { once: true }) if (window.Turbo?.visit) { window.Turbo.visit(window.location.href, { action: "replace" }) } else { window.location.reload() } } }