Neops Web Client 2.0.0
Released 2025-06-12
This release makes dashboards more flexible. Dashboard authors can turn JSON or entity facts into a searchable table, combine standard and aggregation cards on one dashboard, and see when a local card filter is responsible for an empty result.
At a glance
| Area | What changed | Why it matters |
|---|---|---|
| Static data table | A dashboard card can select any JSON array from the dashboard context and display its fields as columns. | Facts that previously required a custom card can become a searchable, sortable table through configuration. |
| Dashboard types | A mixed dashboard can contain compatible standard and aggregation cards together. | Users can combine individual entity details and fleet-level summaries on one page. |
| Empty card state | Cards report when their own local filter removed all available data. | Users can distinguish a deliberate filter result from missing source data or a failed query. |
Highlights
Turn nested facts into a useful table
The new static-data-table card follows a simple data path:
| 1. Source data | 2. Select rows | 3. Select fields | 4. Show the result |
|---|---|---|---|
| Start with dashboard context or entity facts. | A JMESPath expression selects one JSON array. | Column expressions select values from each array item. | Neops displays a searchable, sortable, paginated table. |
For example, if a device stores an interfaces array in its facts, the card can select that array and display name and status as columns.
The card does not require a dedicated Neops entity type for each row.
{
"cardId": "static-data-table",
"data": {
"title": "Interface overview",
"description": "Interfaces reported by this device",
"tableConfigArguments": {
"itemsPerPageOptions": [5, 10, 20],
"sortable": true,
"allowToHidePagination": true,
"columns": [
{
"header": {
"data": "Name",
"orderKey": "name"
},
"labelExpression": "name"
},
{
"header": {
"data": "Status",
"orderKey": "status"
},
"labelExpression": "status"
}
]
},
"jmesPathToTableDataJsonArray": "device.facts.interfaces"
}
}
The important settings are:
| Setting | Purpose |
|---|---|
jmesPathToTableDataJsonArray |
Selects the JSON array that supplies the rows. |
columns[].labelExpression |
Selects the displayed value from each row. |
columns[].header.orderKey |
Enables sorting by the corresponding row field. |
itemsPerPageOptions |
Defines the page-size choices available to the user. |
allowToHidePagination |
Lets the table omit pagination controls when they are unnecessary. |
The table also supports local text search, pagination, and sorting. If the JMESPath does not return an array, the card explains which expression failed instead of trying to render an invalid table.
Combine detail and overview cards on one dashboard
Before this release, a dashboard was effectively either standard or aggregation-focused. That made it difficult to place an individual device table beside a chart summarizing a larger result set.
The new dashboard types make the boundary explicit:
| Dashboard type | Intended content |
|---|---|
| Standard | Cards that work with the current entity or ordinary result context. |
| Aggregation | Cards that summarize grouped or aggregated results. |
| Mixed | Both standard and aggregation cards, when their registrations declare support. |
The dashboard editor uses each card’s compatibility declaration when offering cards. If an incompatible card is already present, Neops shows a clear placeholder naming the card type and dashboard type instead of failing silently.
Explain why a locally filtered card is empty
A card-level filter can intentionally narrow a shared dashboard result. Previously, when that filter removed every row, the empty card looked similar to a query that returned no source data.
From this release, the card identifies the local filter as the reason for the empty result. The user can review or remove that card’s filter without first debugging the global dashboard query.
Upgrade notes
Existing dashboards continue to use their current dashboard type. Choose the mixed type only when a new or updated dashboard needs both standard and aggregation cards.
The static data table is a new card, so there is no saved-configuration migration. Add it through the dashboard editor or as a new card configuration and make sure its JMESPath resolves to an array.
