Files
labelmain-demo/components/label/useTimerStore.ts
2026-02-03 18:05:47 +08:00

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 }))
},
}))