Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: plugin was loading geojson layers multiple times #3143

Merged
merged 2 commits into from
Mar 13, 2024

Conversation

jenniferarnesen
Copy link
Collaborator

@jenniferarnesen jenniferarnesen commented Mar 7, 2024

Previously, the LayerLoader was getting rerendered many times, because until all the layers were marked as loaded, the check on line 91 (old code) was true. This might not have been much of a problem before, but with the geojson layers having to fetch the data, there is a delay before all the layer data is received, so then the component gets rerendered in that time, firing another request for the geojson.

The bug I was seeing is that if there are multiple geojson layers on the map, the layers would flash each time the request was made. Potentially 20-30 times. In the worst case, it resulted in a javascript execution exception

geojson-endless-loading.mov

The change is to instead keep track of the loaded layers in a ref instead of state, which prevents the component from rerendering the LayerLoader when some layers are still loading. The component only needs to render twice: once when the layers are not loaded, and again once they are all loaded. This is kept track with a new state variable mapIsLoaded

after:

geojson-loading-fix.mov

@dhis2-bot
Copy link
Contributor

dhis2-bot commented Mar 7, 2024

🚀 Deployed on https://pr-3143--dhis2-maps.netlify.app

@dhis2-bot dhis2-bot temporarily deployed to netlify March 7, 2024 13:20 Inactive
Copy link

cypress bot commented Mar 7, 2024

3 flaky tests on run #3070 ↗︎

0 118 32 0 Flakiness 3

Details:

Merge 69fb64c into c00b74f...
Project: maps Commit: 8ec3eef221 ℹ️
Status: Passed Duration: 03:49 💡
Started: Mar 11, 2024 9:40 AM Ended: Mar 11, 2024 9:44 AM
Flakiness  routes.cy.js • 1 flaky test • e2e-chrome-parallel-2.41

View Output

Test Artifacts
Routes > navigation by url changes > navigates to and away from download page Screenshots
Flakiness  interpretations.cy.js • 1 flaky test • e2e-chrome-parallel-2.41

View Output

Test Artifacts
Interpretations > view interpretation after creating a map Screenshots
Flakiness  layers/geojsonlayer.cy.js • 1 flaky test • e2e-chrome-parallel-2.40

View Output

Test Artifacts
GeoJSON URL Layer > adds a geojson url layer Screenshots

Review all test suite changes for PR #3143 ↗︎

@dhis2-bot dhis2-bot temporarily deployed to netlify March 7, 2024 15:30 Inactive
@jenniferarnesen jenniferarnesen force-pushed the fix/multiple-layer-reloads-in-plugin branch from bf6e436 to 786beac Compare March 8, 2024 07:36
@dhis2-bot dhis2-bot temporarily deployed to netlify March 8, 2024 07:39 Inactive
@dhis2-bot dhis2-bot temporarily deployed to netlify March 11, 2024 09:36 Inactive
Copy link
Contributor

@turban turban left a comment

Choose a reason for hiding this comment

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

LGTM. For later, maybe these loaders should be hooks to make the code cleaner?

@jenniferarnesen jenniferarnesen merged commit 18846e9 into dev Mar 13, 2024
20 checks passed
@jenniferarnesen jenniferarnesen deleted the fix/multiple-layer-reloads-in-plugin branch March 13, 2024 15:03
jenniferarnesen added a commit that referenced this pull request Mar 18, 2024
Implements: https://dhis2.atlassian.net/browse/DHIS2-15981

If geojson external overlay layers are configured for instance, they can now be added to a map.
The data table will display the layer data as long as the collection is of homogenous geo types.
User can also click on a feature and the right panel will open, showing the feature data.

fix: check full instanceUrl and handle not response.ok in geojson loader (#3142)

In production, the baseUrl is ".." and therefore the comparison will always be false.
So check the instanceBaseUrl instead

Also, a failed response from fetch, like 400, will return !response.ok,
so that situation needed to be handled as well.

fix: rename error to loadError to avoid name clash with building footprint ee layer (#3144)

The building footprints earth engine layer has a property named error.
That was getting picked up by the new notice box in the Card that was added to
report geojson loading errors. Solution was to rename the error property in geojsonloader to loadError.

fix: show no data message when geojson feature has no data (#3145)

Geojson layers may or may not have data associated with them.
Show an appropriate message if there is no data.

fix: improve geojson layer error responses and cypress tests (#3149)

fix: reduce the padding to make room for the scrollbar (#3148)

fix: prevent data table effects from running code when no table (#3147)

fix: map plugin - do not load async layers multiple times (#3143)

fix: various fixes after release testing (#3151)

* fix: limit stroke width to 0-10

* fix: tab length should only take the space of the title

* fix: reset error when switching which layer shows data table

* fix: highlight features when data table has filter

* chore: improve legend for geojson layers

* fix: set point radius  to size that was set in the style settings

* fix: the feature.id is set in maps-gl so use the properties.id instead find correct data

* chore: legend item styling - set max line weight and rename to Point radius

* fix: use more understandable error messages

* fix: set minimum point size of 1

fix: final fixes for geojson (#3154)

* fix: upgrade maps-gl for the rounded line join and caps

* fix: add tooltip on layer thumbnails

* chore: update i18n

* fix: set map bounds after all layers are added to the map

* fix: values that are strings but numeric in quality were not filtering

* fix: onLayerAdded wasnt defined for SplitViews

* Revert "fix: onLayerAdded wasnt defined for SplitViews"

This reverts commit deeb327.

* Revert "fix: set map bounds after all layers are added to the map"

This reverts commit e1c0a58.

* fix: make logic match prev code

* fix: position tooltip right over the thumbnail title
dhis2-bot added a commit that referenced this pull request Mar 18, 2024
# [100.5.0](v100.4.1...v100.5.0) (2024-03-18)

### Bug Fixes

* navigating by the changing url ignored download mode and interpretation id parameters ([#3125](#3125)) ([fcc5eaa](fcc5eaa))
* **translations:** sync translations from transifex (dev) ([#3132](#3132)) ([7f5d178](7f5d178))
* improve hover states and add consistent spacing [UX-161] ([#3121](#3121)) ([3f9e667](3f9e667))

### Features

* add ability to add GeoJSON URL external layers ([#3127](#3127)) ([fbdf0b0](fbdf0b0)), closes [#3142](#3142) [#3144](#3144) [#3145](#3145) [#3149](#3149) [#3148](#3148) [#3147](#3147) [#3143](#3143) [#3151](#3151) [#3154](#3154)
* when rendering for push analytics, disable download button until map is rendered ([#3072](#3072)) ([4b1076c](4b1076c)), closes [#3121](#3121)
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.

3 participants