Skip to content

Handle geojson layers like other layers#605

Merged
digitaltom merged 31 commits intomainfrom
unify_layer_handling
Feb 7, 2026
Merged

Handle geojson layers like other layers#605
digitaltom merged 31 commits intomainfrom
unify_layer_handling

Conversation

@digitaltom
Copy link
Collaborator

No description provided.

Copilot AI review requested due to automatic review settings February 2, 2026 23:34
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refactors MapLibre layer handling so GeoJSON layers are treated similarly to other layer types (separate sources/styles per layer) and introduces layer-level flags intended to control clustering/heatmap behavior.

Changes:

  • Introduces per-layer GeoJSON sources (<type>-source-<layerId>) and new feature lookup helpers in maplibre/layers/layers.js.
  • Updates various MapLibre modules/controllers to use the new feature lookup approach instead of geojsonData.
  • Adds a Wikipedia marker icon and extends Layer summaries with heatmap/cluster flags.

Reviewed changes

Copilot reviewed 11 out of 12 changed files in this pull request and generated 14 comments.

Show a summary per file
File Description
public/icons/wikipedia.png Adds an icon used by the Wikipedia layer features.
app/models/layer.rb Adds heatmap/cluster fields and includes them in serialized layer summaries.
app/javascript/maplibre/undo.js Starts migration away from geojsonData imports (but still needs further refactor).
app/javascript/maplibre/styles.js Updates style initialization and heatmap layer handling; switches feature lookup to getFeature.
app/javascript/maplibre/routing/osrm.js Switches route feature lookup to getFeature.
app/javascript/maplibre/map.js Removes global geojsonData usage patterns and shifts rendering toward per-layer sources.
app/javascript/maplibre/layers/layers.js Initializes per-layer GeoJSON sources/styles and adds getFeature/getFeatures/hasFeatures.
app/javascript/maplibre/feature.js Uses new feature access helpers for edit gating and derived-feature generation inputs.
app/javascript/maplibre/edit.js Uses new helpers for “untouched map” logic and URL-based selection.
app/javascript/maplibre/controls/shared.js Updates feature list items to reference the new per-layer source names.
app/javascript/controllers/feature/modal_controller.js Refactors selected-feature access (now needs getFeature import).
app/javascript/controllers/feature/edit_controller.js Refactors edit-feature access (now needs getFeature import).
Comments suppressed due to low confidence (1)

app/javascript/maplibre/map.js:123

  • initializeMap highlights a URL-selected feature via highlightFeature(feature, true) without passing the feature’s source. Since the default source in highlightFeature is geojson-source (which is no longer created), setFeatureState will fail or highlight the wrong source. Determine the correct source for the feature (e.g., from the owning layer) and pass it explicitly.
    const urlFeatureId = new URLSearchParams(window.location.search).get('f')
    let feature = getFeature(urlFeatureId)
    if (feature) {
      resetControls()
      highlightFeature(feature, true)
      const center = centroid(feature)

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@digitaltom digitaltom marked this pull request as draft February 5, 2026 23:40
@coveralls
Copy link

coveralls commented Feb 6, 2026

Pull Request Test Coverage Report for Build 21788627754

Warning: This coverage report may be inaccurate.

This pull request's base commit is no longer the HEAD commit of its target branch. This means it includes changes from outside the original pull request, including, potentially, unrelated coverage changes.

Details

  • 6 of 6 (100.0%) changed or added relevant lines in 3 files are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage increased (+0.001%) to 99.362%

Totals Coverage Status
Change from base Build 21714622559: 0.001%
Covered Lines: 779
Relevant Lines: 784

💛 - Coveralls

addRedoState(prevState.type, geojsonData.features[idx], false)
let feature = getFeature(prevState.state.id, 'geojson')
if (feature) {
addRedoState(prevState.type, feature, false)
addRedoState(prevState.type, geojsonData.features[idx], false)
let feature = getFeature(prevState.state.id, 'geojson')
if (feature) {
addRedoState(prevState.type, feature, false)
@digitaltom digitaltom marked this pull request as ready for review February 7, 2026 23:40
@digitaltom digitaltom merged commit 1035908 into main Feb 7, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants