Skip to content

Commit 784b253

Browse files
authored
fix(vectorLayer): prevent stale FlatGeobuf response to be processed (#2605)
1 parent 9899877 commit 784b253

File tree

1 file changed

+6
-1
lines changed
  • src/frontend/src/components/MapComponent/OpenLayersComponent/Layers

1 file changed

+6
-1
lines changed

src/frontend/src/components/MapComponent/OpenLayersComponent/Layers/VectorLayer.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* eslint-disable no-console */
22
/* eslint-disable consistent-return */
3-
import React, { useEffect, useState } from 'react';
3+
import React, { useEffect, useRef, useState } from 'react';
44
import { get } from 'ol/proj';
55
import { Circle as CircleStyle, Fill, Stroke, Style } from 'ol/style.js';
66
import GeoJSON from 'ol/format/GeoJSON';
@@ -59,7 +59,9 @@ const VectorLayer = ({
5959
getAOIArea,
6060
processGeojson,
6161
}) => {
62+
const latestFgbRequestIdRef = useRef(0);
6263
const [vectorLayer, setVectorLayer] = useState(null);
64+
6365
useEffect(() => {
6466
if (map && vectorLayer) {
6567
return () => map.removeLayer(vectorLayer);
@@ -185,9 +187,12 @@ const VectorLayer = ({
185187
}
186188

187189
async function loadFgbRemote(filterExtent = true, extractGeomCol = true) {
190+
const fgbRequestIdRef = ++latestFgbRequestIdRef.current;
188191
this.clear();
189192
let filteredFeatures = [];
190193
for await (let feature of FGBGeoJson.deserialize(fgbUrl, fgbBoundingBox(fgbExtent.getExtent()))) {
194+
if (fgbRequestIdRef !== latestFgbRequestIdRef.current) return; // only process latest response
195+
191196
if (extractGeomCol && feature.geometry.type === 'GeometryCollection') {
192197
// Extract first geom from geomcollection
193198
feature = {

0 commit comments

Comments
 (0)