Skip to content

feat: extend data table support to TE, thematic, and event layers [PR5] - #3726

Open
BRaimbault wants to merge 44 commits into
feat/datatable-pr4-columnsfrom
feat/datatable-pr5-more-layer-types
Open

feat: extend data table support to TE, thematic, and event layers [PR5]#3726
BRaimbault wants to merge 44 commits into
feat/datatable-pr4-columnsfrom
feat/datatable-pr5-more-layer-types

Conversation

@BRaimbault

@BRaimbault BRaimbault commented Jul 19, 2026

Copy link
Copy Markdown
Collaborator

Part of DHIS2-21456

Diff size note: this PR adds ~5,000 lines: ~1,900 are runtime code / ~3,100 (62%) are tests.

Description

Extends the data table to the remaining layer types and rendering modes from the epic:

  • Tracked entity layers: attribute columns + values now flow through the loader into the table (previously stripped)
  • Thematic layers with timeline or split-by-period rendering: dynamic "current period" value column, plus any additional period addable as a side-by-side comparison column via the column picker
  • Server-side clustered event layers: data table now opens on these too, with a "Show event details" in-table action for clustered rows
  • Facility and org unit layers: Color/Icon/Group columns for layers styled by a group set
  • GeoJSON URL and tracked entity layers: Color column
  • Event layers styled by a data item: Legend/Range columns
  • Canonical column ordering across all of the above: Legend → Range → Group → Color → Icon, previously inconsistent per layer type
  • Icon filter dropdown now shows the actual icon thumbnail instead of the raw icon URL

Also included, surfaced while wiring up event layers:

  • Server-side event clustering is now gated on the backend's advertised spatial support (spatialSupport), with a forceClientCluster escape hatch
  • Fixes: mixed geometry/multi-geometry layers in the table, numeric valueType coercion for TE columns, a race when editing filters/columns while a server-clustered event layer's data is still extending, a resize-cancel bug, a crash + dead code path in parseLayerConfig, header alignment, and a data table performance pass

Quality checklist

  • Cypress and/or Jest tests added/updated
  • Dashboard tested
  • Docs added
  • d2-ci dependencies replaced
  • Tester approved (name)

Known issues

  • Colorpicker popover position isn't app-controllable — all color swatches use a native <input type="color">; deferred to a follow-up
  • Manual column-width resize (drag to widen/narrow a column) not included — deferred to a future PR
  • Data table performance with very large (>100k row) event layers — highlighting/selection can take seconds; deferred, to be scoped separately

@dhis2-bot

Copy link
Copy Markdown
Contributor

🚀 Deployed on https://pr-3726.maps.netlify.dhis2.org

@dhis2-bot
dhis2-bot temporarily deployed to netlify July 19, 2026 09:37 Inactive
@BRaimbault BRaimbault closed this Jul 19, 2026
@dhis2-bot
dhis2-bot temporarily deployed to netlify July 19, 2026 10:11 Inactive
@BRaimbault BRaimbault reopened this Jul 19, 2026
@dhis2-bot
dhis2-bot temporarily deployed to netlify July 19, 2026 10:15 Inactive
@dhis2-bot
dhis2-bot temporarily deployed to netlify July 19, 2026 10:29 Inactive
@dhis2-bot
dhis2-bot temporarily deployed to netlify July 19, 2026 10:33 Inactive
@BRaimbault BRaimbault changed the title feat: more layer types support datatable [PR5] feat: more layer types support data table [PR5] Jul 19, 2026
@dhis2-bot
dhis2-bot temporarily deployed to netlify July 19, 2026 13:42 Inactive
@dhis2-bot
dhis2-bot temporarily deployed to netlify July 19, 2026 15:49 Inactive
@dhis2-bot
dhis2-bot temporarily deployed to netlify July 19, 2026 20:53 Inactive
@dhis2-bot
dhis2-bot temporarily deployed to netlify July 19, 2026 21:24 Inactive
@dhis2-bot
dhis2-bot temporarily deployed to netlify July 19, 2026 23:29 Inactive
@dhis2-bot
dhis2-bot temporarily deployed to netlify July 20, 2026 07:19 Inactive
@dhis2-bot
dhis2-bot temporarily deployed to netlify July 20, 2026 14:17 Inactive
@dhis2-bot
dhis2-bot temporarily deployed to netlify July 20, 2026 15:01 Inactive
@dhis2-bot
dhis2-bot temporarily deployed to netlify July 20, 2026 17:38 Inactive
@dhis2-bot
dhis2-bot temporarily deployed to netlify July 21, 2026 11:24 Inactive
@dhis2-bot
dhis2-bot temporarily deployed to netlify July 23, 2026 09:08 Inactive
@dhis2-bot
dhis2-bot temporarily deployed to netlify July 23, 2026 09:12 Inactive
@dhis2-bot
dhis2-bot temporarily deployed to netlify July 23, 2026 09:25 Inactive
@dhis2-bot
dhis2-bot temporarily deployed to netlify July 23, 2026 09:53 Inactive
@dhis2-bot
dhis2-bot temporarily deployed to netlify July 23, 2026 09:59 Inactive
@dhis2-bot
dhis2-bot temporarily deployed to netlify July 23, 2026 10:05 Inactive
@dhis2-bot
dhis2-bot temporarily deployed to netlify July 23, 2026 10:16 Inactive
@dhis2-bot
dhis2-bot temporarily deployed to netlify July 23, 2026 10:50 Inactive
@dhis2-bot
dhis2-bot temporarily deployed to netlify July 23, 2026 12:00 Inactive
@dhis2-bot
dhis2-bot temporarily deployed to netlify July 23, 2026 12:11 Inactive
BRaimbault and others added 23 commits July 27, 2026 15:29
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… set

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
isExtended was set unconditionally before the server-cluster decision,
so a layer that became server-clustered while its data table was open
got isExtended:true stamped even though no client dataset was ever
loaded. That silently blocked the reload useLayersLoader triggers when
forceClientCluster is set, so clicking "Show event details" appeared
to do nothing instead of loading the table.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…total, once rendering client-side

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@BRaimbault
BRaimbault force-pushed the feat/datatable-pr5-more-layer-types branch from 4dee9ea to 2c1f706 Compare July 27, 2026 13:30
@sonarqubecloud

Copy link
Copy Markdown

@dhis2-bot
dhis2-bot temporarily deployed to netlify July 27, 2026 13:32 Inactive
@BRaimbault BRaimbault changed the title feat: data table support for TE, split/timeline thematic, facility/org unit & clustered event layers [PR5] feat: extend data table support to TE, thematic, and event layers [PR5] Jul 28, 2026
@BRaimbault
BRaimbault marked this pull request as ready for review August 4, 2026 15:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants