Skip to content

Commit

Permalink
Add params support in spawnChild
Browse files Browse the repository at this point in the history
  • Loading branch information
Andarist committed Feb 27, 2024
1 parent b421ab9 commit c95f44d
Showing 1 changed file with 37 additions and 8 deletions.
45 changes: 37 additions & 8 deletions packages/core/src/actions/spawnChild.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,23 +25,35 @@ import { resolveReferencedActor } from '../utils.ts';
type ResolvableActorId<
TContext extends MachineContext,
TExpressionEvent extends EventObject,
TParams extends ParameterizedObject['params'] | undefined,
TEvent extends EventObject,
TId extends string | undefined
> = TId | ((args: UnifiedArg<TContext, TExpressionEvent, TEvent>) => TId);
> =
| TId
| ((
args: UnifiedArg<TContext, TExpressionEvent, TEvent>,
params: TParams
) => TId);

function resolveSpawn(
actorScope: AnyActorScope,
snapshot: AnyMachineSnapshot,
actionArgs: ActionArgs<any, any, any>,
_actionParams: ParameterizedObject['params'] | undefined,
actionParams: ParameterizedObject['params'] | undefined,
{
id,
systemId,
src,
input,
syncSnapshot
}: {
id: ResolvableActorId<MachineContext, EventObject, EventObject, string>;
id: ResolvableActorId<
MachineContext,
EventObject,
ParameterizedObject['params'] | undefined,
EventObject,
string
>;
systemId: string | undefined;
src: AnyActorLogic | string;
input?: unknown;
Expand All @@ -52,7 +64,8 @@ function resolveSpawn(
typeof src === 'string'
? resolveReferencedActor(snapshot.machine, src)
: src;
const resolvedId = typeof id === 'function' ? id(actionArgs) : id;
const resolvedId =
typeof id === 'function' ? id(actionArgs, actionParams) : id;

let actorRef: AnyActorRef | undefined;

Expand Down Expand Up @@ -123,10 +136,17 @@ export interface SpawnAction<
interface SpawnActionOptions<
TContext extends MachineContext,
TExpressionEvent extends EventObject,
TParams extends ParameterizedObject['params'] | undefined,
TEvent extends EventObject,
TActor extends ProvidedActor
> {
id?: ResolvableActorId<TContext, TExpressionEvent, TEvent, TActor['id']>;
id?: ResolvableActorId<
TContext,
TExpressionEvent,
TParams,
TEvent,
TActor['id']
>;
systemId?: string;
input?:
| Mapper<TContext, TEvent, InputFrom<TActor['logic']>, TEvent>
Expand All @@ -137,6 +157,7 @@ interface SpawnActionOptions<
type DistributeActors<
TContext extends MachineContext,
TExpressionEvent extends EventObject,
TParams extends ParameterizedObject['params'] | undefined,
TEvent extends EventObject,
TActor extends ProvidedActor
> = TActor extends any
Expand All @@ -146,6 +167,7 @@ type DistributeActors<
options?: SpawnActionOptions<
TContext,
TExpressionEvent,
TParams,
TEvent,
TActor
> & {
Expand All @@ -159,14 +181,21 @@ type DistributeActors<
type SpawnArguments<
TContext extends MachineContext,
TExpressionEvent extends EventObject,
TParams extends ParameterizedObject['params'] | undefined,
TEvent extends EventObject,
TActor extends ProvidedActor
> = IsLiteralString<TActor['src']> extends true
? DistributeActors<TContext, TExpressionEvent, TEvent, TActor>
? DistributeActors<TContext, TExpressionEvent, TParams, TEvent, TActor>
: [
src: string | AnyActorLogic,
options?: {
id?: ResolvableActorId<TContext, TExpressionEvent, TEvent, string>;
id?: ResolvableActorId<
TContext,
TExpressionEvent,
TParams,
TEvent,
string
>;
systemId?: string;
input?: unknown;
syncSnapshot?: boolean;
Expand All @@ -183,7 +212,7 @@ export function spawnChild<
...[
src,
{ id, systemId, input, syncSnapshot = false } = {} as any
]: SpawnArguments<TContext, TExpressionEvent, TEvent, TActor>
]: SpawnArguments<TContext, TExpressionEvent, TParams, TEvent, TActor>
): ActionFunction<
TContext,
TExpressionEvent,
Expand Down

0 comments on commit c95f44d

Please sign in to comment.