Link Action — Matrix Dispatch
The link action implements matrix dispatch — the pattern where a list form dispatches to a property form based on a selected record's key. When the user selects a row and clicks a Link action, the system navigates to the target form passing the record's key as a parameter.
What is Matrix Dispatch?
Matrix dispatch is the core navigation pattern for Form Groups. A List Form shows a data-table of records. Each row has a key field (e.g., policyId). A Link action in the action bar reads the selected row's key and navigates to the Property Form for that record.
This creates the Master/Detail pattern without custom routing code.
Schema Example
// List form action bar — opens the Security Policy property form
{
"type": "link",
"label": "Edit Policy",
"variant": "primary",
"icon": "edit",
"config": {
"targetFormId": "security-policy-property",
"keyField": "policyId",
"queryParam": "id"
}
}
// Clicking this with policyId=42 selected navigates to:
// /forms/security-policy-property?id=42
Config Reference
| Config Field | Required | Description |
|---|---|---|
targetFormId | Yes | The name of the target property form |
keyField | Yes | The field ID in the list form whose value is the record key |
queryParam | No (default: id) | URL query parameter name for the key |
target | No (default: _self) | Open in same tab or new tab |
Selecting a Row in the data-table
The link action reads the keyField value from the currently selected row in the data-table. If no row is selected, the link action button is disabled automatically. The data-table must have selectable: true in its settings for selection to work:
{
"id": "policies-table",
"type": "data-table",
"settings": {
"selectable": true,
"columns": [
{ "field": "policyId", "label": "ID" },
{ "field": "name", "label": "Policy Name" },
{ "field": "status", "label": "Status" }
]
}
}
Real-World Example: GuardRails
The GuardRails Security Policy list form (Form 13001) uses the link action to dispatch to the Security Policy property form (Form 13002):
// GuardRails List Form (13001) — action bar
{
"actions": [
{
"type": "link",
"label": "Configure Policy",
"variant": "primary",
"icon": "shield-halved",
"config": {
"targetFormId": "guardRails-security-policy",
"keyField": "securityPolicyId"
}
},
{
"type": "link",
"label": "View Node Capabilities",
"variant": "secondary",
"config": {
"targetFormId": "guardRails-node-capability-policy",
"keyField": "securityPolicyId"
}
}
]
}