From c95f44daecf5a06dfb1a96d5aca04e338dab7b2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Tue, 27 Feb 2024 10:51:11 +0100 Subject: [PATCH] Add `params` support in `spawnChild` --- packages/core/src/actions/spawnChild.ts | 45 ++++++++++++++++++++----- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/packages/core/src/actions/spawnChild.ts b/packages/core/src/actions/spawnChild.ts index aa383919ec..4ec1612abc 100644 --- a/packages/core/src/actions/spawnChild.ts +++ b/packages/core/src/actions/spawnChild.ts @@ -25,15 +25,21 @@ 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) => TId); +> = + | TId + | (( + args: UnifiedArg, + params: TParams + ) => TId); function resolveSpawn( actorScope: AnyActorScope, snapshot: AnyMachineSnapshot, actionArgs: ActionArgs, - _actionParams: ParameterizedObject['params'] | undefined, + actionParams: ParameterizedObject['params'] | undefined, { id, systemId, @@ -41,7 +47,13 @@ function resolveSpawn( input, syncSnapshot }: { - id: ResolvableActorId; + id: ResolvableActorId< + MachineContext, + EventObject, + ParameterizedObject['params'] | undefined, + EventObject, + string + >; systemId: string | undefined; src: AnyActorLogic | string; input?: unknown; @@ -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; @@ -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; + id?: ResolvableActorId< + TContext, + TExpressionEvent, + TParams, + TEvent, + TActor['id'] + >; systemId?: string; input?: | Mapper, TEvent> @@ -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 @@ -146,6 +167,7 @@ type DistributeActors< options?: SpawnActionOptions< TContext, TExpressionEvent, + TParams, TEvent, TActor > & { @@ -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 extends true - ? DistributeActors + ? DistributeActors : [ src: string | AnyActorLogic, options?: { - id?: ResolvableActorId; + id?: ResolvableActorId< + TContext, + TExpressionEvent, + TParams, + TEvent, + string + >; systemId?: string; input?: unknown; syncSnapshot?: boolean; @@ -183,7 +212,7 @@ export function spawnChild< ...[ src, { id, systemId, input, syncSnapshot = false } = {} as any - ]: SpawnArguments + ]: SpawnArguments ): ActionFunction< TContext, TExpressionEvent,