@mapcomponents/react-maplibre 0.1.22 → 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 (71) hide show
  1. package/coverage/clover.xml +90 -109
  2. package/coverage/coverage-final.json +3 -3
  3. package/coverage/lcov-report/index.html +18 -18
  4. package/coverage/lcov-report/src/components/MapLibreMap/MapLibreMap.js.html +1 -1
  5. package/coverage/lcov-report/src/components/MapLibreMap/index.html +1 -1
  6. package/coverage/lcov-report/src/components/MlCreatePdfButton/MlCreatePdfButton.js.html +1 -1
  7. package/coverage/lcov-report/src/components/MlCreatePdfButton/index.html +1 -1
  8. package/coverage/lcov-report/src/components/MlFeatureEditor/MlFeatureEditor.js.html +1 -1
  9. package/coverage/lcov-report/src/components/MlFeatureEditor/index.html +1 -1
  10. package/coverage/lcov-report/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.js.html +1 -1
  11. package/coverage/lcov-report/src/components/MlFillExtrusionLayer/index.html +1 -1
  12. package/coverage/lcov-report/src/components/MlFollowGps/MlFollowGps.js.html +1 -1
  13. package/coverage/lcov-report/src/components/MlFollowGps/index.html +1 -1
  14. package/coverage/lcov-report/src/components/MlGPXViewer/MlGPXViewer.js.html +1 -1
  15. package/coverage/lcov-report/src/components/MlGPXViewer/gpxConverter.js.html +1 -1
  16. package/coverage/lcov-report/src/components/MlGPXViewer/index.html +1 -1
  17. package/coverage/lcov-report/src/components/MlGeoJsonLayer/MlGeoJsonLayer.js.html +1 -1
  18. package/coverage/lcov-report/src/components/MlGeoJsonLayer/index.html +1 -1
  19. package/coverage/lcov-report/src/components/MlImageMarkerLayer/MlImageMarkerLayer.js.html +1 -1
  20. package/coverage/lcov-report/src/components/MlImageMarkerLayer/index.html +1 -1
  21. package/coverage/lcov-report/src/components/MlLayer/MlLayer.js.html +1 -1
  22. package/coverage/lcov-report/src/components/MlLayer/index.html +1 -1
  23. package/coverage/lcov-report/src/components/MlLayerMagnify/MlLayerMagnify.js.html +1 -1
  24. package/coverage/lcov-report/src/components/MlLayerMagnify/index.html +1 -1
  25. package/coverage/lcov-report/src/components/MlLayerSwipe/MlLayerSwipe.js.html +1 -1
  26. package/coverage/lcov-report/src/components/MlLayerSwipe/index.html +1 -1
  27. package/coverage/lcov-report/src/components/MlLayerSwitcher/MlLayerSwitcher.js.html +1 -1
  28. package/coverage/lcov-report/src/components/MlLayerSwitcher/components/LayerBox.js.html +1 -1
  29. package/coverage/lcov-report/src/components/MlLayerSwitcher/components/index.html +1 -1
  30. package/coverage/lcov-report/src/components/MlLayerSwitcher/index.html +1 -1
  31. package/coverage/lcov-report/src/components/MlMarker/MlMarker.js.html +1 -1
  32. package/coverage/lcov-report/src/components/MlMarker/index.html +1 -1
  33. package/coverage/lcov-report/src/components/MlNavigationCompass/MlNavigationCompass.js.html +1 -1
  34. package/coverage/lcov-report/src/components/MlNavigationCompass/index.html +1 -1
  35. package/coverage/lcov-report/src/components/MlNavigationTools/MlNavigationTools.js.html +1 -1
  36. package/coverage/lcov-report/src/components/MlNavigationTools/index.html +1 -1
  37. package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.js.html +1 -1
  38. package/coverage/lcov-report/src/components/MlOsmLayer/index.html +1 -1
  39. package/coverage/lcov-report/src/components/MlScaleReference/MlScaleReference.js.html +1 -1
  40. package/coverage/lcov-report/src/components/MlScaleReference/index.html +1 -1
  41. package/coverage/lcov-report/src/components/MlShareMapState/MlShareMapState.js.html +1 -1
  42. package/coverage/lcov-report/src/components/MlShareMapState/index.html +1 -1
  43. package/coverage/lcov-report/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.js.html +1 -1
  44. package/coverage/lcov-report/src/components/MlSpatialElevationProfile/index.html +1 -1
  45. package/coverage/lcov-report/src/components/MlThreeJsLayer/MlThreeJsLayer.js.html +1 -1
  46. package/coverage/lcov-report/src/components/MlThreeJsLayer/index.html +1 -1
  47. package/coverage/lcov-report/src/components/MlUseMapDebugger/MlUseMapDebugger.js.html +1 -1
  48. package/coverage/lcov-report/src/components/MlUseMapDebugger/index.html +1 -1
  49. package/coverage/lcov-report/src/components/MlVectorTileLayer/MlVectorTileLayer.js.html +74 -194
  50. package/coverage/lcov-report/src/components/MlVectorTileLayer/index.html +17 -17
  51. package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.js.html +1 -1
  52. package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/index.html +1 -1
  53. package/coverage/lcov-report/src/components/MlWmsLayer/MlWmsLayer.js.html +1 -1
  54. package/coverage/lcov-report/src/components/MlWmsLayer/index.html +1 -1
  55. package/coverage/lcov-report/src/components/MlWmsLoader/MlWmsLoader.js.html +1 -1
  56. package/coverage/lcov-report/src/components/MlWmsLoader/index.html +1 -1
  57. package/coverage/lcov-report/src/hooks/index.html +1 -1
  58. package/coverage/lcov-report/src/hooks/useMap.js.html +22 -22
  59. package/coverage/lcov-report/src/hooks/useMapState.js.html +34 -34
  60. package/coverage/lcov-report/src/hooks/useWms.js.html +1 -1
  61. package/coverage/lcov-report/src/i18n.js.html +1 -1
  62. package/coverage/lcov-report/src/index.html +1 -1
  63. package/coverage/lcov-report/src/translations/english.js.html +1 -1
  64. package/coverage/lcov-report/src/translations/german.js.html +1 -1
  65. package/coverage/lcov-report/src/translations/index.html +1 -1
  66. package/coverage/lcov.info +132 -167
  67. package/dist/index.esm.js +23 -60
  68. package/dist/index.esm.js.map +1 -1
  69. package/package.json +1 -1
  70. package/src/components/MlVectorTileLayer/MlVectorTileLayer.js +51 -91
  71. package/src/components/MlVectorTileLayer/MlVectorTileLayer.test.js +6 -6
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mapcomponents/react-maplibre",
3
- "version": "0.1.22",
3
+ "version": "0.1.23",
4
4
  "license": "MIT",
5
5
  "private": false,
6
6
  "module": "dist/index.esm.js",
@@ -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
  import PropTypes from "prop-types";
4
4
 
5
5
  /**
@@ -9,90 +9,75 @@ import PropTypes from "prop-types";
9
9
  * @component
10
10
  */
11
11
  const MlVectorTileLayer = (props) => {
12
- const mapContext = useContext(MapContext);
12
+ const mapHook = useMap({ mapId: props.mapId, waitForLayer: props.insertBeforeLayer });
13
13
 
14
- const layerName = "vector-tile-layer-";
15
- const sourceName = "vector-tile-source-";
16
- const idSuffixRef = useRef(new Date().getTime());
17
14
  const layerIdsRef = useRef({});
15
+ const layerId = useRef(props.layerId || "MlVectorTileLayer-" + mapHook.componentId);
18
16
  const layerPaintConfsRef = useRef({});
19
17
  const layerLayoutConfsRef = useRef({});
20
18
  const initializedRef = useRef(false);
21
- const mapRef = useRef(null);
22
-
23
- const cleanup = () => {
24
- if (mapRef.current && mapRef.current.style) {
25
- for (let key in layerIdsRef.current) {
26
- if (mapRef.current.getLayer(layerIdsRef.current[key])) {
27
- mapRef.current.removeLayer(layerIdsRef.current[key]);
28
- }
29
- }
30
- if (mapRef.current.getSource(sourceName + idSuffixRef.current)) {
31
- mapRef.current.removeSource(sourceName + idSuffixRef.current);
32
- }
33
- }
34
- };
35
19
 
36
20
  useEffect(() => {
37
- return cleanup;
38
- }, []);
39
-
40
- useEffect(() => {
41
- if (!mapContext.mapExists(props.mapId) || initializedRef.current) return;
21
+ if (!mapHook.map || initializedRef.current) return;
42
22
 
43
23
  initializedRef.current = true;
44
- mapRef.current = mapContext.getMap(props.mapId);
45
24
 
46
25
  // Add the new layer to the openlayers instance once it is available
47
- mapRef.current.addSource(sourceName + idSuffixRef.current, {
48
- type: "vector",
49
- tiles: [props.url],
50
- tileSize: 512,
51
- attribution: "",
52
- ...props.sourceOptions,
53
- });
26
+ mapHook.map.addSource(
27
+ layerId,
28
+ {
29
+ type: "vector",
30
+ tiles: [props.url],
31
+ tileSize: 512,
32
+ attribution: "",
33
+ ...props.sourceOptions,
34
+ },
35
+ mapHook.componentId
36
+ );
54
37
 
55
38
  for (let key in props.layers) {
56
- let layerId = layerName + "_" + key + "_" + idSuffixRef.current;
57
- layerIdsRef.current[key] = layerId;
58
-
59
- mapRef.current.addLayer({
60
- id: layerId,
61
- source: sourceName + idSuffixRef.current,
62
- type: "line",
63
- minzoom: 0,
64
- maxzoom: 22,
65
- layout: {},
66
- paint: {
67
- "line-opacity": 0.5,
68
- "line-color": "rgb(80, 80, 80)",
69
- "line-width": 2,
39
+ let _layerId = layerId.current + "_" + key;
40
+ layerIdsRef.current[key] = _layerId;
41
+
42
+ console.log(_layerId);
43
+ mapHook.map.addLayer(
44
+ {
45
+ id: _layerId,
46
+ source: layerId.current,
47
+ type: "line",
48
+ minzoom: 0,
49
+ maxzoom: 22,
50
+ layout: {},
51
+ paint: {
52
+ "line-opacity": 0.5,
53
+ "line-color": "rgb(80, 80, 80)",
54
+ "line-width": 2,
55
+ },
56
+ ...props.layers[key],
70
57
  },
71
- ...props.layers[key],
72
- });
58
+ props.insertBeforeLayer,
59
+ mapHook.componentId
60
+ );
73
61
  layerPaintConfsRef.current[key] = JSON.stringify(props.layers[key].paint);
74
62
  layerLayoutConfsRef.current[key] = JSON.stringify(props.layers[key].layout);
75
63
  }
76
- }, [mapContext.mapIds, props, mapContext]);
64
+ }, [mapHook.map, props]);
77
65
 
78
66
  useEffect(() => {
79
- if (!mapRef.current) return;
80
- // the MapLibre-gl instance (mapContext.map) is accessible here
67
+ if (!mapHook.map || !initializedRef.current) return;
81
68
  // initialize the layer and add it to the MapLibre-gl instance or do something else with it
82
69
  for (var key in props.layers) {
83
- if (mapRef.current.getLayer(layerIdsRef.current[key])) {
70
+ if (mapHook.map.getLayer(layerIdsRef.current[key])) {
84
71
  // update changed paint property
85
72
  let layerPaintConfString = JSON.stringify(props.layers[key].paint);
86
73
 
87
74
  if (layerPaintConfString !== layerPaintConfsRef.current[key]) {
88
75
  for (let paintKey in props.layers[key].paint) {
89
- mapContext
90
- .getMap(props.mapId)
91
- .setPaintProperty(
92
- layerIdsRef.current[key],
93
- paintKey,
94
- props.layers[key].paint[paintKey]
95
- );
76
+ mapHook.map.setPaintProperty(
77
+ layerIdsRef.current[key],
78
+ paintKey,
79
+ props.layers[key].paint[paintKey]
80
+ );
96
81
  }
97
82
  }
98
83
  layerPaintConfsRef.current[key] = layerPaintConfString;
@@ -102,38 +87,17 @@ const MlVectorTileLayer = (props) => {
102
87
 
103
88
  if (layerLayoutConfString !== layerLayoutConfsRef.current[key]) {
104
89
  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
- );
90
+ mapHook.map.setLayoutProperty(
91
+ layerIdsRef.current[key],
92
+ layoutKey,
93
+ props.layers[key].layout[layoutKey]
94
+ );
112
95
  }
113
96
  }
114
97
  layerLayoutConfsRef.current[key] = layerLayoutConfString;
115
98
  }
116
99
  }
117
- }, [props.layers, props, mapContext]);
118
-
119
- useEffect(() => {
120
- if (!mapRef.current) return;
121
-
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
- }
135
- }
136
- }, [props.visible]);
100
+ }, [props.layers, mapHook.map]);
137
101
 
138
102
  return <></>;
139
103
  };
@@ -151,10 +115,6 @@ MlVectorTileLayer.propTypes = {
151
115
  * Object that hold layers
152
116
  */
153
117
  layers: PropTypes.object,
154
- /**
155
- * Boolean value to control the visibility of this layer
156
- */
157
- visible: PropTypes.bool,
158
118
  /**
159
119
  * String of the URL of a wms layer
160
120
  */
@@ -1,12 +1,12 @@
1
1
  import { layerRemovalTest, sourceRemovalTest } from "../../util";
2
2
 
3
3
  import MlVectorTileLayer from "./MlVectorTileLayer";
4
+ import { uuid_regex } from "../../setupTests";
4
5
 
5
6
  const testComponent = (
6
7
  <MlVectorTileLayer
7
8
  {...{
8
- url:
9
- "https://wms.wheregroup.com/tileserver/tile/tileserver.php?/europe-0-14/index.json?/europe-0-14/{z}/{x}/{y}.pbf",
9
+ url: "https://wms.wheregroup.com/tileserver/tile/tileserver.php?/europe-0-14/index.json?/europe-0-14/{z}/{x}/{y}.pbf",
10
10
  layers: {
11
11
  landuseLine: {
12
12
  "source-layer": "landuse",
@@ -28,12 +28,12 @@ const testComponent = (
28
28
  layerRemovalTest(
29
29
  "<MlVectorTileLayer />",
30
30
  testComponent,
31
- /^.*"vector-tile-layer-_landuseLine_[0-9]*".*$/,
32
- "vector-tile-layer-_landuseLine_{unix-timestamp}"
31
+ new RegExp('^.*"MlVectorTileLayer-' + uuid_regex + '_landuseLine".*$'),
32
+ "MlVectorTileLayer-{uuid}_landuseLine"
33
33
  );
34
34
  sourceRemovalTest(
35
35
  "<MlVectorTileLayer />",
36
36
  testComponent,
37
- /^.*"vector-tile-source-[0-9]*".*$/,
38
- "vector-tile-source-{unix-timestamp}"
37
+ new RegExp('^.*"MlVectorTileLayer-' + uuid_regex + '".*$'),
38
+ "MlVectorTileLayer-{uuid}"
39
39
  );