Skip to main content

assets/js/skua/hooks/toast.js

/* SkuaToast — auto-dismiss timer for a flash toast.

   Reads data-autodismiss (ms; 0 disables) and clicks the toast (which runs the
   server flash-clear + hide JS) after the timeout. Hovering pauses the timer so
   a message is never yanked away mid-read.
*/
export default {
  mounted() {
    this.ms = parseInt(this.el.dataset.autodismiss || "0", 10);
    this.arm();
    this.onEnter = () => clearTimeout(this.timer);
    this.onLeave = () => this.arm();
    this.el.addEventListener("mouseenter", this.onEnter);
    this.el.addEventListener("mouseleave", this.onLeave);
  },

  updated() {
    this.arm();
  },

  destroyed() {
    clearTimeout(this.timer);
    this.el.removeEventListener("mouseenter", this.onEnter);
    this.el.removeEventListener("mouseleave", this.onLeave);
  },

  arm() {
    clearTimeout(this.timer);
    if (this.ms > 0) this.timer = setTimeout(() => this.el.click(), this.ms);
  },
};