import { create } from "zustand" interface TimerStore { timer: NodeJS.Timeout | null startTimer: (fn: Function, delay: number) => void clearTimer: () => void } export const useTimerStore = create((set, get) => ({ timer: null, startTimer: (fn, delay) => { const { timer } = get() if (timer !== null) { clearTimeout(timer) } const t = setTimeout(() => { fn() }, delay) set({ timer: t }) }, clearTimer: () => { const { timer } = get() if (timer !== null) { clearTimeout(timer) set({ timer: null }) } }, })) interface IntervalStore { timer: NodeJS.Timeout | null startTimer: (fn: Function, delay: number) => void clearTimer: () => void isAutoSave: boolean setIsAutoSave: (isAutoSave: boolean) => void autoSaveGap: number setAutoSaveGap: (autoSaveGap: number) => void } export const useIntervalStore = create((set, get) => ({ timer: null, isAutoSave: false, autoSaveGap: 5, startTimer: (fn, delay) => { const { timer } = get() if (timer !== null) { clearInterval(timer) } const t = setInterval(() => { fn() }, delay) set((state) => ({ ...state, timer: t })) }, clearTimer: () => { const { timer } = get() if (timer !== null) { clearInterval(timer) set((state) => ({ ...state, timer: null })) } }, setIsAutoSave: (flag: boolean) => { set((state) => ({ ...state, isAutoSave: flag })) }, setAutoSaveGap: (value: number) => { set((state) => ({ ...state, autoSaveGap: value })) }, }))