@mapcomponents/react-maplibre 0.1.18 → 0.1.22

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 +222 -205
  3. package/coverage/coverage-final.json +6 -6
  4. package/coverage/lcov-report/index.html +30 -30
  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 +20 -5
  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 +110 -17
  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 +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 +390 -349
  68. package/dist/index.esm.js +90 -68
  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 +8 -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 +40 -9
  82. package/src/components/MlWmsLayer/MlWmsLayer.js +16 -34
  83. package/src/hooks/useMap.js +1 -1
@@ -16,6 +16,7 @@ const MlVectorTileLayer = (props) => {
16
16
  const idSuffixRef = useRef(new Date().getTime());
17
17
  const layerIdsRef = useRef({});
18
18
  const layerPaintConfsRef = useRef({});
19
+ const layerLayoutConfsRef = useRef({});
19
20
  const initializedRef = useRef(false);
20
21
  const mapRef = useRef(null);
21
22
 
@@ -48,7 +49,7 @@ const MlVectorTileLayer = (props) => {
48
49
  tiles: [props.url],
49
50
  tileSize: 512,
50
51
  attribution: "",
51
- //...props.sourceOptions,
52
+ ...props.sourceOptions,
52
53
  });
53
54
 
54
55
  for (let key in props.layers) {
@@ -70,6 +71,7 @@ const MlVectorTileLayer = (props) => {
70
71
  ...props.layers[key],
71
72
  });
72
73
  layerPaintConfsRef.current[key] = JSON.stringify(props.layers[key].paint);
74
+ layerLayoutConfsRef.current[key] = JSON.stringify(props.layers[key].layout);
73
75
  }
74
76
  }, [mapContext.mapIds, props, mapContext]);
75
77
 
@@ -79,9 +81,10 @@ const MlVectorTileLayer = (props) => {
79
81
  // initialize the layer and add it to the MapLibre-gl instance or do something else with it
80
82
  for (var key in props.layers) {
81
83
  if (mapRef.current.getLayer(layerIdsRef.current[key])) {
82
- let layerConfString = JSON.stringify(props.layers[key].paint);
84
+ // update changed paint property
85
+ let layerPaintConfString = JSON.stringify(props.layers[key].paint);
83
86
 
84
- if (layerConfString !== layerPaintConfsRef.current[key]) {
87
+ if (layerPaintConfString !== layerPaintConfsRef.current[key]) {
85
88
  for (let paintKey in props.layers[key].paint) {
86
89
  mapContext
87
90
  .getMap(props.mapId)
@@ -92,7 +95,23 @@ const MlVectorTileLayer = (props) => {
92
95
  );
93
96
  }
94
97
  }
95
- layerPaintConfsRef.current[key] = layerConfString;
98
+ layerPaintConfsRef.current[key] = layerPaintConfString;
99
+
100
+ // update changed layout property
101
+ let layerLayoutConfString = JSON.stringify(props.layers[key].layout);
102
+
103
+ if (layerLayoutConfString !== layerLayoutConfsRef.current[key]) {
104
+ for (let layoutKey in props.layers[key].layout) {
105
+ mapContext
106
+ .getMap(props.mapId)
107
+ .setLayoutProperty(
108
+ layerIdsRef.current[key],
109
+ layoutKey,
110
+ props.layers[key].layout[layoutKey]
111
+ );
112
+ }
113
+ }
114
+ layerLayoutConfsRef.current[key] = layerLayoutConfString;
96
115
  }
97
116
  }
98
117
  }, [props.layers, props, mapContext]);
@@ -100,11 +119,19 @@ const MlVectorTileLayer = (props) => {
100
119
  useEffect(() => {
101
120
  if (!mapRef.current) return;
102
121
 
103
- // toggle layer visibility by changing the layout object's visibility property
104
- if (props.visible) {
105
- mapRef.current.setLayoutProperty(layerName + idSuffixRef.current, "visibility", "visible");
106
- } else {
107
- mapRef.current.setLayoutProperty(layerName + idSuffixRef.current, "visibility", "none");
122
+ for (var key in props.layers) {
123
+ if (mapRef.current.getLayer(layerIdsRef.current[key])) {
124
+ // toggle layer visibility by changing the layout object's visibility property
125
+ if (props.visible) {
126
+ mapContext
127
+ .getMap(props.mapId)
128
+ .setLayoutProperty(layerIdsRef.current[key], "visibility", "visible");
129
+ } else {
130
+ mapContext
131
+ .getMap(props.mapId)
132
+ .setLayoutProperty(layerIdsRef.current[key], "visibility", "none");
133
+ }
134
+ }
108
135
  }
109
136
  }, [props.visible]);
110
137
 
@@ -124,6 +151,10 @@ MlVectorTileLayer.propTypes = {
124
151
  * Object that hold layers
125
152
  */
126
153
  layers: PropTypes.object,
154
+ /**
155
+ * Boolean value to control the visibility of this layer
156
+ */
157
+ visible: PropTypes.bool,
127
158
  /**
128
159
  * String of the URL of a wms layer
129
160
  */
@@ -1,5 +1,5 @@
1
- import React, { useContext, useRef, useEffect } from "react";
2
- import { MapContext } from "@mapcomponents/react-core";
1
+ import React, { useRef, useEffect } from "react";
2
+ import useMap from "../../hooks/useMap";
3
3
 
4
4
  import PropTypes from "prop-types";
5
5
  import { v4 as uuidv4 } from "uuid";
@@ -45,31 +45,13 @@ const defaultProps = {
45
45
  * @component
46
46
  */
47
47
  const MlWmsLayer = (props) => {
48
- const mapContext = useContext(MapContext);
48
+ const mapHook = useMap({ mapId: props.mapId, waitForLayer: props.insertBeforeLayer });
49
49
 
50
- const componentId = useRef(props.layerId || ("MlWmsLayer-" + uuidv4()));
51
- const mapRef = useRef(null);
52
50
  const initializedRef = useRef(false);
53
- const layerId = useRef(props.layerId || componentId.current);
51
+ const layerId = useRef(props.layerId || "MlWmsLayer-" + mapHook.componentId);
54
52
 
55
53
  useEffect(() => {
56
- let _componentId = componentId.current;
57
- return () => {
58
- // This is the cleanup function, it is called when this react component is removed from react-dom
59
- if (mapRef.current) {
60
- mapRef.current.cleanup(_componentId);
61
-
62
- mapRef.current = null;
63
- }
64
- initializedRef.current = false;
65
- };
66
- }, []);
67
-
68
- useEffect(() => {
69
- if (!mapContext.mapExists(props.mapId) || initializedRef.current) return;
70
-
71
- mapRef.current = mapContext.getMap(props.mapId);
72
- if (!mapRef.current) return;
54
+ if (!mapHook.map || initializedRef.current) return;
73
55
 
74
56
  initializedRef.current = true;
75
57
 
@@ -90,7 +72,7 @@ const MlWmsLayer = (props) => {
90
72
  let urlParamsStr =
91
73
  decodeURIComponent(urlParams.toString()) + "".replace(/%2F/g, "/").replace(/%3A/g, ":");
92
74
 
93
- mapRef.current.addSource(
75
+ mapHook.map.addSource(
94
76
  layerId.current,
95
77
  {
96
78
  type: "raster",
@@ -99,35 +81,35 @@ const MlWmsLayer = (props) => {
99
81
  attribution: props.attribution,
100
82
  ...props.sourceOptions,
101
83
  },
102
- componentId.current
84
+ mapHook.componentId
103
85
  );
104
86
 
105
- mapRef.current.addLayer(
87
+ mapHook.map.addLayer(
106
88
  {
107
89
  id: layerId.current,
108
90
  type: "raster",
109
- source: componentId.current,
91
+ source: layerId.current,
110
92
  ...props.layerOptions,
111
93
  },
112
94
  props.insertBeforeLayer,
113
- componentId.current
95
+ mapHook.componentId
114
96
  );
115
97
 
116
98
  if (!props.visible) {
117
- mapRef.current.setLayoutProperty(componentId.current, "visibility", "none");
99
+ mapHook.map.setLayoutProperty(layerId.current, "visibility", "none");
118
100
  }
119
- }, [mapContext.mapIds, mapContext, props]);
101
+ }, [mapHook.map, props]);
120
102
 
121
103
  useEffect(() => {
122
- if (!mapRef.current || !initializedRef.current) return;
104
+ if (!mapHook.map || !initializedRef.current) return;
123
105
 
124
106
  // toggle layer visibility by changing the layout object's visibility property
125
107
  if (props.visible) {
126
- mapRef.current.setLayoutProperty(componentId.current, "visibility", "visible");
108
+ mapHook.map.setLayoutProperty(layerId.current, "visibility", "visible");
127
109
  } else {
128
- mapRef.current.setLayoutProperty(componentId.current, "visibility", "none");
110
+ mapHook.map.setLayoutProperty(layerId.current, "visibility", "none");
129
111
  }
130
- }, [props.visible]);
112
+ }, [props.visible, mapHook.map]);
131
113
 
132
114
  return <></>;
133
115
  };
@@ -1,4 +1,4 @@
1
- import { useContext, useState, useEffect, useRef } from "react";
1
+ import React, { useContext, useState, useEffect, useRef } from "react";
2
2
  import { v4 as uuidv4 } from "uuid";
3
3
  import { MapContext } from "@mapcomponents/react-core";
4
4
  import useMapState from "./useMapState";