Portal Community

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 FieldRequiredDescription
targetFormIdYesThe name of the target property form
keyFieldYesThe field ID in the list form whose value is the record key
queryParamNo (default: id)URL query parameter name for the key
targetNo (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"
      }
    }
  ]
}