Skip to content

Commit

Permalink
Made it so actor snapshots behaves correctly when passed undefined, a…
Browse files Browse the repository at this point in the history
…llowing for more usecases (#12)
  • Loading branch information
brunocangs authored Jan 20, 2025
1 parent 582b941 commit e5ee031
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions src/atomWithActorSnapshot.ts
Original file line number Diff line number Diff line change
@@ -6,7 +6,7 @@ import { type AnyActor, type SnapshotFrom, type Subscription } from 'xstate';
import { isGetter } from './utils.js';

export function atomWithActorSnapshot<TActor extends AnyActor>(
getActor: TActor | ((get: Getter) => TActor),
getActor: undefined | TActor | ((get: Getter) => TActor | undefined),
): WritableAtom<SnapshotFrom<TActor>, never[], void> {
const actorAtom = atom((get) =>
isGetter(getActor) ? getActor(get) : getActor,
@@ -34,6 +34,7 @@ export function atomWithActorSnapshot<TActor extends AnyActor>(
if (dontRenew) return;

const actor = get(actorAtom);
if (!actor) return;
set(cachedActorSnapshotAtom, actor.getSnapshot());

const sub = actor.subscribe((nextSnapshot: SnapshotFrom<TActor>) => {
@@ -48,7 +49,7 @@ export function atomWithActorSnapshot<TActor extends AnyActor>(
get(subscriptionAtom);
return (
get(cachedActorSnapshotAtom) ??
(get(actorAtom).getSnapshot() as SnapshotFrom<TActor>)
(get(actorAtom)?.getSnapshot() as SnapshotFrom<TActor>)
);
},
(_, set, registerCleanup: (cleanup: () => void) => void) => {

0 comments on commit e5ee031

Please sign in to comment.