@stainless-code/persist
Version:
Hydration-aware persistence for any reactive store — zero-dep persistSource core; codecs, backends, cross-tab transport, source + framework hydration adapters ship as opt-in recipes
20 lines (19 loc) • 611 B
JavaScript
import { useSyncExternalStore } from "preact/compat";
//#region src/adapters/frameworks/preact.ts
const noopSubscribe = () => () => {};
const alwaysTrue = () => true;
/**
* Mount a `HydrationSignal` into Preact.
*
* @example
* ```ts
* import { useHydrated } from "@stainless-code/persist/frameworks/preact";
* const { hydrated } = useHydrated(prefsHydration);
* if (!hydrated) return <Skeleton />;
* ```
*/
function useHydrated(signal) {
return { hydrated: useSyncExternalStore(signal?.subscribeHydrated ?? noopSubscribe, signal?.isHydrated ?? alwaysTrue, alwaysTrue) };
}
//#endregion
export { useHydrated };