Skip to content

Add action handler system for widget event handling#6

Merged
foreleven merged 3 commits intomainfrom
copilot/add-common-action-handle
Nov 10, 2025
Merged

Add action handler system for widget event handling#6
foreleven merged 3 commits intomainfrom
copilot/add-common-action-handle

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Nov 10, 2025

Implements a structured event handling system allowing widgets to dispatch typed actions from template expressions.

Changes

Expression executor (packages/widget/src/Expression.ts)

  • Added ActionCallback type: (action: {type: string, payload?: unknown}) => void
  • Extended executeExpression to accept optional action callback
  • Injected action function into expression sandbox alongside data, Math, etc.

Widget renderer (packages/widget-renderer/src/)

  • Created ActionContext with useAction hook for components
  • Added onAction?: ActionCallback prop to WidgetRenderer
  • Propagated action through expression resolution and component tree

Example usage

  • Updated default template and Button definition with action handler examples

Usage

Templates can dispatch actions from event handlers:

<Button onClick={action({type: "driver.contact", payload: data.driver.name})}>
  Contact Driver
</Button>

Application handles actions via callback:

<WidgetRenderer 
  schema={schema}
  components={components}
  data={data}
  onAction={(action) => {
    // action.type: "driver.contact"
    // action.payload: "Jonathan"
  }}
/>

The action function is available in all expression contexts alongside data, enabling declarative event handling without breaking expression evaluation.

Original prompt

Design a common action handle for events on widgets

  • Add a events variant includes onClick or other common events
  • Add ActionContext and useAction provided by WidgetRenderer witch supporting a onAction prop at sometime
  • Passing the action function to the expression executer
  • Usage in template onClick={action({type:"biz.test", payload: data.id})}

💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

Copilot AI and others added 2 commits November 10, 2025 09:49
Co-authored-by: foreleven <4785594+foreleven@users.noreply.github.com>
Co-authored-by: foreleven <4785594+foreleven@users.noreply.github.com>
Copilot AI changed the title [WIP] Add common action handle for widget events Add action handler system for widget event handling Nov 10, 2025
Copilot AI requested a review from foreleven November 10, 2025 10:00
@foreleven foreleven marked this pull request as ready for review November 10, 2025 11:05
@foreleven foreleven merged commit 95ed6a5 into main Nov 10, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants