@mapcomponents/react-maplibre 0.1.20 → 0.1.21

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 (83) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/coverage/clover.xml +179 -165
  3. package/coverage/coverage-final.json +6 -6
  4. package/coverage/lcov-report/index.html +36 -36
  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 +49 -13
  51. package/coverage/lcov-report/src/components/MlVectorTileLayer/index.html +15 -15
  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 +12 -12
  59. package/coverage/lcov-report/src/hooks/useMap.js.html +40 -28
  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 +304 -268
  68. package/dist/index.esm.js +69 -59
  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 +17 -5
  82. package/src/components/MlWmsLayer/MlWmsLayer.js +16 -34
  83. package/src/hooks/useMap.js +4 -0
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
  }
@@ -1008,7 +1016,12 @@ function useMap(props) {
1008
1016
 
1009
1017
  useEffect(function () {
1010
1018
  var _componentId = componentId.current;
1019
+ console.log("initialize maphook");
1011
1020
  return function () {
1021
+ console.log("cleanup maphook");
1022
+ console.log(_typeof(mapRef.current));
1023
+ console.log(JSON.stringify(mapRef.current.style._order));
1024
+
1012
1025
  if (mapRef.current) {
1013
1026
  mapRef.current.cleanup(_componentId);
1014
1027
  mapRef.current = undefined;
@@ -1532,15 +1545,15 @@ var MlGeoJsonLayer = function MlGeoJsonLayer(props) {
1532
1545
  }, props.options), props.insertBeforeLayer, mapHook.componentId);
1533
1546
 
1534
1547
  if (typeof props.onHover !== "undefined") {
1535
- mapHook.map.on("mousemove", mapHook.componentId, props.onHover, mapHook.componentId);
1548
+ mapHook.map.on("mousemove", layerId.current, props.onHover, mapHook.componentId);
1536
1549
  }
1537
1550
 
1538
1551
  if (typeof props.onClick !== "undefined") {
1539
- mapHook.map.on("click", mapHook.componentId, props.onClick, mapHook.componentId);
1552
+ mapHook.map.on("click", layerId.current, props.onClick, mapHook.componentId);
1540
1553
  }
1541
1554
 
1542
1555
  if (typeof props.onLeave !== "undefined") {
1543
- mapHook.map.on("mouseleave", mapHook.componentId, props.onLeave, mapHook.componentId);
1556
+ mapHook.map.on("mouseleave", layerId.current, props.onLeave, mapHook.componentId);
1544
1557
  }
1545
1558
 
1546
1559
  if (props.type === "line" && typeof props.transitionTime !== "undefined" && typeof props.geojson.geometry !== "undefined") {
@@ -2751,12 +2764,17 @@ var MlVectorTileLayer = function MlVectorTileLayer(props) {
2751
2764
  }
2752
2765
  }, [props.layers, props, mapContext]);
2753
2766
  useEffect(function () {
2754
- if (!mapRef.current) return; // toggle layer visibility by changing the layout object's visibility property
2767
+ if (!mapRef.current) return;
2755
2768
 
2756
- if (props.visible) {
2757
- mapRef.current.setLayoutProperty(layerName + idSuffixRef.current, "visibility", "visible");
2758
- } else {
2759
- mapRef.current.setLayoutProperty(layerName + idSuffixRef.current, "visibility", "none");
2769
+ for (var key in props.layers) {
2770
+ if (mapRef.current.getLayer(layerIdsRef.current[key])) {
2771
+ // toggle layer visibility by changing the layout object's visibility property
2772
+ if (props.visible) {
2773
+ mapContext.getMap(props.mapId).setLayoutProperty(layerIdsRef.current[key], "visibility", "visible");
2774
+ } else {
2775
+ mapContext.getMap(props.mapId).setLayoutProperty(layerIdsRef.current[key], "visibility", "none");
2776
+ }
2777
+ }
2760
2778
  }
2761
2779
  }, [props.visible]);
2762
2780
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null);
@@ -2778,6 +2796,11 @@ MlVectorTileLayer.propTypes = {
2778
2796
  */
2779
2797
  layers: PropTypes.object,
2780
2798
 
2799
+ /**
2800
+ * Boolean value to control the visibility of this layer
2801
+ */
2802
+ visible: PropTypes.bool,
2803
+
2781
2804
  /**
2782
2805
  * String of the URL of a wms layer
2783
2806
  */
@@ -2825,29 +2848,16 @@ var defaultProps = {
2825
2848
  */
2826
2849
 
2827
2850
  var MlWmsLayer = function MlWmsLayer(props) {
2828
- var mapContext = useContext(MapContext);
2829
- var componentId = useRef(props.layerId || "MlWmsLayer-" + v4());
2830
- var mapRef = useRef(null);
2851
+ var mapHook = useMap({
2852
+ mapId: props.mapId,
2853
+ waitForLayer: props.insertBeforeLayer
2854
+ });
2831
2855
  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
- }, []);
2856
+ var layerId = useRef(props.layerId || "MlWmsLayer-" + mapHook.componentId);
2845
2857
  useEffect(function () {
2846
2858
  var _propsUrlParams2;
2847
2859
 
2848
- if (!mapContext.mapExists(props.mapId) || initializedRef.current) return;
2849
- mapRef.current = mapContext.getMap(props.mapId);
2850
- if (!mapRef.current) return;
2860
+ if (!mapHook.map || initializedRef.current) return;
2851
2861
  initializedRef.current = true;
2852
2862
 
2853
2863
  var _propsUrlParams;
@@ -2866,31 +2876,31 @@ var MlWmsLayer = function MlWmsLayer(props) {
2866
2876
 
2867
2877
  var urlParams = new URLSearchParams(urlParamsObj);
2868
2878
  var urlParamsStr = decodeURIComponent(urlParams.toString()) + "".replace(/%2F/g, "/").replace(/%3A/g, ":");
2869
- mapRef.current.addSource(layerId.current, _objectSpread2({
2879
+ mapHook.map.addSource(layerId.current, _objectSpread2({
2870
2880
  type: "raster",
2871
2881
  tiles: [_wmsUrl + "?" + urlParamsStr],
2872
2882
  tileSize: urlParamsObj.width,
2873
2883
  attribution: props.attribution
2874
- }, props.sourceOptions), componentId.current);
2875
- mapRef.current.addLayer(_objectSpread2({
2884
+ }, props.sourceOptions), mapHook.componentId);
2885
+ mapHook.map.addLayer(_objectSpread2({
2876
2886
  id: layerId.current,
2877
2887
  type: "raster",
2878
- source: componentId.current
2879
- }, props.layerOptions), props.insertBeforeLayer, componentId.current);
2888
+ source: layerId.current
2889
+ }, props.layerOptions), props.insertBeforeLayer, mapHook.componentId);
2880
2890
 
2881
2891
  if (!props.visible) {
2882
- mapRef.current.setLayoutProperty(componentId.current, "visibility", "none");
2892
+ mapHook.map.setLayoutProperty(layerId.current, "visibility", "none");
2883
2893
  }
2884
- }, [mapContext.mapIds, mapContext, props]);
2894
+ }, [mapHook.map, props]);
2885
2895
  useEffect(function () {
2886
- if (!mapRef.current || !initializedRef.current) return; // toggle layer visibility by changing the layout object's visibility property
2896
+ if (!mapHook.map || !initializedRef.current) return; // toggle layer visibility by changing the layout object's visibility property
2887
2897
 
2888
2898
  if (props.visible) {
2889
- mapRef.current.setLayoutProperty(componentId.current, "visibility", "visible");
2899
+ mapHook.map.setLayoutProperty(layerId.current, "visibility", "visible");
2890
2900
  } else {
2891
- mapRef.current.setLayoutProperty(componentId.current, "visibility", "none");
2901
+ mapHook.map.setLayoutProperty(layerId.current, "visibility", "none");
2892
2902
  }
2893
- }, [props.visible]);
2903
+ }, [props.visible, mapHook.map]);
2894
2904
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null);
2895
2905
  };
2896
2906