@thy-rathana/nuxt-infinite-scroll
Version:
Look at the [Nuxt documentation](https://nuxt.com/docs/getting-started/introduction) to learn more.
39 lines (37 loc) • 868 B
JavaScript
// composables/useTimer.ts
import { onBeforeUnmount } from "vue";
var useTimer = (autoClearSideEffect = true) => {
const timers = /* @__PURE__ */ new Set();
const intervals = /* @__PURE__ */ new Map();
const addTimer = (fn, delay) => {
const timer = setTimeout(() => {
fn();
timers.delete(timer);
}, delay);
timers.add(timer);
};
onBeforeUnmount(() => {
if (autoClearSideEffect) {
timers.forEach(clearTimeout);
timers.clear();
intervals.forEach(clearInterval);
intervals.clear();
}
});
const addInterval = (fn, interval, key) => {
if (!key || !intervals.has(key)) {
const timer = setInterval(() => {
fn();
}, interval);
intervals.set(key ?? Date.now().toString(), timer);
}
};
return {
addInterval,
addTimer,
timers
};
};
export {
useTimer
};