♻️ (builder) Change to features-centric folder structure
This commit is contained in:
committed by
Baptiste Arnaud
parent
3686465a85
commit
643571fe7d
32
apps/builder/src/hooks/useAutoSave.ts
Normal file
32
apps/builder/src/hooks/useAutoSave.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
import { useEffect } from 'react'
|
||||
import { useDebounce } from 'use-debounce'
|
||||
|
||||
export const useAutoSave = <T>(
|
||||
{
|
||||
handler,
|
||||
item,
|
||||
debounceTimeout,
|
||||
}: {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
handler: () => Promise<any>
|
||||
item?: T
|
||||
debounceTimeout: number
|
||||
},
|
||||
dependencies: unknown[]
|
||||
) => {
|
||||
const [debouncedItem] = useDebounce(item, debounceTimeout)
|
||||
|
||||
useEffect(() => {
|
||||
const save = () => handler()
|
||||
document.addEventListener('visibilitychange', save)
|
||||
return () => {
|
||||
document.removeEventListener('visibilitychange', save)
|
||||
}
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, dependencies)
|
||||
|
||||
return useEffect(() => {
|
||||
handler()
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [debouncedItem])
|
||||
}
|
||||
Reference in New Issue
Block a user