68 lines
1.5 KiB
TypeScript
68 lines
1.5 KiB
TypeScript
import { create } from "zustand"
|
|
|
|
interface TimerStore {
|
|
timer: NodeJS.Timeout | null
|
|
startTimer: (fn: Function, delay: number) => void
|
|
clearTimer: () => void
|
|
}
|
|
|
|
export const useTimerStore = create<TimerStore>((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<IntervalStore>((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 }))
|
|
},
|
|
}))
|