|
1 | 1 | /* eslint-disable no-console */
|
2 | 2 | /* eslint-disable consistent-return */
|
3 |
| -import React, { useEffect, useState } from 'react'; |
| 3 | +import React, { useEffect, useRef, useState } from 'react'; |
4 | 4 | import { get } from 'ol/proj';
|
5 | 5 | import { Circle as CircleStyle, Fill, Stroke, Style } from 'ol/style.js';
|
6 | 6 | import GeoJSON from 'ol/format/GeoJSON';
|
@@ -59,7 +59,9 @@ const VectorLayer = ({
|
59 | 59 | getAOIArea,
|
60 | 60 | processGeojson,
|
61 | 61 | }) => {
|
| 62 | + const latestFgbRequestIdRef = useRef(0); |
62 | 63 | const [vectorLayer, setVectorLayer] = useState(null);
|
| 64 | + |
63 | 65 | useEffect(() => {
|
64 | 66 | if (map && vectorLayer) {
|
65 | 67 | return () => map.removeLayer(vectorLayer);
|
@@ -185,9 +187,12 @@ const VectorLayer = ({
|
185 | 187 | }
|
186 | 188 |
|
187 | 189 | async function loadFgbRemote(filterExtent = true, extractGeomCol = true) {
|
| 190 | + const fgbRequestIdRef = ++latestFgbRequestIdRef.current; |
188 | 191 | this.clear();
|
189 | 192 | let filteredFeatures = [];
|
190 | 193 | for await (let feature of FGBGeoJson.deserialize(fgbUrl, fgbBoundingBox(fgbExtent.getExtent()))) {
|
| 194 | + if (fgbRequestIdRef !== latestFgbRequestIdRef.current) return; // only process latest response |
| 195 | + |
191 | 196 | if (extractGeomCol && feature.geometry.type === 'GeometryCollection') {
|
192 | 197 | // Extract first geom from geomcollection
|
193 | 198 | feature = {
|
|
0 commit comments