24 lines
584 B
TypeScript
24 lines
584 B
TypeScript
"use client"
|
|
|
|
import { useEffect, useState } from "react"
|
|
|
|
type PersistApi = {
|
|
hasHydrated: () => boolean
|
|
onFinishHydration: (fn: () => void) => () => void
|
|
}
|
|
|
|
/** True after a zustand `persist` store has rehydrated from storage (client-only). */
|
|
export function usePersistHydrated(store: { persist: PersistApi }): boolean {
|
|
const [hydrated, setHydrated] = useState(false)
|
|
|
|
useEffect(() => {
|
|
if (store.persist.hasHydrated()) {
|
|
setHydrated(true)
|
|
return
|
|
}
|
|
return store.persist.onFinishHydration(() => setHydrated(true))
|
|
}, [store])
|
|
|
|
return hydrated
|
|
}
|