feat(project): init
This commit is contained in:
67
components/label/useTimerStore.ts
Normal file
67
components/label/useTimerStore.ts
Normal file
@@ -0,0 +1,67 @@
|
||||
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 }))
|
||||
},
|
||||
}))
|
||||
Reference in New Issue
Block a user