From e5ee0315229135614e315839b30037516fe1f77c Mon Sep 17 00:00:00 2001 From: Bruno Cangussu Date: Mon, 20 Jan 2025 16:32:22 -0300 Subject: [PATCH] Made it so actor snapshots behaves correctly when passed undefined, allowing for more usecases (#12) --- src/atomWithActorSnapshot.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/atomWithActorSnapshot.ts b/src/atomWithActorSnapshot.ts index bb2bf09..ec5f9dc 100644 --- a/src/atomWithActorSnapshot.ts +++ b/src/atomWithActorSnapshot.ts @@ -6,7 +6,7 @@ import { type AnyActor, type SnapshotFrom, type Subscription } from 'xstate'; import { isGetter } from './utils.js'; export function atomWithActorSnapshot( - getActor: TActor | ((get: Getter) => TActor), + getActor: undefined | TActor | ((get: Getter) => TActor | undefined), ): WritableAtom, never[], void> { const actorAtom = atom((get) => isGetter(getActor) ? getActor(get) : getActor, @@ -34,6 +34,7 @@ export function atomWithActorSnapshot( if (dontRenew) return; const actor = get(actorAtom); + if (!actor) return; set(cachedActorSnapshotAtom, actor.getSnapshot()); const sub = actor.subscribe((nextSnapshot: SnapshotFrom) => { @@ -48,7 +49,7 @@ export function atomWithActorSnapshot( get(subscriptionAtom); return ( get(cachedActorSnapshotAtom) ?? - (get(actorAtom).getSnapshot() as SnapshotFrom) + (get(actorAtom)?.getSnapshot() as SnapshotFrom) ); }, (_, set, registerCleanup: (cleanup: () => void) => void) => {