@mapcomponents/react-maplibre 0.1.20 → 0.1.24

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 (84) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/coverage/clover.xml +195 -198
  3. package/coverage/coverage-final.json +6 -6
  4. package/coverage/lcov-report/index.html +31 -31
  5. package/coverage/lcov-report/src/components/MapLibreMap/MapLibreMap.js.html +1 -1
  6. package/coverage/lcov-report/src/components/MapLibreMap/index.html +1 -1
  7. package/coverage/lcov-report/src/components/MlCreatePdfButton/MlCreatePdfButton.js.html +1 -1
  8. package/coverage/lcov-report/src/components/MlCreatePdfButton/index.html +1 -1
  9. package/coverage/lcov-report/src/components/MlFeatureEditor/MlFeatureEditor.js.html +1 -1
  10. package/coverage/lcov-report/src/components/MlFeatureEditor/index.html +1 -1
  11. package/coverage/lcov-report/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.js.html +1 -1
  12. package/coverage/lcov-report/src/components/MlFillExtrusionLayer/index.html +1 -1
  13. package/coverage/lcov-report/src/components/MlFollowGps/MlFollowGps.js.html +1 -1
  14. package/coverage/lcov-report/src/components/MlFollowGps/index.html +1 -1
  15. package/coverage/lcov-report/src/components/MlGPXViewer/MlGPXViewer.js.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.js.html +4 -4
  19. package/coverage/lcov-report/src/components/MlGeoJsonLayer/index.html +1 -1
  20. package/coverage/lcov-report/src/components/MlImageMarkerLayer/MlImageMarkerLayer.js.html +1 -1
  21. package/coverage/lcov-report/src/components/MlImageMarkerLayer/index.html +1 -1
  22. package/coverage/lcov-report/src/components/MlLayer/MlLayer.js.html +1 -1
  23. package/coverage/lcov-report/src/components/MlLayer/index.html +1 -1
  24. package/coverage/lcov-report/src/components/MlLayerMagnify/MlLayerMagnify.js.html +1 -1
  25. package/coverage/lcov-report/src/components/MlLayerMagnify/index.html +1 -1
  26. package/coverage/lcov-report/src/components/MlLayerSwipe/MlLayerSwipe.js.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 +1 -1
  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.js.html +1 -1
  33. package/coverage/lcov-report/src/components/MlMarker/index.html +1 -1
  34. package/coverage/lcov-report/src/components/MlNavigationCompass/MlNavigationCompass.js.html +1 -1
  35. package/coverage/lcov-report/src/components/MlNavigationCompass/index.html +1 -1
  36. package/coverage/lcov-report/src/components/MlNavigationTools/MlNavigationTools.js.html +1 -1
  37. package/coverage/lcov-report/src/components/MlNavigationTools/index.html +1 -1
  38. package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.js.html +1 -1
  39. package/coverage/lcov-report/src/components/MlOsmLayer/index.html +1 -1
  40. package/coverage/lcov-report/src/components/MlScaleReference/MlScaleReference.js.html +1 -1
  41. package/coverage/lcov-report/src/components/MlScaleReference/index.html +1 -1
  42. package/coverage/lcov-report/src/components/MlShareMapState/MlShareMapState.js.html +261 -111
  43. package/coverage/lcov-report/src/components/MlShareMapState/index.html +9 -9
  44. package/coverage/lcov-report/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.js.html +1 -1
  45. package/coverage/lcov-report/src/components/MlSpatialElevationProfile/index.html +1 -1
  46. package/coverage/lcov-report/src/components/MlThreeJsLayer/MlThreeJsLayer.js.html +1 -1
  47. package/coverage/lcov-report/src/components/MlThreeJsLayer/index.html +1 -1
  48. package/coverage/lcov-report/src/components/MlUseMapDebugger/MlUseMapDebugger.js.html +1 -1
  49. package/coverage/lcov-report/src/components/MlUseMapDebugger/index.html +1 -1
  50. package/coverage/lcov-report/src/components/MlVectorTileLayer/MlVectorTileLayer.js.html +94 -124
  51. package/coverage/lcov-report/src/components/MlVectorTileLayer/index.html +17 -17
  52. package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.js.html +1 -1
  53. package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/index.html +1 -1
  54. package/coverage/lcov-report/src/components/MlWmsLayer/MlWmsLayer.js.html +35 -89
  55. package/coverage/lcov-report/src/components/MlWmsLayer/index.html +17 -17
  56. package/coverage/lcov-report/src/components/MlWmsLoader/MlWmsLoader.js.html +1 -1
  57. package/coverage/lcov-report/src/components/MlWmsLoader/index.html +1 -1
  58. package/coverage/lcov-report/src/hooks/index.html +1 -1
  59. package/coverage/lcov-report/src/hooks/useMap.js.html +23 -23
  60. package/coverage/lcov-report/src/hooks/useMapState.js.html +34 -34
  61. package/coverage/lcov-report/src/hooks/useWms.js.html +1 -1
  62. package/coverage/lcov-report/src/i18n.js.html +1 -1
  63. package/coverage/lcov-report/src/index.html +1 -1
  64. package/coverage/lcov-report/src/translations/english.js.html +1 -1
  65. package/coverage/lcov-report/src/translations/german.js.html +1 -1
  66. package/coverage/lcov-report/src/translations/index.html +1 -1
  67. package/coverage/lcov.info +334 -329
  68. package/dist/index.esm.js +86 -106
  69. package/dist/index.esm.js.map +1 -1
  70. package/package.json +1 -1
  71. package/scripts/build-catalogue-markdown-docs.js +5 -3
  72. package/src/components/MapLibreMap/lib/MapLibreGlWrapper.js +26 -21
  73. package/src/components/MapLibreMap/lib/MapLibreGlWrapper.test.js +3 -3
  74. package/src/components/MlCreatePdfButton/MlCreatePdfButton.doc.de.md +2 -2
  75. package/src/components/MlCreatePdfButton/MlCreatePdfButton.doc.en.md +3 -0
  76. package/src/components/MlFeatureEditor/MlFeatureEditor.test.js +2 -2
  77. package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.js +3 -3
  78. package/src/components/MlNavigationCompass/MlNavigationCompass.test.js +2 -2
  79. package/src/components/MlShareMapState/MlShareMapState.js +138 -88
  80. package/src/components/MlShareMapState/MlShareMapState.stories.js +79 -29
  81. package/src/components/MlVectorTileLayer/MlVectorTileLayer.js +65 -75
  82. package/src/components/MlVectorTileLayer/MlVectorTileLayer.test.js +6 -6
  83. package/src/components/MlWmsLayer/MlWmsLayer.js +16 -34
  84. package/src/hooks/useMap.js +1 -1
package/dist/index.esm.js CHANGED
@@ -331,7 +331,7 @@ var MapLibreGlWrapper = function MapLibreGlWrapper(props) {
331
331
  /**
332
332
  * Maps layerIds to layerState in JSON string form for quick deep comparisons
333
333
  */
334
- layerStateStrings: {},
334
+ layerStateString: "",
335
335
 
336
336
  /**
337
337
  * Previous Version of layerStateString
@@ -345,26 +345,30 @@ var MapLibreGlWrapper = function MapLibreGlWrapper(props) {
345
345
  * @returns object
346
346
  */
347
347
  buildLayerObject: function buildLayerObject(layer) {
348
- var _layer$paint, _layer$layout;
349
-
350
348
  //if (self.baseLayers.indexOf(layer.id) === -1) {
351
- var paint = {};
352
- var values = (_layer$paint = layer.paint) === null || _layer$paint === void 0 ? void 0 : _layer$paint._values;
353
- Object.keys(values || {}).forEach(function (propName) {
354
- paint[propName] = typeof values[propName].value !== "undefined" ? values[propName].value.value : values[propName];
355
- });
356
- var layout = {};
357
- values = (_layer$layout = layer.layout) === null || _layer$layout === void 0 ? void 0 : _layer$layout._values;
358
- Object.keys(values || {}).forEach(function (propName) {
359
- layout[propName] = typeof values[propName].value !== "undefined" ? values[propName].value.value : values[propName];
360
- });
349
+ //let paint = {};
350
+ //let values = layer.paint?._values;
351
+ //Object.keys(values || {}).map((propName) => {
352
+ // paint[propName] =
353
+ // typeof values[propName].value !== "undefined"
354
+ // ? values[propName].value.value
355
+ // : values[propName];
356
+ //});
357
+ //let layout = {};
358
+ //values = layer.layout?._values;
359
+ //Object.keys(values || {}).map((propName) => {
360
+ // layout[propName] =
361
+ // typeof values[propName].value !== "undefined"
362
+ // ? values[propName].value.value
363
+ // : values[propName];
364
+ //});
361
365
  return {
362
366
  id: layer.id,
363
367
  type: layer.type,
364
368
  visible: layer.visibility === "none" ? false : true,
365
- baseLayer: self.baseLayers.indexOf(layer.id) !== -1,
366
- paint: paint,
367
- layout: layout //filter: layers[layerId].filter,
369
+ baseLayer: self.baseLayers.indexOf(layer.id) !== -1 //paint,
370
+ //layout,
371
+ //filter: layers[layerId].filter,
368
372
  //layout: layers[layerId].layout,
369
373
  //maxzoom: layers[layerId].maxzoom,
370
374
  //metadata: layers[layerId].metadata,
@@ -394,9 +398,11 @@ var MapLibreGlWrapper = function MapLibreGlWrapper(props) {
394
398
  */
395
399
  refreshLayerState: function refreshLayerState() {
396
400
  self.wrapper.layerState = self.wrapper.buildLayerObjects();
397
- self.wrapper.layerStateStrings = self.wrapper.layerState.map(function (el) {
398
- return JSON.stringify(el);
399
- });
401
+
402
+ if (JSON.stringify(self.wrapper.layerState) !== self.wrapper.layerStateString) {
403
+ self.wrapper.fire("layerchange");
404
+ self.wrapper.layerStateString = JSON.stringify(self.wrapper.layerState);
405
+ }
400
406
  },
401
407
 
402
408
  /**
@@ -733,16 +739,18 @@ var MapLibreGlWrapper = function MapLibreGlWrapper(props) {
733
739
  self.wrapper.viewportState = self.wrapper.getViewport();
734
740
  self.wrapper.fire("viewportchange");
735
741
  });
742
+ self.map.on("idle", function () {
743
+ self.wrapper.refreshLayerState();
744
+ });
736
745
  self.map.on("data", function () {
737
746
  self.wrapper.refreshLayerState();
738
- self.wrapper.fire("layerchange");
739
747
  });
740
748
 
741
749
  if (typeof props.onReady === "function") {
742
750
  props.onReady(self.map, self);
743
751
  }
744
752
 
745
- case 10:
753
+ case 11:
746
754
  case "end":
747
755
  return _context.stop();
748
756
  }
@@ -1532,15 +1540,15 @@ var MlGeoJsonLayer = function MlGeoJsonLayer(props) {
1532
1540
  }, props.options), props.insertBeforeLayer, mapHook.componentId);
1533
1541
 
1534
1542
  if (typeof props.onHover !== "undefined") {
1535
- mapHook.map.on("mousemove", mapHook.componentId, props.onHover, mapHook.componentId);
1543
+ mapHook.map.on("mousemove", layerId.current, props.onHover, mapHook.componentId);
1536
1544
  }
1537
1545
 
1538
1546
  if (typeof props.onClick !== "undefined") {
1539
- mapHook.map.on("click", mapHook.componentId, props.onClick, mapHook.componentId);
1547
+ mapHook.map.on("click", layerId.current, props.onClick, mapHook.componentId);
1540
1548
  }
1541
1549
 
1542
1550
  if (typeof props.onLeave !== "undefined") {
1543
- mapHook.map.on("mouseleave", mapHook.componentId, props.onLeave, mapHook.componentId);
1551
+ mapHook.map.on("mouseleave", layerId.current, props.onLeave, mapHook.componentId);
1544
1552
  }
1545
1553
 
1546
1554
  if (props.type === "line" && typeof props.transitionTime !== "undefined" && typeof props.geojson.geometry !== "undefined") {
@@ -2675,50 +2683,33 @@ MlOsmLayer.propTypes = {
2675
2683
  */
2676
2684
 
2677
2685
  var MlVectorTileLayer = function MlVectorTileLayer(props) {
2678
- var mapContext = useContext(MapContext);
2679
- var layerName = "vector-tile-layer-";
2680
- var sourceName = "vector-tile-source-";
2681
- var idSuffixRef = useRef(new Date().getTime());
2686
+ var mapHook = useMap({
2687
+ mapId: props.mapId,
2688
+ waitForLayer: props.insertBeforeLayer
2689
+ });
2682
2690
  var layerIdsRef = useRef({});
2691
+ var layerId = useRef(props.layerId || "MlVectorTileLayer-" + mapHook.componentId);
2683
2692
  var layerPaintConfsRef = useRef({});
2693
+ var layerLayoutConfsRef = useRef({});
2684
2694
  var initializedRef = useRef(false);
2685
- var mapRef = useRef(null);
2686
-
2687
- var cleanup = function cleanup() {
2688
- if (mapRef.current && mapRef.current.style) {
2689
- for (var key in layerIdsRef.current) {
2690
- if (mapRef.current.getLayer(layerIdsRef.current[key])) {
2691
- mapRef.current.removeLayer(layerIdsRef.current[key]);
2692
- }
2693
- }
2694
-
2695
- if (mapRef.current.getSource(sourceName + idSuffixRef.current)) {
2696
- mapRef.current.removeSource(sourceName + idSuffixRef.current);
2697
- }
2698
- }
2699
- };
2700
-
2701
2695
  useEffect(function () {
2702
- return cleanup;
2703
- }, []);
2704
- useEffect(function () {
2705
- if (!mapContext.mapExists(props.mapId) || initializedRef.current) return;
2706
- initializedRef.current = true;
2707
- mapRef.current = mapContext.getMap(props.mapId); // Add the new layer to the openlayers instance once it is available
2696
+ if (!mapHook.map || initializedRef.current) return;
2697
+ initializedRef.current = true; // Add the new layer to the openlayers instance once it is available
2708
2698
 
2709
- mapRef.current.addSource(sourceName + idSuffixRef.current, _objectSpread2({
2699
+ mapHook.map.addSource(layerId.current, _objectSpread2({
2710
2700
  type: "vector",
2711
2701
  tiles: [props.url],
2712
2702
  tileSize: 512,
2713
2703
  attribution: ""
2714
- }, props.sourceOptions));
2704
+ }, props.sourceOptions), mapHook.componentId);
2715
2705
 
2716
2706
  for (var key in props.layers) {
2717
- var layerId = layerName + "_" + key + "_" + idSuffixRef.current;
2718
- layerIdsRef.current[key] = layerId;
2719
- mapRef.current.addLayer(_objectSpread2({
2720
- id: layerId,
2721
- source: sourceName + idSuffixRef.current,
2707
+ var _layerId = layerId.current + "_" + key;
2708
+
2709
+ layerIdsRef.current[key] = _layerId;
2710
+ mapHook.map.addLayer(_objectSpread2({
2711
+ id: _layerId,
2712
+ source: layerId.current,
2722
2713
  type: "line",
2723
2714
  minzoom: 0,
2724
2715
  maxzoom: 22,
@@ -2728,37 +2719,39 @@ var MlVectorTileLayer = function MlVectorTileLayer(props) {
2728
2719
  "line-color": "rgb(80, 80, 80)",
2729
2720
  "line-width": 2
2730
2721
  }
2731
- }, props.layers[key]));
2722
+ }, props.layers[key]), props.insertBeforeLayer, mapHook.componentId);
2732
2723
  layerPaintConfsRef.current[key] = JSON.stringify(props.layers[key].paint);
2724
+ layerLayoutConfsRef.current[key] = JSON.stringify(props.layers[key].layout);
2733
2725
  }
2734
- }, [mapContext.mapIds, props, mapContext]);
2726
+ }, [mapHook.map, props]);
2735
2727
  useEffect(function () {
2736
- if (!mapRef.current) return; // the MapLibre-gl instance (mapContext.map) is accessible here
2737
- // initialize the layer and add it to the MapLibre-gl instance or do something else with it
2728
+ if (!mapHook.map || !initializedRef.current) return; // initialize the layer and add it to the MapLibre-gl instance or do something else with it
2738
2729
 
2739
2730
  for (var key in props.layers) {
2740
- if (mapRef.current.getLayer(layerIdsRef.current[key])) {
2741
- var layerConfString = JSON.stringify(props.layers[key].paint);
2731
+ if (mapHook.map.getLayer(layerIdsRef.current[key])) {
2732
+ // update changed paint property
2733
+ var layerPaintConfString = JSON.stringify(props.layers[key].paint);
2742
2734
 
2743
- if (layerConfString !== layerPaintConfsRef.current[key]) {
2735
+ if (layerPaintConfString !== layerPaintConfsRef.current[key]) {
2744
2736
  for (var paintKey in props.layers[key].paint) {
2745
- mapContext.getMap(props.mapId).setPaintProperty(layerIdsRef.current[key], paintKey, props.layers[key].paint[paintKey]);
2737
+ mapHook.map.setPaintProperty(layerIdsRef.current[key], paintKey, props.layers[key].paint[paintKey]);
2746
2738
  }
2747
2739
  }
2748
2740
 
2749
- layerPaintConfsRef.current[key] = layerConfString;
2750
- }
2751
- }
2752
- }, [props.layers, props, mapContext]);
2753
- useEffect(function () {
2754
- if (!mapRef.current) return; // toggle layer visibility by changing the layout object's visibility property
2741
+ layerPaintConfsRef.current[key] = layerPaintConfString; // update changed layout property
2755
2742
 
2756
- if (props.visible) {
2757
- mapRef.current.setLayoutProperty(layerName + idSuffixRef.current, "visibility", "visible");
2758
- } else {
2759
- mapRef.current.setLayoutProperty(layerName + idSuffixRef.current, "visibility", "none");
2743
+ var layerLayoutConfString = JSON.stringify(props.layers[key].layout);
2744
+
2745
+ if (layerLayoutConfString !== layerLayoutConfsRef.current[key]) {
2746
+ for (var layoutKey in props.layers[key].layout) {
2747
+ mapHook.map.setLayoutProperty(layerIdsRef.current[key], layoutKey, props.layers[key].layout[layoutKey]);
2748
+ }
2749
+ }
2750
+
2751
+ layerLayoutConfsRef.current[key] = layerLayoutConfString;
2752
+ }
2760
2753
  }
2761
- }, [props.visible]);
2754
+ }, [props.layers, mapHook.map]);
2762
2755
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null);
2763
2756
  };
2764
2757
 
@@ -2825,29 +2818,16 @@ var defaultProps = {
2825
2818
  */
2826
2819
 
2827
2820
  var MlWmsLayer = function MlWmsLayer(props) {
2828
- var mapContext = useContext(MapContext);
2829
- var componentId = useRef(props.layerId || "MlWmsLayer-" + v4());
2830
- var mapRef = useRef(null);
2821
+ var mapHook = useMap({
2822
+ mapId: props.mapId,
2823
+ waitForLayer: props.insertBeforeLayer
2824
+ });
2831
2825
  var initializedRef = useRef(false);
2832
- var layerId = useRef(props.layerId || componentId.current);
2833
- useEffect(function () {
2834
- var _componentId = componentId.current;
2835
- return function () {
2836
- // This is the cleanup function, it is called when this react component is removed from react-dom
2837
- if (mapRef.current) {
2838
- mapRef.current.cleanup(_componentId);
2839
- mapRef.current = null;
2840
- }
2841
-
2842
- initializedRef.current = false;
2843
- };
2844
- }, []);
2826
+ var layerId = useRef(props.layerId || "MlWmsLayer-" + mapHook.componentId);
2845
2827
  useEffect(function () {
2846
2828
  var _propsUrlParams2;
2847
2829
 
2848
- if (!mapContext.mapExists(props.mapId) || initializedRef.current) return;
2849
- mapRef.current = mapContext.getMap(props.mapId);
2850
- if (!mapRef.current) return;
2830
+ if (!mapHook.map || initializedRef.current) return;
2851
2831
  initializedRef.current = true;
2852
2832
 
2853
2833
  var _propsUrlParams;
@@ -2866,31 +2846,31 @@ var MlWmsLayer = function MlWmsLayer(props) {
2866
2846
 
2867
2847
  var urlParams = new URLSearchParams(urlParamsObj);
2868
2848
  var urlParamsStr = decodeURIComponent(urlParams.toString()) + "".replace(/%2F/g, "/").replace(/%3A/g, ":");
2869
- mapRef.current.addSource(layerId.current, _objectSpread2({
2849
+ mapHook.map.addSource(layerId.current, _objectSpread2({
2870
2850
  type: "raster",
2871
2851
  tiles: [_wmsUrl + "?" + urlParamsStr],
2872
2852
  tileSize: urlParamsObj.width,
2873
2853
  attribution: props.attribution
2874
- }, props.sourceOptions), componentId.current);
2875
- mapRef.current.addLayer(_objectSpread2({
2854
+ }, props.sourceOptions), mapHook.componentId);
2855
+ mapHook.map.addLayer(_objectSpread2({
2876
2856
  id: layerId.current,
2877
2857
  type: "raster",
2878
- source: componentId.current
2879
- }, props.layerOptions), props.insertBeforeLayer, componentId.current);
2858
+ source: layerId.current
2859
+ }, props.layerOptions), props.insertBeforeLayer, mapHook.componentId);
2880
2860
 
2881
2861
  if (!props.visible) {
2882
- mapRef.current.setLayoutProperty(componentId.current, "visibility", "none");
2862
+ mapHook.map.setLayoutProperty(layerId.current, "visibility", "none");
2883
2863
  }
2884
- }, [mapContext.mapIds, mapContext, props]);
2864
+ }, [mapHook.map, props]);
2885
2865
  useEffect(function () {
2886
- if (!mapRef.current || !initializedRef.current) return; // toggle layer visibility by changing the layout object's visibility property
2866
+ if (!mapHook.map || !initializedRef.current) return; // toggle layer visibility by changing the layout object's visibility property
2887
2867
 
2888
2868
  if (props.visible) {
2889
- mapRef.current.setLayoutProperty(componentId.current, "visibility", "visible");
2869
+ mapHook.map.setLayoutProperty(layerId.current, "visibility", "visible");
2890
2870
  } else {
2891
- mapRef.current.setLayoutProperty(componentId.current, "visibility", "none");
2871
+ mapHook.map.setLayoutProperty(layerId.current, "visibility", "none");
2892
2872
  }
2893
- }, [props.visible]);
2873
+ }, [props.visible, mapHook.map]);
2894
2874
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null);
2895
2875
  };
2896
2876