Skip to content

Commit

Permalink
Establish API for generic controller class
Browse files Browse the repository at this point in the history
- Implements #3627
  • Loading branch information
MajorLift committed Mar 3, 2024
1 parent 841ec93 commit f1705fc
Showing 1 changed file with 21 additions and 5 deletions.
26 changes: 21 additions & 5 deletions packages/composable-controller/src/ComposableController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -132,10 +132,26 @@ export type ComposableControllerMessenger = RestrictedControllerMessenger<
/**
* Controller that can be used to compose multiple controllers together.
*/
export class ComposableController extends BaseController<
export class ComposableController<
ChildControllers extends ControllerInstance,
ComposedControllerState extends ComposableControllerState,
ComposedControllerStateChangeEvent extends EventConstraint & {
type: `${typeof controllerName}:stateChange`;
},
ChildControllersStateChangeEvents extends EventConstraint & {
type: `${string}:stateChange`;
},
ComposedControllerMessenger extends ComposableControllerMessenger = RestrictedControllerMessenger<
typeof controllerName,
never,
ComposedControllerStateChangeEvent | ChildControllersStateChangeEvents,
never,
ChildControllersStateChangeEvents['type']
>,
> extends BaseController<
typeof controllerName,
ComposableControllerState,
ComposableControllerMessenger
ComposedControllerState,
ComposedControllerMessenger
> {
/**
* Creates a ComposableController instance.
Expand All @@ -149,8 +165,8 @@ export class ComposableController extends BaseController<
controllers,
messenger,
}: {
controllers: ControllerInstance[];
messenger: ComposableControllerMessenger;
controllers: ChildControllers[];
messenger: ComposedControllerMessenger;
}) {
if (messenger === undefined) {
throw new Error(`Messaging system is required`);
Expand Down

0 comments on commit f1705fc

Please sign in to comment.