UNPKG

@cran/lib.vue.ref

Version:

Vue Reactivity Extensions

52 lines (51 loc) 1.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useInterval = void 0; const utility_1 = require("../utility"); const vue_1 = require("vue"); /** * @since 0.2.0 * @category Controller */ function useInterval(callback, ms, { paused = false, leading = false, trailing = false, } = {}) { let intervalId = null; const isActive = (0, vue_1.ref)(false); function clear() { if (intervalId) { clearInterval(intervalId); intervalId = null; } } function stop() { isActive.value = false; clear(); if (trailing) { callback(); } } function start() { if (!isActive.value) { isActive.value = true; if (leading) { callback(); } clear(); intervalId = setInterval(callback, (0, utility_1.unwrap)(ms)); } } function restart() { if (isActive.value) { isActive.value = false; start(); } } if (!paused) { start(); } if ((0, utility_1.isWrapped)(ms)) { (0, utility_1.tryOnScopeDispose)((0, vue_1.watch)(ms, restart)); } (0, utility_1.tryOnScopeDispose)(stop); return { isActive: (0, vue_1.readonly)(isActive), stop, start, restart, }; } exports.useInterval = useInterval;