Skip to content

Commit 48184c6

Browse files
committed
front: Avoid glitches on ref map when switching theme
Close #5777 Maplibre bad handles the changes of layout style, which leads to somes visualglitches on the map. Solution for now is to full reload the OSM.
1 parent 12f2a16 commit 48184c6

File tree

3 files changed

+64
-29
lines changed

3 files changed

+64
-29
lines changed

front/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
"license-checker-rseidelsohn": "~3.3.0",
7373
"localforage": "^1.10.0",
7474
"lodash": "^4.17.15",
75-
"maplibre-gl": "^3.3.0",
75+
"maplibre-gl": "^3.6.1",
7676
"match-sorter": "^6.3.1",
7777
"openapi-typescript-codegen": "^0.24.0",
7878
"party-js": "^2.2.0",
@@ -89,7 +89,7 @@
8989
"react-id-generator": "^3.0.0",
9090
"react-infinite-scroll-component": "^6.1.0",
9191
"react-lazy-load-image-component": "^1.5.6",
92-
"react-map-gl": "^7.1.5",
92+
"react-map-gl": "^7.1.6",
9393
"react-markdown": "^8.0.6",
9494
"react-modal": "^3.15.1",
9595
"react-redux": "^8.0.4",

front/src/common/Map/Layers/OSM.tsx

+12-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { useEffect, useState } from 'react';
22
import PropTypes from 'prop-types';
33
import { LayerProps, Source } from 'react-map-gl/maplibre';
44

@@ -37,7 +37,7 @@ export function genOSMLayerProps(
3737
const osmStyle = getMapStyle(mapStyle);
3838
return osmStyle.map((layer) => ({
3939
...layer,
40-
key: layer.id,
40+
key: `${layer.id}-${mapStyle}`,
4141
id: `osm/${layer.id}`,
4242
layerOrder,
4343
}));
@@ -50,11 +50,19 @@ export function genOSMLayers(mapStyle: string, layerOrder?: number) {
5050
function OSM(props: OSMProps) {
5151
const { mapStyle, layerOrder } = props;
5252

53-
return (
53+
// Hack to full reload layers to avoid glitches
54+
// when switching map style (see #5777)
55+
const [reload, setReload] = useState(true);
56+
useEffect(() => setReload(true), [mapStyle]);
57+
useEffect(() => {
58+
if (reload) setReload(false);
59+
}, [reload]);
60+
61+
return !reload ? (
5462
<Source id="osm" type="vector" url={OSM_URL}>
5563
{genOSMLayers(mapStyle, layerOrder)}
5664
</Source>
57-
);
65+
) : null;
5866
}
5967

6068
OSM.propTypes = {

front/yarn.lock

+50-23
Original file line numberDiff line numberDiff line change
@@ -1636,7 +1636,7 @@
16361636
resolved "https://registry.yarnpkg.com/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz#497c67a1cef50d1a2459ba60f315e448d2ad87fe"
16371637
integrity sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==
16381638

1639-
"@maplibre/maplibre-gl-style-spec@^19.2.1", "@maplibre/maplibre-gl-style-spec@^19.3.2":
1639+
"@maplibre/maplibre-gl-style-spec@^19.2.1":
16401640
version "19.3.2"
16411641
resolved "https://registry.yarnpkg.com/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-19.3.2.tgz#9c36f0bf4ec54ae8c307d782672903ec44f9eab2"
16421642
integrity sha512-C2JAk64XUz9v78+bpyTk1zvgjjnDsB8CCjNumyAYdWK2dvdDtILzh1AGBMdS/llX3KaHjGYxAE5wOwfdwq4Pog==
@@ -1648,6 +1648,18 @@
16481648
rw "^1.3.3"
16491649
sort-object "^3.0.3"
16501650

1651+
"@maplibre/maplibre-gl-style-spec@^19.3.3":
1652+
version "19.3.3"
1653+
resolved "https://registry.yarnpkg.com/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-19.3.3.tgz#a106248bd2e25e77c963a362aeaf630e00f924e9"
1654+
integrity sha512-cOZZOVhDSulgK0meTsTkmNXb1ahVvmTmWmfx9gRBwc6hq98wS9JP35ESIoNq3xqEan+UN+gn8187Z6E4NKhLsw==
1655+
dependencies:
1656+
"@mapbox/jsonlint-lines-primitives" "~2.0.2"
1657+
"@mapbox/unitbezier" "^0.0.1"
1658+
json-stringify-pretty-compact "^3.0.0"
1659+
minimist "^1.2.8"
1660+
rw "^1.3.3"
1661+
sort-object "^3.0.3"
1662+
16511663
"@math.gl/web-mercator@^3.5.5":
16521664
version "3.6.3"
16531665
resolved "https://registry.yarnpkg.com/@math.gl/web-mercator/-/web-mercator-3.6.3.tgz#ef91168e030eecffc788618d686e8a6c1d7a0bf8"
@@ -3888,7 +3900,7 @@
38883900
resolved "https://registry.yarnpkg.com/@types/find-cache-dir/-/find-cache-dir-3.2.1.tgz#7b959a4b9643a1e6a1a5fe49032693cc36773501"
38893901
integrity sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==
38903902

3891-
"@types/geojson@*", "@types/geojson@^7946.0.11":
3903+
"@types/geojson@*":
38923904
version "7946.0.11"
38933905
resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.11.tgz#012c17cb2256ad8de78560da851ab914a7b9b40e"
38943906
integrity sha512-L7A0AINMXQpVwxHJ4jxD6/XjZ4NDufaRlUJHjNIFKYUFBH1SvOW+neaqb0VTRSLW5suSrSu19ObFEFnfNcr+qg==
@@ -3898,6 +3910,11 @@
38983910
resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.8.tgz#30744afdb385e2945e22f3b033f897f76b1f12ca"
38993911
integrity sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==
39003912

3913+
"@types/geojson@^7946.0.13":
3914+
version "7946.0.13"
3915+
resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.13.tgz#e6e77ea9ecf36564980a861e24e62a095988775e"
3916+
integrity sha512-bmrNrgKMOhM3WsafmbGmC+6dsF2Z308vLFsQ3a/bT8X8Sv5clVYpPars/UPq+sAaJP+5OoLAYgwbkS5QEJdLUQ==
3917+
39013918
"@types/glob@^7.1.3":
39023919
version "7.2.0"
39033920
resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb"
@@ -3990,15 +4007,20 @@
39904007
dependencies:
39914008
"@types/geojson" "*"
39924009

3993-
"@types/mapbox__point-geometry@*", "@types/mapbox__point-geometry@^0.1.2":
4010+
"@types/mapbox__point-geometry@*":
39944011
version "0.1.2"
39954012
resolved "https://registry.yarnpkg.com/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.2.tgz#488a9b76e8457d6792ea2504cdd4ecdd9860a27e"
39964013
integrity sha512-D0lgCq+3VWV85ey1MZVkE8ZveyuvW5VAfuahVTQRpXFQTxw03SuIf1/K4UQ87MMIXVKzpFjXFiFMZzLj2kU+iA==
39974014

3998-
"@types/mapbox__vector-tile@^1.3.1":
3999-
version "1.3.1"
4000-
resolved "https://registry.yarnpkg.com/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.1.tgz#938f013caccfc924344fd94f2834744d411d0f07"
4001-
integrity sha512-RpwGE57xM4a/YCH6XWzfcPVRPAu/jiCll0bEGRn6a4iubN2k4xZizskQoRj8fuXyo9BpI7F3bwz3uxs0pWbGNw==
4015+
"@types/mapbox__point-geometry@^0.1.4":
4016+
version "0.1.4"
4017+
resolved "https://registry.yarnpkg.com/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz#0ef017b75eedce02ff6243b4189210e2e6d5e56d"
4018+
integrity sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==
4019+
4020+
"@types/mapbox__vector-tile@^1.3.3":
4021+
version "1.3.4"
4022+
resolved "https://registry.yarnpkg.com/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz#ad757441ef1d34628d9e098afd9c91423c1f8734"
4023+
integrity sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==
40024024
dependencies:
40034025
"@types/geojson" "*"
40044026
"@types/mapbox__point-geometry" "*"
@@ -4079,11 +4101,16 @@
40794101
resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
40804102
integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
40814103

4082-
"@types/pbf@*", "@types/pbf@^3.0.3":
4104+
"@types/pbf@*":
40834105
version "3.0.3"
40844106
resolved "https://registry.yarnpkg.com/@types/pbf/-/pbf-3.0.3.tgz#7983338f5a3f83f8b3449f2217a167749c3f5089"
40854107
integrity sha512-hw6bDMjvm+QTvEC+pRLpnTknQXoPu8Fnf+A+zX9HB7j/7RfYajFSbdukabo3adPwvvEHhIMafQl0R0Tpej7clQ==
40864108

4109+
"@types/pbf@^3.0.4":
4110+
version "3.0.5"
4111+
resolved "https://registry.yarnpkg.com/@types/pbf/-/pbf-3.0.5.tgz#a9495a58d8c75be4ffe9a0bd749a307715c07404"
4112+
integrity sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==
4113+
40874114
"@types/pretty-hrtime@^1.0.0":
40884115
version "1.0.1"
40894116
resolved "https://registry.yarnpkg.com/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz#72a26101dc567b0d68fd956cf42314556e42d601"
@@ -4191,10 +4218,10 @@
41914218
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c"
41924219
integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==
41934220

4194-
"@types/supercluster@^7.1.1":
4195-
version "7.1.1"
4196-
resolved "https://registry.yarnpkg.com/@types/supercluster/-/supercluster-7.1.1.tgz#b7bd11dc793c1e658d0549ead4a93e594a8fb478"
4197-
integrity sha512-dNK02GO1UApgo+1KpY4jOfm3uWb2eBCMB/VMM2y8cMoF49FiqVVcOawEg19wxYcaX7SvEs370incOuFtFGrVLg==
4221+
"@types/supercluster@^7.1.3":
4222+
version "7.1.3"
4223+
resolved "https://registry.yarnpkg.com/@types/supercluster/-/supercluster-7.1.3.tgz#1a1bc2401b09174d9c9e44124931ec7874a72b27"
4224+
integrity sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==
41984225
dependencies:
41994226
"@types/geojson" "*"
42004227

@@ -9323,10 +9350,10 @@ map-or-similar@^1.5.0:
93239350
resolved "https://registry.yarnpkg.com/map-or-similar/-/map-or-similar-1.5.0.tgz#6de2653174adfb5d9edc33c69d3e92a1b76faf08"
93249351
integrity sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==
93259352

9326-
maplibre-gl@^3.3.0:
9327-
version "3.4.0"
9328-
resolved "https://registry.yarnpkg.com/maplibre-gl/-/maplibre-gl-3.4.0.tgz#e0f48b658a983a0339a4f85eb4c41c95df2d33a2"
9329-
integrity sha512-5Q36HD2mJoPcd85O2wIDq2t6kl9KMBpITO12A9wPKpQ6ieYKKf5Dp4U/XNjmZWtSTIX2hnx+OwlInkAVLdav6Q==
9353+
maplibre-gl@^3.6.1:
9354+
version "3.6.1"
9355+
resolved "https://registry.yarnpkg.com/maplibre-gl/-/maplibre-gl-3.6.1.tgz#44d55c6376fc500569933a1037a1ac5500eb1909"
9356+
integrity sha512-XQpLkNTD6WYJXqF7vTxgHbAyShoZMm5o8fohXCn9PC/S/g3zBk92m7GUsN6KfuECh2rO01uiYbSNCSURkOODyQ==
93309357
dependencies:
93319358
"@mapbox/geojson-rewind" "^0.5.2"
93329359
"@mapbox/jsonlint-lines-primitives" "^2.0.2"
@@ -9335,12 +9362,12 @@ maplibre-gl@^3.3.0:
93359362
"@mapbox/unitbezier" "^0.0.1"
93369363
"@mapbox/vector-tile" "^1.3.1"
93379364
"@mapbox/whoots-js" "^3.1.0"
9338-
"@maplibre/maplibre-gl-style-spec" "^19.3.2"
9339-
"@types/geojson" "^7946.0.11"
9340-
"@types/mapbox__point-geometry" "^0.1.2"
9341-
"@types/mapbox__vector-tile" "^1.3.1"
9342-
"@types/pbf" "^3.0.3"
9343-
"@types/supercluster" "^7.1.1"
9365+
"@maplibre/maplibre-gl-style-spec" "^19.3.3"
9366+
"@types/geojson" "^7946.0.13"
9367+
"@types/mapbox__point-geometry" "^0.1.4"
9368+
"@types/mapbox__vector-tile" "^1.3.3"
9369+
"@types/pbf" "^3.0.4"
9370+
"@types/supercluster" "^7.1.3"
93449371
earcut "^2.2.4"
93459372
geojson-vt "^3.2.1"
93469373
gl-matrix "^3.4.3"
@@ -11232,7 +11259,7 @@ react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4:
1123211259
resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
1123311260
integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
1123411261

11235-
react-map-gl@^7.1.5:
11262+
react-map-gl@^7.1.6:
1123611263
version "7.1.6"
1123711264
resolved "https://registry.yarnpkg.com/react-map-gl/-/react-map-gl-7.1.6.tgz#4ea239cd49493cfc9ed15aa52436b024c757c0a9"
1123811265
integrity sha512-9XbrvpFF67Fyi+e6vRLJFnGpo3UF6ZHifIa8cS/wUYSsnv9sVyzGsN++FJy57zkz3Jh3kmf0xKZemR8K0FZLVw==

0 commit comments

Comments
 (0)