Repository navigation
feat(chart): a matrix can read its cells from records (schema 2.124.0, stacked on #1734) - #1747
Closed
rubenvdlinde wants to merge 10 commits into
Closed
rubenvdlinde wants to merge 10 commits into
rubenvdlinde wants to merge 10 commits into
Conversation
Assisted-by: ClaudeCode:claude-opus-5-5
Assisted-by: ClaudeCode:claude-opus-5-5
Assisted-by: ClaudeCode:claude-opus-5-5
…and-heatmap # Conflicts: # src/schemas/app-manifest-v2.schema.json # tests/schemas/app-manifest-v2.schema.hashes.json # tests/schemas/app-manifest-v2.schema.spec.js
CnChartWidget draws chartKind "bar-list" (label, track at its share of barMax or the largest value, value, drilldown rows, footnote) and "matrix" (a series per row, tinted cells, text cells through colorMap, highlight outlines the record's cell), without ApexCharts. valueFormat gains "number" with suffix; endpointSource gains rowsPath. In the board look dashboard card heads draw no divider. Boards DqDashboard, DqTermijnen, DqDoorlooptijd, DqProcesanalyse, DqHandhaving. Assisted-by: ClaudeCode:claude-opus-5-5
Assisted-by: ClaudeCode:claude-opus-5-5
…and-heatmap # Conflicts: # src/schemas/app-manifest-v2.schema.json # tests/schemas/app-manifest-v2.schema.hashes.json # tests/schemas/app-manifest-v2.schema.spec.js
cellSource lists records that each hold one cell from a register (filter tokens resolved, e.g. @object.matrixVersion) and lays them out by rowField / columnField with valueField as the cell, with labels, order and valueLabels. highlight matches the cell keys. Generic for any app that keeps a matrix as data; board DqHandhaving. Assisted-by: ClaudeCode:claude-opus-5-5
…4.0) With cellsPath, cellSource reads ONE record (filter, else fallbackFilter), takes its cells array, narrows it by cellFilter (tokens allowed) and orders the axes from rowOrderPath / columnOrderPath on that record. The one-record-per-cell mode stays. Schema 2.124.0 types cellSource. Assisted-by: ClaudeCode:claude-opus-5-5
rubenvdlinde
requested review from
Rem-Dam,
SudoThijn,
WilcoLouwerse,
bbrands02,
remko48 and
rjzondervan
as code owners
October 17, 2026 07:24
Contributor
Author
|
Landed in batch 8 via #1771. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
The
matrixchart kind can read a matrix the app keeps as data, instead of a copy written into the manifest. A manifest copy shows every install the same matrix and drifts from the version the app computes with, and nobody notices. New chart propcellSource(schema 2.124.0), generic for any app:register/schemawith a token-resolvedfilterand lay the records out byrowField/columnField, withvalueFieldas the cell.cellsPath): read the first recordfilterfinds, orfallbackFilterif it finds none (e.g.{ active: true }). Take its array atcellsPathand narrow it withcellFilter, which accepts tokens, e.g. one slice of a matrix over three axes. Take the axis order fromrowOrderPath/columnOrderPathon that record.rowLabels/columnLabelsmaps orrowLabelField/columnLabelField.rowOrder/columnOrderlists, elserowOrderField/columnOrderField, else natural order.valueLabelsmaps a stored value to its text, andcolorMapmay key on either.matrixVersionshows no matrix, by design, so it never shows a matrix it was not calculated with.fallbackFilterapplies only when the filter finds no record.highlightmatches the row and column keys.fetchReferenceObjectsfor the list. The layout lives in the new utilsmatrixCells.pivotCellsandcellsFromRecord.The case: board DqHandhaving. Each municipality keeps its enforcement (LHS) matrix in dossiq's
lhsMatrixrecord. The record is picked byversionand carriescells[]entries{ behaviour, severity, actorType, intervention }plusbehaviourAxis/severityAxis. The recommendation stores thematrixVersionandactorTypeit was computed with. Config:cellSource: { register: "dossiq", schema: "lhsMatrix", filter: { version: "@object.matrixVersion" }, fallbackFilter: { active: true }, cellsPath: "cells", cellFilter: { actorType: "@object.actorType" }, rowField: "behaviour", columnField: "severity", valueField: "intervention", rowOrderPath: "behaviourAxis", columnOrderPath: "severityAxis" }withhighlight: { row: "@object.behaviour", column: "@object.severity" }.A matrix without
cellSourcedraws as before.Verified
tests/utils/matrixCells.spec.jsandtests/components/CnChartWidgetMatrixCells.spec.js. The per-record mode's component specs fail 2 of 3 without it; the one-record specs fail 4 without that mode.OpenSpec:
openspec/changes/matrix-cell-records.🤖 Generated with Claude Code