Skip to content

mockup: heatmap for event layers [DHIS2-240] [DHIS2-21461] - #3770

Draft
BRaimbault wants to merge 2 commits into
masterfrom
mockup/heatmap-events
Draft

BRaimbault wants to merge 2 commits into
masterfrom
mockup/heatmap-events

Conversation

@BRaimbault

@BRaimbault BRaimbault commented Sep 10, 2026

Copy link
Copy Markdown
Collaborator

Test map:
https://pr-3770.maps.netlify.dhis2.org/#/Ati27BfAzYU
https://dev.im.dhis2.org/maps-app-42-3

Mockup for DHIS2-21461

DO NOT MERGE

Description

Adds a third event point-style option — heatmap, alongside grouped/individual events — using maplibre-gl's native heatmap paint layer (config.type = 'heat'), with intensity/radius sliders and a continuous color-scale picker for the legend.

Rebased onto current master by replaying the branch's net feature diff rather than its original 73-commit history (which mixed the heatmap work with unrelated cypress/CI churn and a merged-in bugfix branch). Several files had since been independently refactored on master (EventDialog.jsx from a class to a function component, EventLayer.jsx's clustering logic consolidated into applyClusteringConfig(), favorites.js's per-layer-type config builders unified into shared helpers) — the heatmap additions are ported onto those current shapes rather than reintroducing the old ones.

Requires a maps-gl heatmap layer type, restored via the same commit pinned by the original PR (git+https://github.com/d2-ci/maps-gl.git, still fetchable) rather than a from-scratch reimplementation, per explicit choice over a native-maplibre-in-maps-app rewrite. Known risk: that fork is maps-gl 4.2.8 against master's current 4.4.3 — build/lint/tests pass and the dev server boots clean, but other layer types haven't been manually verified against the older maps-gl.

Settings (eventHeatmap, heatIntensity, heatRadius) persist through the layer's config JSON blob, so a saved map round-trips the heatmap setup — verified the actual save payload via cleanMapConfig().


ToDos

  • todo

Known issues

  • issue

Screenshots

image image

Mockup for DHIS2-21461. Adds a third event point-style option — heatmap,
alongside grouped/individual events — using maplibre-gl's native heatmap
paint layer (config.type = 'heat'), with intensity/radius sliders and a
continuous color-scale picker for the legend.

Rebased onto current master by replaying the branch's net feature diff
rather than its original 73-commit history (which mixed the heatmap work
with unrelated cypress/CI churn and a merged-in bugfix branch). Several
files had since been independently refactored on master (EventDialog.jsx
from a class to a function component, EventLayer.jsx's clustering logic
consolidated into applyClusteringConfig(), favorites.js's per-layer-type
config builders unified into shared helpers) — the heatmap additions are
ported onto those current shapes rather than reintroducing the old ones.

Requires a maps-gl heatmap layer type, restored via the same commit
pinned by the original PR (git+https://github.com/d2-ci/maps-gl.git,
still fetchable) rather than a from-scratch reimplementation, per explicit
choice over a native-maplibre-in-maps-app rewrite. Known risk: that fork
is maps-gl 4.2.8 against master's current 4.4.3 — build/lint/tests pass
and the dev server boots clean, but other layer types haven't been
manually verified against the older maps-gl.

Settings (eventHeatmap, heatIntensity, heatRadius) persist through the
layer's config JSON blob, so a saved map round-trips the heatmap setup —
verified the actual save payload via cleanMapConfig().

DO NOT MERGE

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@dhis2-bot

Copy link
Copy Markdown
Contributor

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

@dhis2-bot
dhis2-bot temporarily deployed to netlify September 10, 2026 14:28 Inactive
The rebase's patch application produced two separate parseJsonConfig(
config.config) blocks instead of merging into master's existing one —
the first (pre-existing labelDataItem/legendDecimalPlaces/etc. block)
deleted config.config at its end, and the second (added for eventHeatmap
/heatIntensity/heatRadius) then read from that already-deleted field,
so eventHeatmap silently never restored on load: a saved heatmap layer
rendered as plain events instead of a heatmap, though the save payload
itself (layer.config JSON) was always correct.

Merged into the single existing parseJsonConfig destructure. Verified
against the exact config string from a live saved map
({"eventHeatmap":true,"heatIntensity":0.08,"heatRadius":0.53}).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
1 New issue
1 New Code Smells (required ≤ 0)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

@dhis2-bot
dhis2-bot temporarily deployed to netlify September 10, 2026 14:55 Inactive
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