UNPKG

@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

29 lines (28 loc) • 863 B
import { effect, signal } from "@angular/core"; //#region src/adapters/frameworks/angular.ts const alwaysTrue = signal(true); /** * Mount a `HydrationSignal` into Angular signals. Call inside a component's * injection context (`effect()` requires it). * * @example * ```ts * import { useHydrated } from "@stainless-code/persist/frameworks/angular"; * // in a component * hydrated = useHydrated(prefsHydration); * // template: @if (hydrated()) { <Prefs /> } @else { <Skeleton /> } * ``` */ function useHydrated(signalSource) { if (!signalSource) return alwaysTrue; const hydrated = signal(signalSource.isHydrated()); effect((onCleanup) => { hydrated.set(signalSource.isHydrated()); onCleanup(signalSource.subscribeHydrated(() => { hydrated.set(signalSource.isHydrated()); })); }); return hydrated.asReadonly(); } //#endregion export { useHydrated };