@cran/lib.vue.ref
Version:
Vue Reactivity Extensions
52 lines (51 loc) • 1.38 kB
JavaScript
;
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;