@mapcomponents/react-maplibre 0.1.19 → 0.1.23

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 -197
  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 +96 -123
  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 -328
  68. package/dist/index.esm.js +88 -108
  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 +66 -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,51 +2683,34 @@ 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, {
2699
+ mapHook.map.addSource(layerId, _objectSpread2({
2710
2700
  type: "vector",
2711
2701
  tiles: [props.url],
2712
2702
  tileSize: 512,
2713
- attribution: "" //...props.sourceOptions,
2714
-
2715
- });
2703
+ attribution: ""
2704
+ }, props.sourceOptions), mapHook.componentId);
2716
2705
 
2717
2706
  for (var key in props.layers) {
2718
- var layerId = layerName + "_" + key + "_" + idSuffixRef.current;
2719
- layerIdsRef.current[key] = layerId;
2720
- mapRef.current.addLayer(_objectSpread2({
2721
- id: layerId,
2722
- source: sourceName + idSuffixRef.current,
2707
+ var _layerId = layerId.current + "_" + key;
2708
+
2709
+ layerIdsRef.current[key] = _layerId;
2710
+ console.log(_layerId);
2711
+ mapHook.map.addLayer(_objectSpread2({
2712
+ id: _layerId,
2713
+ source: layerId.current,
2723
2714
  type: "line",
2724
2715
  minzoom: 0,
2725
2716
  maxzoom: 22,
@@ -2729,37 +2720,39 @@ var MlVectorTileLayer = function MlVectorTileLayer(props) {
2729
2720
  "line-color": "rgb(80, 80, 80)",
2730
2721
  "line-width": 2
2731
2722
  }
2732
- }, props.layers[key]));
2723
+ }, props.layers[key]), props.insertBeforeLayer, mapHook.componentId);
2733
2724
  layerPaintConfsRef.current[key] = JSON.stringify(props.layers[key].paint);
2725
+ layerLayoutConfsRef.current[key] = JSON.stringify(props.layers[key].layout);
2734
2726
  }
2735
- }, [mapContext.mapIds, props, mapContext]);
2727
+ }, [mapHook.map, props]);
2736
2728
  useEffect(function () {
2737
- if (!mapRef.current) return; // the MapLibre-gl instance (mapContext.map) is accessible here
2738
- // initialize the layer and add it to the MapLibre-gl instance or do something else with it
2729
+ if (!mapHook.map || !initializedRef.current) return; // initialize the layer and add it to the MapLibre-gl instance or do something else with it
2739
2730
 
2740
2731
  for (var key in props.layers) {
2741
- if (mapRef.current.getLayer(layerIdsRef.current[key])) {
2742
- var layerConfString = JSON.stringify(props.layers[key].paint);
2732
+ if (mapHook.map.getLayer(layerIdsRef.current[key])) {
2733
+ // update changed paint property
2734
+ var layerPaintConfString = JSON.stringify(props.layers[key].paint);
2743
2735
 
2744
- if (layerConfString !== layerPaintConfsRef.current[key]) {
2736
+ if (layerPaintConfString !== layerPaintConfsRef.current[key]) {
2745
2737
  for (var paintKey in props.layers[key].paint) {
2746
- mapContext.getMap(props.mapId).setPaintProperty(layerIdsRef.current[key], paintKey, props.layers[key].paint[paintKey]);
2738
+ mapHook.map.setPaintProperty(layerIdsRef.current[key], paintKey, props.layers[key].paint[paintKey]);
2747
2739
  }
2748
2740
  }
2749
2741
 
2750
- layerPaintConfsRef.current[key] = layerConfString;
2751
- }
2752
- }
2753
- }, [props.layers, props, mapContext]);
2754
- useEffect(function () {
2755
- if (!mapRef.current) return; // toggle layer visibility by changing the layout object's visibility property
2742
+ layerPaintConfsRef.current[key] = layerPaintConfString; // update changed layout property
2756
2743
 
2757
- if (props.visible) {
2758
- mapRef.current.setLayoutProperty(layerName + idSuffixRef.current, "visibility", "visible");
2759
- } else {
2760
- mapRef.current.setLayoutProperty(layerName + idSuffixRef.current, "visibility", "none");
2744
+ var layerLayoutConfString = JSON.stringify(props.layers[key].layout);
2745
+
2746
+ if (layerLayoutConfString !== layerLayoutConfsRef.current[key]) {
2747
+ for (var layoutKey in props.layers[key].layout) {
2748
+ mapHook.map.setLayoutProperty(layerIdsRef.current[key], layoutKey, props.layers[key].layout[layoutKey]);
2749
+ }
2750
+ }
2751
+
2752
+ layerLayoutConfsRef.current[key] = layerLayoutConfString;
2753
+ }
2761
2754
  }
2762
- }, [props.visible]);
2755
+ }, [props.layers, mapHook.map]);
2763
2756
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null);
2764
2757
  };
2765
2758
 
@@ -2826,29 +2819,16 @@ var defaultProps = {
2826
2819
  */
2827
2820
 
2828
2821
  var MlWmsLayer = function MlWmsLayer(props) {
2829
- var mapContext = useContext(MapContext);
2830
- var componentId = useRef(props.layerId || "MlWmsLayer-" + v4());
2831
- var mapRef = useRef(null);
2822
+ var mapHook = useMap({
2823
+ mapId: props.mapId,
2824
+ waitForLayer: props.insertBeforeLayer
2825
+ });
2832
2826
  var initializedRef = useRef(false);
2833
- var layerId = useRef(props.layerId || componentId.current);
2834
- useEffect(function () {
2835
- var _componentId = componentId.current;
2836
- return function () {
2837
- // This is the cleanup function, it is called when this react component is removed from react-dom
2838
- if (mapRef.current) {
2839
- mapRef.current.cleanup(_componentId);
2840
- mapRef.current = null;
2841
- }
2842
-
2843
- initializedRef.current = false;
2844
- };
2845
- }, []);
2827
+ var layerId = useRef(props.layerId || "MlWmsLayer-" + mapHook.componentId);
2846
2828
  useEffect(function () {
2847
2829
  var _propsUrlParams2;
2848
2830
 
2849
- if (!mapContext.mapExists(props.mapId) || initializedRef.current) return;
2850
- mapRef.current = mapContext.getMap(props.mapId);
2851
- if (!mapRef.current) return;
2831
+ if (!mapHook.map || initializedRef.current) return;
2852
2832
  initializedRef.current = true;
2853
2833
 
2854
2834
  var _propsUrlParams;
@@ -2867,31 +2847,31 @@ var MlWmsLayer = function MlWmsLayer(props) {
2867
2847
 
2868
2848
  var urlParams = new URLSearchParams(urlParamsObj);
2869
2849
  var urlParamsStr = decodeURIComponent(urlParams.toString()) + "".replace(/%2F/g, "/").replace(/%3A/g, ":");
2870
- mapRef.current.addSource(layerId.current, _objectSpread2({
2850
+ mapHook.map.addSource(layerId.current, _objectSpread2({
2871
2851
  type: "raster",
2872
2852
  tiles: [_wmsUrl + "?" + urlParamsStr],
2873
2853
  tileSize: urlParamsObj.width,
2874
2854
  attribution: props.attribution
2875
- }, props.sourceOptions), componentId.current);
2876
- mapRef.current.addLayer(_objectSpread2({
2855
+ }, props.sourceOptions), mapHook.componentId);
2856
+ mapHook.map.addLayer(_objectSpread2({
2877
2857
  id: layerId.current,
2878
2858
  type: "raster",
2879
- source: componentId.current
2880
- }, props.layerOptions), props.insertBeforeLayer, componentId.current);
2859
+ source: layerId.current
2860
+ }, props.layerOptions), props.insertBeforeLayer, mapHook.componentId);
2881
2861
 
2882
2862
  if (!props.visible) {
2883
- mapRef.current.setLayoutProperty(componentId.current, "visibility", "none");
2863
+ mapHook.map.setLayoutProperty(layerId.current, "visibility", "none");
2884
2864
  }
2885
- }, [mapContext.mapIds, mapContext, props]);
2865
+ }, [mapHook.map, props]);
2886
2866
  useEffect(function () {
2887
- if (!mapRef.current || !initializedRef.current) return; // toggle layer visibility by changing the layout object's visibility property
2867
+ if (!mapHook.map || !initializedRef.current) return; // toggle layer visibility by changing the layout object's visibility property
2888
2868
 
2889
2869
  if (props.visible) {
2890
- mapRef.current.setLayoutProperty(componentId.current, "visibility", "visible");
2870
+ mapHook.map.setLayoutProperty(layerId.current, "visibility", "visible");
2891
2871
  } else {
2892
- mapRef.current.setLayoutProperty(componentId.current, "visibility", "none");
2872
+ mapHook.map.setLayoutProperty(layerId.current, "visibility", "none");
2893
2873
  }
2894
- }, [props.visible]);
2874
+ }, [props.visible, mapHook.map]);
2895
2875
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null);
2896
2876
  };
2897
2877