Table card
The Table card renders a paginated Neops entity search with configurable columns, links, selection, editing, and task actions.
When to use it
Use it when dashboard readers need row-level entity data from a live backend query. Use Static data table when rows are already embedded inside the dashboard context as a JSON array.
Live example
The Card Lab supplies a deterministic constrained entity-search service to the production table. Mutation controls are omitted from this read-only fixture.
Open the Table Card Lab in a new page
Requirements
| Requirement | Value |
|---|---|
| Dashboard types | Standard and aggregation |
| Minimum size | 5 columns by 2 rows |
| Data | Paginated rows for one Neops entity type |
| Backend capabilities | Entity search; task APIs for configured actions or edits |
| Permissions | Entity read access plus task permissions for every configured action |
Configuration
This card has no guided editor in SDK 5.2.0; configure it in expert JSON.
The paths below are relative to cardConfig.data.
Fields marked required come from the saved configuration contract; no implicit value should be assumed when one is omitted.
Table presentation
| Path | Type | Required | Default and visible effect |
|---|---|---|---|
entityType |
String | Yes | No default. Values: device, interface, client, group. Selects the backend row service. |
localCardFilter |
JMESPath expression | No | No filter. Filters this card’s incoming entity array before rendering. |
title |
Interpolated string | No | No saved default. Shown above the table when non-empty. |
description |
String | No | No saved default. Shown under the card title. |
disableEdit |
Boolean | No | No saved default. Disables edit mode when true. |
enableSingleSelect |
Boolean | No | No saved default. Omission behaves as false; setting true restricts selection to one row. |
expandable |
Boolean | No | No saved default. Omission behaves as false; setting true enables row expansion when the host supplies expansion content. |
batchText |
String | No | No saved default. Labels the selected-row batch state when provided. |
searchDisabled |
Boolean | No | No saved default. Hides table search when true. |
searchExpandable |
Boolean | No | No saved default. Omission behaves as false; setting true lets the search control expand and collapse. |
hideCellEditButton |
Boolean | No | No saved default. Hides the per-cell edit affordance. |
searchModelPlaceHolder |
String | No | No saved default. Sets the search input hint when provided. |
selectable |
Boolean | No | No saved default. Omission behaves as false; setting true enables row selection. |
sortable |
Boolean | No | No saved default. Omission behaves as false; setting true enables sorting for columns with header.orderKey. |
itemsPerPageOptions |
Integer array | No | No saved default. When provided, the current backend page length is added if absent. |
stickyHeader |
Boolean | No | No saved default. Omission behaves as false; setting true keeps headings visible while the table scrolls. |
toolbarDisabled |
Boolean | No | No saved default. Omission behaves as false; setting true hides the toolbar. |
allowToHidePagination |
Boolean | No | Runtime migration fallback false. Allows pagination controls to hide when all rows fit. Saved configurations written before card version 2 carried this as hidePagination; the card’s 1 to 2 migration renames it on load. |
rowModalDisabled |
Boolean | No | false. Setting true removes the built-in “Show in dialog” row action; the actions column disappears entirely when no context-menu entry is configured either. |
emptyMessage |
String | No | No elements found.. Replaces the message shown when the query returns no rows. |
Row interaction
A click on a row body runs the configured drilldown.
Clicks that land on interactive cell content, and clicks while a cell is in edit mode, are ignored.
This is independent of the “Show in dialog” row action, which rowModalDisabled controls.
| Path | Type | Required | Default and visible effect |
|---|---|---|---|
rowDrilldown |
Object | No | Omitted behaves as { "type": "entity-detail" } because the Table card always has an entityType. |
rowDrilldown.type |
String enum | Yes | No default. entity-detail opens the row’s entity detail page, dashboard opens another dashboard, none makes rows inert. |
rowDrilldown.urlPath |
String | For dashboard |
No default. Dashboard path, resolved relative to the current dashboard. |
rowDrilldown.params |
Object of JMESPath expressions | No | No extra query parameters. Each value is evaluated against the clicked row and merged into urlPath’s query string. Only non-empty strings, numbers, and booleans are emitted; objects, arrays, empty strings, and null results are dropped. |
The entity-detail drilldown needs the host application to provide the SDK’s entity page routes.
The Neops web client does; a host that does not gets one console warning and inert rows.
Columns
| Path | Type | Required | Default and visible effect |
|---|---|---|---|
columns |
Array | Yes | No default. Defines columns in display order. |
columns[].header |
Object | Yes | No default. Contains heading metadata. |
columns[].header.data |
String | No | -. Visible heading label. |
columns[].header.orderKey |
String | No | Not sortable. Backend ordering key for this column. |
columns[].header.columnSize |
String | No | Grow. Values: xs, sm, md, lg, xl, xxl, grow. |
columns[].header.visible |
Boolean | No | true. Hides the column when false. |
columns[].labelExpression |
JMESPath expression | Yes | No default. Evaluated against each entity to produce the displayed value. |
columns[].linkExpression |
JMESPath expression | No | No link. Evaluated per row; a result makes the cell navigate through the dashboard navigation helper. |
columns[].domain |
String | No | Text-like fallback. Values include text, ip, date, number, choices, multiChoices, boolean, check, button, croneExpression. |
columns[].showAs |
String | No | Inferred from the domain. Values include text, date, boolean-success, boolean-checkbox, action-cron, button-checks-facts. |
columns[].showAsConfig |
Object | No | No renderer-specific settings. Shape depends on showAs. |
columns[].listItemProperty |
String | For multiChoices |
No default. Selects the label property from every array item. |
columns[].editorConfig |
Object | No | Read-only cell. Adds edit behavior and requires a compatible domain. |
columns[].editorConfig.editDisabled |
Boolean | No | false. Disables editing for this column when true. |
columns[].editorConfig.domainConfig |
Object | No | No constraints. Configures numeric or choice editors. |
columns[].editorConfig.domainConfig.min |
Number | No | No minimum. |
columns[].editorConfig.domainConfig.max |
Number | No | No maximum. |
columns[].editorConfig.domainConfig.precision |
Number | No | No explicit precision. |
columns[].editorConfig.domainConfig.choices |
Array | No | Empty array. Static Carbon choice items. |
columns[].editorConfig.domainConfig.choicesFromQuery |
String path | No | No dynamic choices. Reads choices from the current entity and takes precedence over choices. |
columns[].editorConfig.editValueQuery |
JMESPath expression | When editing | No default. Reads the current edit value from the row. |
columns[].editorConfig.editCellProperty |
String path | With onGlobalSave |
No default. Names the property placed in the bulk edit payload. |
columns[].editorConfig.onNewValue |
Action object | For immediate task-backed edits | No action. Executes after a changed value unless onGlobalSave is configured. |
Menus and actions
heroButton is the primary toolbar action.
toolbar and globalMenu are ordered arrays of secondary actions.
| Path | Type | Required | Default and visible effect |
|---|---|---|---|
heroButton |
Menu action object | No | No visible primary action when omitted at runtime. |
heroButton.label |
String | Yes | Button label. |
heroButton.type |
String enum | Yes | Action behavior. EXECUTE_TASK can open the task panel with selected IDs or the current scoped query. |
heroButton.column |
Integer | For column-edit actions | Column index used by column-edit actions. |
heroButton.onClick |
Action object | For execution actions | Task configuration used by execution actions. |
toolbar |
Array of menu action objects | No | Empty or omitted produces no secondary toolbar actions. |
toolbar[].label |
String | Yes | Visible action label. |
toolbar[].type |
String enum | Yes | Supports EDIT_ALL_SELECTED, EDIT_SPECIFIC_COLUMN, EXECUTE_TASK_FOR_SELECTED, and EXECUTE_TASK_ON_TASK_PANEL_FOR_SELECTED. |
toolbar[].column |
Integer | For EDIT_SPECIFIC_COLUMN |
Zero-based column index used by that action. |
toolbar[].onClick |
Action object | For execution actions | Task configuration for execution action types. |
globalMenu |
Array of menu action objects | No | Empty or omitted produces no global menu actions. |
globalMenu[].label |
String | Yes | Visible menu label. |
globalMenu[].type |
String enum | Yes | Supports column editing and selected-row task execution; unsupported values show a configuration error. |
globalMenu[].column |
Integer | For EDIT_SPECIFIC_COLUMN |
Zero-based column index used by that action. |
globalMenu[].onClick |
Action object | For execution actions | Task configuration for execution actions. |
onGlobalSave |
Action object | No | No bulk save. When present, edited cells are collected and sent through one task instead of executing per-cell tasks. |
The shared Action shape below is used at:
heroButton.onClicktoolbar[].onClickglobalMenu[].onClickonGlobalSavecolumns[].editorConfig.onNewValue
| Property | Type | Required | Default and effect |
|---|---|---|---|
uniqueTaskName |
String | When executing | No default. Exact task unique name. |
executeOnType |
String enum | When executing | No default. CLIENT, DEVICE, GENERIC, GLOBAL, GROUP, or INTERFACE. |
valueProperty |
String path | When an immediate edit passes the new value | No default. Places the edited value into nested task arguments. |
staticTaskArguments |
Object | No | Empty object. Merged into task input. |
successResult |
Result object | No | Built-in success notification. Optional fields: title, message, and severity info, error, or success. |
errorResult |
Result object | No | Built-in error notification. Optional fields: title, message, and severity info, error, or success. |
Examples
Read-only device inventory
{
"cardId": "table",
"data": {
"entityType": "device",
"title": "Devices",
"description": "Current dashboard scope",
"enableSingleSelect": false,
"expandable": false,
"batchText": "Device(s) selected",
"searchExpandable": true,
"searchModelPlaceHolder": "Search devices",
"selectable": false,
"sortable": true,
"heroButton": null,
"toolbar": [],
"globalMenu": [],
"columns": [
{
"header": { "data": "Hostname", "orderKey": "hostname", "columnSize": "grow" },
"labelExpression": "hostname",
"listItemProperty": "hostname"
},
{
"header": { "data": "IP", "orderKey": "ip", "columnSize": "md" },
"labelExpression": "ip",
"domain": "ip",
"listItemProperty": "ip"
}
],
"itemsPerPageOptions": [10, 25, 50],
"stickyHeader": true,
"toolbarDisabled": false
}
}
The card shows paginated device rows with backend sorting and no mutation actions.
Behavior
The card subscribes to the chosen entity context, uses its page and page length, and rebuilds the table model when rows change.
Cell links resolve per row and navigate through the dashboard helper.
Edit actions either execute immediately per cell or accumulate changes for onGlobalSave; configuring both produces a warning and the bulk-save path wins.
Limitations and safety
This is an expert-only configuration surface with no schema-driven editor in this SDK version.
Task-backed menu and edit actions can mutate managed systems, so use least-privilege backend permissions and test target selection carefully.
For a read-only table, omit edit and task actions and set selectable to false.
Related cards
See Static data table for an array already present in dashboard context.

