@mapcomponents/react-maplibre 0.1.43 → 0.1.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/coverage/clover.xml +222 -146
  3. package/coverage/coverage-final.json +7 -5
  4. package/coverage/lcov-report/index.html +86 -71
  5. package/coverage/lcov-report/src/components/MapLibreMap/MapLibreMap.tsx.html +40 -10
  6. package/coverage/lcov-report/src/components/MapLibreMap/index.html +17 -17
  7. package/coverage/lcov-report/src/components/MlCreatePdfButton/MlCreatePdfButton.tsx.html +1 -1
  8. package/coverage/lcov-report/src/components/MlCreatePdfButton/index.html +1 -1
  9. package/coverage/lcov-report/src/components/MlFeatureEditor/MlFeatureEditor.tsx.html +1 -1
  10. package/coverage/lcov-report/src/components/MlFeatureEditor/index.html +1 -1
  11. package/coverage/lcov-report/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.tsx.html +1 -1
  12. package/coverage/lcov-report/src/components/MlFillExtrusionLayer/index.html +1 -1
  13. package/coverage/lcov-report/src/components/MlFollowGps/MlFollowGps.tsx.html +1 -1
  14. package/coverage/lcov-report/src/components/MlFollowGps/index.html +1 -1
  15. package/coverage/lcov-report/src/components/MlGPXViewer/MlGPXViewer.tsx.html +1 -1
  16. package/coverage/lcov-report/src/components/MlGPXViewer/gpxConverter.js.html +1 -1
  17. package/coverage/lcov-report/src/components/MlGPXViewer/index.html +1 -1
  18. package/coverage/lcov-report/src/components/MlGeoJsonLayer/MlGeoJsonLayer.tsx.html +1 -1
  19. package/coverage/lcov-report/src/components/MlGeoJsonLayer/index.html +1 -1
  20. package/coverage/lcov-report/src/components/MlImageMarkerLayer/MlImageMarkerLayer.tsx.html +188 -53
  21. package/coverage/lcov-report/src/components/MlImageMarkerLayer/index.html +21 -21
  22. package/coverage/lcov-report/src/components/MlLayer/MlLayer.tsx.html +1 -1
  23. package/coverage/lcov-report/src/components/MlLayer/index.html +1 -1
  24. package/coverage/lcov-report/src/components/MlLayerMagnify/MlLayerMagnify.tsx.html +1 -1
  25. package/coverage/lcov-report/src/components/MlLayerMagnify/index.html +1 -1
  26. package/coverage/lcov-report/src/components/MlLayerSwipe/MlLayerSwipe.tsx.html +1 -1
  27. package/coverage/lcov-report/src/components/MlLayerSwipe/index.html +1 -1
  28. package/coverage/lcov-report/src/components/MlLayerSwitcher/MlLayerSwitcher.js.html +2 -2
  29. package/coverage/lcov-report/src/components/MlLayerSwitcher/components/LayerBox.js.html +1 -1
  30. package/coverage/lcov-report/src/components/MlLayerSwitcher/components/index.html +1 -1
  31. package/coverage/lcov-report/src/components/MlLayerSwitcher/index.html +1 -1
  32. package/coverage/lcov-report/src/components/MlMarker/MlMarker.tsx.html +1 -1
  33. package/coverage/lcov-report/src/components/MlMarker/index.html +1 -1
  34. package/coverage/lcov-report/src/components/MlMeasureTool/MlMeasureTool.tsx.html +184 -0
  35. package/coverage/lcov-report/src/components/MlMeasureTool/index.html +116 -0
  36. package/coverage/lcov-report/src/components/MlNavigationCompass/MlNavigationCompass.tsx.html +1 -1
  37. package/coverage/lcov-report/src/components/MlNavigationCompass/index.html +1 -1
  38. package/coverage/lcov-report/src/components/MlNavigationTools/MlNavigationTools.tsx.html +1 -1
  39. package/coverage/lcov-report/src/components/MlNavigationTools/index.html +1 -1
  40. package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.js.html +1 -1
  41. package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.stories_.js.html +232 -0
  42. package/coverage/lcov-report/src/components/MlOsmLayer/index.html +25 -10
  43. package/coverage/lcov-report/src/components/MlScaleReference/MlScaleReference.js.html +1 -1
  44. package/coverage/lcov-report/src/components/MlScaleReference/index.html +1 -1
  45. package/coverage/lcov-report/src/components/MlShareMapState/MlShareMapState.js.html +1 -1
  46. package/coverage/lcov-report/src/components/MlShareMapState/index.html +1 -1
  47. package/coverage/lcov-report/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.js.html +1 -1
  48. package/coverage/lcov-report/src/components/MlSpatialElevationProfile/index.html +1 -1
  49. package/coverage/lcov-report/src/components/MlThreeJsLayer/MlThreeJsLayer.js.html +1 -1
  50. package/coverage/lcov-report/src/components/MlThreeJsLayer/index.html +1 -1
  51. package/coverage/lcov-report/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.tsx.html +1 -1
  52. package/coverage/lcov-report/src/components/MlTransitionGeoJsonLayer/index.html +1 -1
  53. package/coverage/lcov-report/src/components/MlUseMapDebugger/MlUseMapDebugger.js.html +1 -1
  54. package/coverage/lcov-report/src/components/MlUseMapDebugger/index.html +1 -1
  55. package/coverage/lcov-report/src/components/MlVectorTileLayer/MlVectorTileLayer.tsx.html +74 -20
  56. package/coverage/lcov-report/src/components/MlVectorTileLayer/index.html +19 -19
  57. package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.js.html +1 -1
  58. package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/index.html +1 -1
  59. package/coverage/lcov-report/src/components/MlWmsLayer/MlWmsLayer.tsx.html +80 -20
  60. package/coverage/lcov-report/src/components/MlWmsLayer/index.html +21 -21
  61. package/coverage/lcov-report/src/components/MlWmsLoader/MlWmsLoader.tsx.html +1 -1
  62. package/coverage/lcov-report/src/components/MlWmsLoader/index.html +1 -1
  63. package/coverage/lcov-report/src/contexts/MapContext.tsx.html +1 -1
  64. package/coverage/lcov-report/src/contexts/SimpleDataContext.js.html +1 -1
  65. package/coverage/lcov-report/src/contexts/SimpleDataProvider.js.html +1 -1
  66. package/coverage/lcov-report/src/contexts/index.html +1 -1
  67. package/coverage/lcov-report/src/hooks/index.html +19 -19
  68. package/coverage/lcov-report/src/hooks/useLayer.ts.html +72 -27
  69. package/coverage/lcov-report/src/hooks/useMap.ts.html +1 -1
  70. package/coverage/lcov-report/src/hooks/useMapState.ts.html +1 -1
  71. package/coverage/lcov-report/src/hooks/useWms.js.html +1 -1
  72. package/coverage/lcov-report/src/index.html +1 -1
  73. package/coverage/lcov-report/src/index.ts.html +9 -6
  74. package/coverage/lcov.info +452 -279
  75. package/dist/index.esm.js +136 -40
  76. package/dist/index.esm.js.map +1 -1
  77. package/docs-build/{0.b1b9b035.iframe.bundle.js → 0.0ee4f98c.iframe.bundle.js} +2 -2
  78. package/docs-build/0.0ee4f98c.iframe.bundle.js.map +1 -0
  79. package/docs-build/{1.c50fb367.iframe.bundle.js → 1.bb3cf738.iframe.bundle.js} +3 -3
  80. package/docs-build/1.bb3cf738.iframe.bundle.js.map +1 -0
  81. package/docs-build/{17.2e544968.iframe.bundle.js → 17.97db5b3f.iframe.bundle.js} +2 -2
  82. package/docs-build/17.97db5b3f.iframe.bundle.js.map +1 -0
  83. package/docs-build/{18.42087006.iframe.bundle.js → 18.f8d843df.iframe.bundle.js} +3 -3
  84. package/docs-build/18.f8d843df.iframe.bundle.js.map +1 -0
  85. package/docs-build/{19.7e782442.iframe.bundle.js → 19.c45e6b08.iframe.bundle.js} +2 -2
  86. package/docs-build/19.c45e6b08.iframe.bundle.js.map +1 -0
  87. package/docs-build/{2.e58dc625.iframe.bundle.js → 2.42c790e4.iframe.bundle.js} +2 -2
  88. package/docs-build/2.42c790e4.iframe.bundle.js.map +1 -0
  89. package/docs-build/{20.f009289a.iframe.bundle.js → 20.120bbcfb.iframe.bundle.js} +2 -2
  90. package/docs-build/20.120bbcfb.iframe.bundle.js.map +1 -0
  91. package/docs-build/{21.1cdc9040.iframe.bundle.js → 21.37c885f1.iframe.bundle.js} +2 -2
  92. package/docs-build/21.37c885f1.iframe.bundle.js.map +1 -0
  93. package/docs-build/{22.c9e6b2d7.iframe.bundle.js → 22.7fbc99f4.iframe.bundle.js} +2 -2
  94. package/docs-build/22.7fbc99f4.iframe.bundle.js.map +1 -0
  95. package/docs-build/{3.a8172b89.iframe.bundle.js → 3.1a37a83e.iframe.bundle.js} +2 -2
  96. package/docs-build/3.1a37a83e.iframe.bundle.js.map +1 -0
  97. package/docs-build/iframe.html +1 -1
  98. package/docs-build/main~24120820.905c51c8.iframe.bundle.js +2 -0
  99. package/docs-build/main~24120820.905c51c8.iframe.bundle.js.map +1 -0
  100. package/docs-build/thumbnails/MlMeasureTool.png +0 -0
  101. package/docs-build/{vendors~main~0ad7406a.2054ae7c.iframe.bundle.js → vendors~main~0ad7406a.93aea1be.iframe.bundle.js} +3 -3
  102. package/docs-build/vendors~main~0ad7406a.93aea1be.iframe.bundle.js.map +1 -0
  103. package/docs-build/vendors~main~0f485567.6e7163ef.iframe.bundle.js +2 -0
  104. package/docs-build/vendors~main~0f485567.6e7163ef.iframe.bundle.js.map +1 -0
  105. package/docs-build/{vendors~main~41a6ab2c.a947ed53.iframe.bundle.js → vendors~main~41a6ab2c.da377733.iframe.bundle.js} +2 -2
  106. package/docs-build/vendors~main~41a6ab2c.da377733.iframe.bundle.js.map +1 -0
  107. package/docs-build/{vendors~main~52589227.1d1558cd.iframe.bundle.js → vendors~main~52589227.cebbe724.iframe.bundle.js} +2 -2
  108. package/docs-build/vendors~main~52589227.cebbe724.iframe.bundle.js.map +1 -0
  109. package/docs-build/{vendors~main~57c1f6cb.6a433835.iframe.bundle.js → vendors~main~57c1f6cb.86178471.iframe.bundle.js} +2 -2
  110. package/docs-build/vendors~main~57c1f6cb.86178471.iframe.bundle.js.map +1 -0
  111. package/docs-build/{vendors~main~73914085.a8e03e3b.iframe.bundle.js → vendors~main~73914085.e2f34f8e.iframe.bundle.js} +6 -6
  112. package/docs-build/{vendors~main~73914085.a8e03e3b.iframe.bundle.js.map → vendors~main~73914085.e2f34f8e.iframe.bundle.js.map} +1 -1
  113. package/docs-build/{vendors~main~9c5b28f6.7b8beed1.iframe.bundle.js → vendors~main~9c5b28f6.eefa7445.iframe.bundle.js} +3 -3
  114. package/docs-build/vendors~main~9c5b28f6.eefa7445.iframe.bundle.js.map +1 -0
  115. package/docs-build/{vendors~main~b5906859.7f66dcaf.iframe.bundle.js → vendors~main~b5906859.210afc21.iframe.bundle.js} +5 -5
  116. package/docs-build/vendors~main~b5906859.210afc21.iframe.bundle.js.map +1 -0
  117. package/docs-build/{vendors~main~b8f44717.7053e467.iframe.bundle.js → vendors~main~b8f44717.7b869975.iframe.bundle.js} +3 -3
  118. package/docs-build/vendors~main~b8f44717.7b869975.iframe.bundle.js.map +1 -0
  119. package/docs-build/{vendors~main~b9cf3951.a4fd68f5.iframe.bundle.js → vendors~main~b9cf3951.62d39717.iframe.bundle.js} +11 -11
  120. package/docs-build/vendors~main~b9cf3951.62d39717.iframe.bundle.js.map +1 -0
  121. package/docs-build/vendors~main~d939e436.394e3bc7.iframe.bundle.js +2 -0
  122. package/docs-build/vendors~main~d939e436.394e3bc7.iframe.bundle.js.map +1 -0
  123. package/docs-build/vendors~main~f420d588.88814a6a.iframe.bundle.js +107 -0
  124. package/docs-build/vendors~main~f420d588.88814a6a.iframe.bundle.js.map +1 -0
  125. package/package.json +1 -1
  126. package/public/thumbnails/MlMeasureTool.png +0 -0
  127. package/src/components/MapLibreMap/MapLibreMap.stories.js +75 -20
  128. package/src/components/MapLibreMap/MapLibreMap.tsx +11 -1
  129. package/src/components/MapLibreMap/lib/MapLibreGlWrapper.ts +2 -2
  130. package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.test.js +1 -1
  131. package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.tsx +82 -37
  132. package/src/components/MlLayerSwitcher/MlLayerSwitcher.js +1 -1
  133. package/src/components/MlMeasureTool/MlMeasureTool.doc.de.md +3 -0
  134. package/src/components/MlMeasureTool/MlMeasureTool.meta.json +15 -0
  135. package/src/components/MlMeasureTool/MlMeasureTool.stories.js +67 -0
  136. package/src/components/MlMeasureTool/MlMeasureTool.tsx +33 -0
  137. package/src/components/MlOsmLayer/{MlOsmLayer.stories.js → MlOsmLayer.stories_.js} +0 -0
  138. package/src/components/MlVectorTileLayer/MlVectorTileLayer.tsx +26 -8
  139. package/src/components/MlWmsLayer/MlWmsLayer.stories.js +2 -3
  140. package/src/components/MlWmsLayer/MlWmsLayer.tsx +27 -7
  141. package/src/hooks/useLayer.ts +26 -11
  142. package/src/index.ts +4 -4
  143. package/src/util/layerRemovalTest.js +5 -0
  144. package/docs-build/0.b1b9b035.iframe.bundle.js.map +0 -1
  145. package/docs-build/1.c50fb367.iframe.bundle.js.map +0 -1
  146. package/docs-build/17.2e544968.iframe.bundle.js.map +0 -1
  147. package/docs-build/18.42087006.iframe.bundle.js.map +0 -1
  148. package/docs-build/19.7e782442.iframe.bundle.js.map +0 -1
  149. package/docs-build/2.e58dc625.iframe.bundle.js.map +0 -1
  150. package/docs-build/20.f009289a.iframe.bundle.js.map +0 -1
  151. package/docs-build/21.1cdc9040.iframe.bundle.js.map +0 -1
  152. package/docs-build/22.c9e6b2d7.iframe.bundle.js.map +0 -1
  153. package/docs-build/3.a8172b89.iframe.bundle.js.map +0 -1
  154. package/docs-build/main~24120820.edd86ba9.iframe.bundle.js +0 -2
  155. package/docs-build/main~24120820.edd86ba9.iframe.bundle.js.map +0 -1
  156. package/docs-build/vendors~main~0ad7406a.2054ae7c.iframe.bundle.js.map +0 -1
  157. package/docs-build/vendors~main~0f485567.de36692f.iframe.bundle.js +0 -2
  158. package/docs-build/vendors~main~0f485567.de36692f.iframe.bundle.js.map +0 -1
  159. package/docs-build/vendors~main~41a6ab2c.a947ed53.iframe.bundle.js.map +0 -1
  160. package/docs-build/vendors~main~52589227.1d1558cd.iframe.bundle.js.map +0 -1
  161. package/docs-build/vendors~main~57c1f6cb.6a433835.iframe.bundle.js.map +0 -1
  162. package/docs-build/vendors~main~9c5b28f6.7b8beed1.iframe.bundle.js.map +0 -1
  163. package/docs-build/vendors~main~b5906859.7f66dcaf.iframe.bundle.js.map +0 -1
  164. package/docs-build/vendors~main~b8f44717.7053e467.iframe.bundle.js.map +0 -1
  165. package/docs-build/vendors~main~b9cf3951.a4fd68f5.iframe.bundle.js.map +0 -1
  166. package/docs-build/vendors~main~d939e436.ba1cad1b.iframe.bundle.js +0 -2
  167. package/docs-build/vendors~main~d939e436.ba1cad1b.iframe.bundle.js.map +0 -1
  168. package/docs-build/vendors~main~f420d588.59c93444.iframe.bundle.js +0 -107
  169. package/docs-build/vendors~main~f420d588.59c93444.iframe.bundle.js.map +0 -1
package/dist/index.esm.js CHANGED
@@ -331,7 +331,7 @@ var MapLibreGlWrapper = /** @class */ (function () {
331
331
  */
332
332
  buildLayerObjects: function () {
333
333
  // @ts-ignore
334
- return self.style._order
334
+ return self.map.style._order
335
335
  .map(function (layerId) {
336
336
  return self.wrapper.buildLayerObject(self.map.style._layers[layerId]);
337
337
  })
@@ -568,7 +568,7 @@ var MapLibreGlWrapper = /** @class */ (function () {
568
568
  props[_i] = arguments[_i];
569
569
  }
570
570
  if (self.map &&
571
- _this.map.style &&
571
+ self.map.style &&
572
572
  typeof self.map.style[item] === "function") {
573
573
  (_a = self.map.style)[item].apply(_a, props);
574
574
  }
@@ -744,7 +744,7 @@ var defaultProps$2 = {
744
744
  id: "background",
745
745
  type: "background",
746
746
  paint: {
747
- "background-color": "rgba(80,0,0,0)",
747
+ "background-color": "rgba(0,0,0,0)",
748
748
  },
749
749
  },
750
750
  ],
@@ -762,11 +762,13 @@ var defaultProps$2 = {
762
762
  * @category Map components
763
763
  */
764
764
  var MapLibreMap = function (props) {
765
+ var _a;
765
766
  var map = useRef(null);
766
767
  var mapContainer = useRef();
767
768
  var mapContext = useContext(MapContext);
768
769
  var mapIdRef = useRef(props.mapId);
769
770
  var initializedRef = useRef(false);
771
+ var currentStyle = useRef((_a = props.options) === null || _a === void 0 ? void 0 : _a.style);
770
772
  useEffect(function () {
771
773
  var mapId = mapIdRef.current;
772
774
  return function () {
@@ -796,6 +798,15 @@ var MapLibreMap = function (props) {
796
798
  });
797
799
  }
798
800
  }, [props.options, props.mapId]);
801
+ useEffect(function () {
802
+ var _a, _b;
803
+ if (((_a = map.current) === null || _a === void 0 ? void 0 : _a.map) && ((_b = props === null || props === void 0 ? void 0 : props.options) === null || _b === void 0 ? void 0 : _b.style) && currentStyle.current !== props.options.style) {
804
+ console.log("set style");
805
+ currentStyle.current = props.options.style;
806
+ map.current.map.setStyle(props.options.style);
807
+ }
808
+ // @ts-ignore: props.options is either passed or populated with default values
809
+ }, [props.options.style]);
799
810
  return React__default.createElement("div", { ref: mapContainer, className: "mapContainer", style: props.style });
800
811
  };
801
812
  MapLibreMap.defaultProps = defaultProps$2;
@@ -12220,13 +12231,15 @@ function useLayer(props) {
12220
12231
  var layerId = useRef(props.layerId || (props.idPrefix ? props.idPrefix : "Layer-") + mapHook.componentId);
12221
12232
  var createLayer = useCallback(function () {
12222
12233
  var _a, _b;
12223
- if (initializedRef.current || !mapHook.map)
12234
+ if (!mapHook.map)
12224
12235
  return;
12225
- initializedRef.current = true;
12226
12236
  if (mapHook.map.map.getLayer(layerId.current)) {
12227
- // remove (cleanup) & reinitialize the layer if type has changed
12228
- cleanup();
12237
+ mapHook.cleanup();
12238
+ }
12239
+ if (mapHook.map.map.getSource(layerId.current)) {
12240
+ mapHook.map.map.removeSource(layerId.current);
12229
12241
  }
12242
+ initializedRef.current = true;
12230
12243
  mapHook.map.addLayer(__assign(__assign(__assign({}, props.options), (props.geojson
12231
12244
  ? {
12232
12245
  source: {
@@ -12249,6 +12262,14 @@ function useLayer(props) {
12249
12262
  if (typeof props.onLeave !== "undefined") {
12250
12263
  mapHook.map.on("mouseleave", layerId.current, props.onLeave, mapHook.componentId);
12251
12264
  }
12265
+ // recreate layer if style has changed
12266
+ mapHook.map.on("styledata", function () {
12267
+ var _a;
12268
+ if (initializedRef.current && !((_a = mapHook.map) === null || _a === void 0 ? void 0 : _a.map.getLayer(layerId.current))) {
12269
+ console.log("Recreate Layer");
12270
+ createLayer();
12271
+ }
12272
+ }, mapHook.componentId);
12252
12273
  layerPaintConfRef.current = JSON.stringify((_a = props.options) === null || _a === void 0 ? void 0 : _a.paint);
12253
12274
  layerLayoutConfRef.current = JSON.stringify((_b = props.options) === null || _b === void 0 ? void 0 : _b.layout);
12254
12275
  layerTypeRef.current = props.options.type;
@@ -12273,7 +12294,10 @@ function useLayer(props) {
12273
12294
  }, [props.geojson, mapHook.map, props.options.type]);
12274
12295
  useEffect(function () {
12275
12296
  var _a, _b, _c, _d, _e;
12276
- if (!mapHook.map || !((_c = (_b = (_a = mapHook.map) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.getLayer) === null || _c === void 0 ? void 0 : _c.call(_b, layerId.current)) || !initializedRef.current)
12297
+ if (!mapHook.map ||
12298
+ !((_c = (_b = (_a = mapHook.map) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.getLayer) === null || _c === void 0 ? void 0 : _c.call(_b, layerId.current)) ||
12299
+ !initializedRef.current ||
12300
+ props.options.type !== layerTypeRef.current)
12277
12301
  return;
12278
12302
  var key;
12279
12303
  var layoutString = JSON.stringify(props.options.layout);
@@ -12297,13 +12321,10 @@ function useLayer(props) {
12297
12321
  layerPaintConfRef.current = paintString;
12298
12322
  }
12299
12323
  }, [props.options, mapHook.map]);
12300
- var cleanup = function () {
12301
- initializedRef.current = false;
12302
- mapHook.cleanup();
12303
- };
12304
12324
  useEffect(function () {
12305
12325
  return function () {
12306
- cleanup();
12326
+ initializedRef.current = false;
12327
+ mapHook.cleanup();
12307
12328
  };
12308
12329
  }, []);
12309
12330
  return {
@@ -12564,16 +12585,16 @@ var MlImageMarkerLayer = function (props) {
12564
12585
  mapId: props.mapId,
12565
12586
  waitForLayer: props.insertBeforeLayer,
12566
12587
  });
12567
- var layerInitializedRef = useRef(false);
12588
+ var initializedRef = useRef(false);
12589
+ var recreationInProgress = useRef(false);
12568
12590
  var imageIdRef = useRef(props.imageId || "img_" + new Date().getTime());
12569
12591
  var layerId = useRef(props.layerId || "MlImageMarkerLayer-" + mapHook.componentId);
12592
+ // effect to sync Layer paint & layout properties
12570
12593
  useEffect(function () {
12571
12594
  if (!mapHook.map ||
12572
12595
  (mapHook.map && !mapHook.map.map.getLayer(layerId.current)) ||
12573
12596
  !props.options)
12574
12597
  return;
12575
- // the MapLibre-gl instance (mapContext.map) is accessible here
12576
- // initialize the layer and add it to the MapLibre-gl instance or do something else with it
12577
12598
  var key;
12578
12599
  if (props.options.layout) {
12579
12600
  for (key in props.options.layout) {
@@ -12586,37 +12607,81 @@ var MlImageMarkerLayer = function (props) {
12586
12607
  }
12587
12608
  }
12588
12609
  }, [props.options, layerId.current, props.mapId]);
12589
- var addLayer = useCallback(function () {
12590
- if (!mapHook.map)
12591
- return;
12592
- var tmpOptions = __assign({ id: layerId.current, layout: {} }, props.options);
12593
- tmpOptions.layout["icon-image"] = imageIdRef.current;
12594
- mapHook.map.addLayer(tmpOptions, props.insertBeforeLayer, mapHook.componentId);
12595
- }, [props, mapHook.map]);
12596
- useEffect(function () {
12597
- if (!props.options || !mapHook.map || layerInitializedRef.current)
12610
+ var createImage = function (mapHook, props, callback) {
12611
+ if (!mapHook.map) {
12612
+ initializedRef.current = false;
12598
12613
  return;
12599
- layerInitializedRef.current = true;
12600
- if (props.imgSrc) {
12614
+ }
12615
+ if (props.imgSrc && !mapHook.map.map.hasImage(imageIdRef.current)) {
12601
12616
  mapHook.map.map.loadImage(props.imgSrc, function (error, image) {
12602
12617
  if (error)
12603
12618
  throw error;
12604
- if (!mapHook.map)
12619
+ if (!mapHook.map || mapHook.map.map.hasImage(imageIdRef.current))
12605
12620
  return;
12606
12621
  mapHook.map.addImage(imageIdRef.current, image, mapHook.componentId);
12622
+ if (typeof callback === "function") {
12623
+ callback();
12624
+ }
12607
12625
  });
12608
12626
  }
12609
- addLayer();
12610
- }, [mapHook.map, addLayer, props]);
12627
+ else {
12628
+ if (typeof callback === "function") {
12629
+ callback();
12630
+ }
12631
+ }
12632
+ };
12633
+ var createLayer = function (mapHook, props, createMapLibreElements) {
12634
+ var _a;
12635
+ if (!props.options || !mapHook.map || ((_a = mapHook.map) === null || _a === void 0 ? void 0 : _a.map.getLayer(layerId.current)))
12636
+ return;
12637
+ var tmpOptions = __assign({ id: layerId.current, layout: {} }, props.options);
12638
+ tmpOptions.layout["icon-image"] = imageIdRef.current;
12639
+ mapHook.map.addLayer(tmpOptions, props.insertBeforeLayer, mapHook.componentId);
12640
+ // recreate layer if map style.json has changed
12641
+ mapHook.map.on("styledata", function () {
12642
+ var _a;
12643
+ if (initializedRef.current &&
12644
+ !((_a = mapHook.map) === null || _a === void 0 ? void 0 : _a.map.getLayer(layerId.current)) &&
12645
+ !recreationInProgress.current) {
12646
+ initializedRef.current = false;
12647
+ recreationInProgress.current = true;
12648
+ console.log("Recreate Layer " + layerId.current);
12649
+ createMapLibreElements();
12650
+ }
12651
+ }, mapHook.componentId);
12652
+ if (recreationInProgress.current) {
12653
+ recreationInProgress.current = false;
12654
+ }
12655
+ };
12656
+ var createMapLibreElements = useCallback(function () {
12657
+ var _a;
12658
+ if (!mapHook.map || initializedRef.current || ((_a = mapHook.map) === null || _a === void 0 ? void 0 : _a.map.getLayer(layerId.current)))
12659
+ return;
12660
+ initializedRef.current = true;
12661
+ if (recreationInProgress.current) {
12662
+ mapHook.cleanup();
12663
+ }
12664
+ if (props.imgSrc) {
12665
+ createImage(mapHook, props, function () {
12666
+ createLayer(mapHook, props, createMapLibreElements);
12667
+ });
12668
+ }
12669
+ else {
12670
+ createLayer(mapHook, props, createMapLibreElements);
12671
+ }
12672
+ }, [props, mapHook]);
12673
+ useEffect(function () {
12674
+ if (initializedRef.current)
12675
+ return;
12676
+ createMapLibreElements();
12677
+ }, [createMapLibreElements]);
12611
12678
  useEffect(function () {
12612
12679
  if (!mapHook.map ||
12613
12680
  (mapHook.map && !mapHook.map.map.getLayer(layerId.current)) ||
12614
12681
  !props.options) {
12615
12682
  return;
12616
12683
  }
12617
- mapHook.map.map
12618
- .getSource(layerId.current)
12619
- .setData(props.options.source.data);
12684
+ mapHook.map.map.getSource(layerId.current).setData(props.options.source.data);
12620
12685
  }, [props.options.source.data, props]);
12621
12686
  return React__default.createElement(React__default.Fragment, null);
12622
12687
  };
@@ -13337,10 +13402,13 @@ var MlVectorTileLayer = function (props) {
13337
13402
  var layerPaintConfsRef = useRef({});
13338
13403
  var layerLayoutConfsRef = useRef({});
13339
13404
  var initializedRef = useRef(false);
13340
- useEffect(function () {
13341
- if (!mapHook.map || initializedRef.current)
13405
+ var createLayer = useCallback(function () {
13406
+ if (!mapHook.map)
13342
13407
  return;
13343
13408
  initializedRef.current = true;
13409
+ if (mapHook.map.map.getLayer(layerId.current)) {
13410
+ mapHook.cleanup();
13411
+ }
13344
13412
  // Add the new layer to the openlayers instance once it is available
13345
13413
  mapHook.map.addSource(layerId.current, __assign({ type: "vector", tiles: [props.url], tileSize: 512, attribution: "" }, props.sourceOptions), mapHook.componentId);
13346
13414
  for (var key in props.layers) {
@@ -13353,8 +13421,21 @@ var MlVectorTileLayer = function (props) {
13353
13421
  } }, props.layers[key]), props.insertBeforeLayer, mapHook.componentId);
13354
13422
  layerPaintConfsRef.current[key] = JSON.stringify(props.layers[key].paint);
13355
13423
  layerLayoutConfsRef.current[key] = JSON.stringify(props.layers[key].layout);
13424
+ // recreate layer if style has changed
13425
+ mapHook.map.on("styledata", function () {
13426
+ var _a;
13427
+ if (initializedRef.current && !((_a = mapHook.map) === null || _a === void 0 ? void 0 : _a.map.getSource(layerId.current))) {
13428
+ console.log("Recreate Layer " + layerId.current);
13429
+ createLayer();
13430
+ }
13431
+ }, mapHook.componentId);
13356
13432
  }
13357
13433
  }, [mapHook.map, props]);
13434
+ useEffect(function () {
13435
+ if (initializedRef.current)
13436
+ return;
13437
+ createLayer();
13438
+ }, [createLayer]);
13358
13439
  useEffect(function () {
13359
13440
  if (!mapHook.map || !initializedRef.current)
13360
13441
  return;
@@ -13447,10 +13528,13 @@ var MlWmsLayer = function (props) {
13447
13528
  });
13448
13529
  var initializedRef = useRef(false);
13449
13530
  var layerId = useRef(props.layerId || "MlWmsLayer-" + mapHook.componentId);
13450
- useEffect(function () {
13451
- if (!mapHook.map || initializedRef.current)
13531
+ var createLayer = useCallback(function () {
13532
+ if (!mapHook.map)
13452
13533
  return;
13453
13534
  initializedRef.current = true;
13535
+ if (mapHook.map.map.getLayer(layerId.current)) {
13536
+ mapHook.cleanup();
13537
+ }
13454
13538
  var _propsUrlParams;
13455
13539
  var _wmsUrl = props.url;
13456
13540
  if (props.url.indexOf("?") !== -1) {
@@ -13461,14 +13545,26 @@ var MlWmsLayer = function (props) {
13461
13545
  // first spread in default props manually to enable overriding a single parameter without replacing the whole default urlParameters object
13462
13546
  var urlParamsObj = __assign(__assign(__assign({}, defaultProps.urlParameters), Object.fromEntries(_urlParamsFromUrl)), props.urlParameters);
13463
13547
  var urlParams = new URLSearchParams(urlParamsObj);
13464
- var urlParamsStr = decodeURIComponent(urlParams.toString()) +
13465
- "".replace(/%2F/g, "/").replace(/%3A/g, ":");
13548
+ var urlParamsStr = decodeURIComponent(urlParams.toString()) + "".replace(/%2F/g, "/").replace(/%3A/g, ":");
13466
13549
  mapHook.map.addSource(layerId.current, __assign({ type: "raster", tiles: [_wmsUrl + "?" + urlParamsStr], tileSize: urlParamsObj.width, attribution: props.attribution }, props.sourceOptions), mapHook.componentId);
13467
13550
  mapHook.map.addLayer(__assign({ id: layerId.current, type: "raster", source: layerId.current }, props.layerOptions), props.insertBeforeLayer, mapHook.componentId);
13551
+ // recreate layer if map style.json has changed
13552
+ mapHook.map.on("styledata", function () {
13553
+ var _a;
13554
+ if (initializedRef.current && !((_a = mapHook.map) === null || _a === void 0 ? void 0 : _a.map.getLayer(layerId.current))) {
13555
+ console.log("Recreate Layer " + layerId.current);
13556
+ createLayer();
13557
+ }
13558
+ }, mapHook.componentId);
13468
13559
  if (!props.visible) {
13469
13560
  mapHook.map.map.setLayoutProperty(layerId.current, "visibility", "none");
13470
13561
  }
13471
- }, [mapHook, props]);
13562
+ }, [mapHook.map, props]);
13563
+ useEffect(function () {
13564
+ if (initializedRef.current)
13565
+ return;
13566
+ createLayer();
13567
+ }, [createLayer]);
13472
13568
  useEffect(function () {
13473
13569
  if (!mapHook.map || !initializedRef.current)
13474
13570
  return;