diff --git a/packages/react/src/renderer.test.tsx b/packages/react/src/renderer.test.tsx index fe1a3af4..174ecc29 100644 --- a/packages/react/src/renderer.test.tsx +++ b/packages/react/src/renderer.test.tsx @@ -10,6 +10,7 @@ import { type ComponentRenderProps, } from "./renderer"; import { schema } from "./schema"; +import type { SetState } from "./catalog-types"; describe("Renderer", () => { it("renders null for null spec", () => { @@ -198,3 +199,37 @@ describe("Renderer", () => { warn.mockRestore(); }); }); + +describe("defineRegistry", () => { + it("executes actions when no state setter is available", async () => { + const catalog = defineCatalog(schema, { + components: {}, + actions: { + run: { description: "Run an action" }, + }, + }); + const action = vi.fn( + async ( + _params: Record | undefined, + setState: SetState, + ) => { + setState((prev) => prev); + }, + ); + const { handlers } = defineRegistry(catalog, { + actions: { run: action }, + }); + + const actionHandlers = handlers( + () => undefined, + () => ({}), + ); + const run = actionHandlers.run; + if (!run) { + throw new Error("Expected run action handler"); + } + await run({ value: 1 }); + + expect(action).toHaveBeenCalledWith({ value: 1 }, expect.any(Function), {}); + }); +}); diff --git a/packages/react/src/renderer.tsx b/packages/react/src/renderer.tsx index dc4b741e..9478423d 100644 --- a/packages/react/src/renderer.tsx +++ b/packages/react/src/renderer.tsx @@ -1142,11 +1142,9 @@ export function defineRegistry( > = {}; for (const [name, actionFn] of actionMap) { result[name] = async (params) => { - const setState = getSetState(); + const setState = getSetState() ?? (() => undefined); const state = getState(); - if (setState) { - await actionFn(params, setState, state); - } + await actionFn(params, setState, state); }; } return result;