@mapcomponents/react-maplibre 0.1.14 → 0.1.15

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 (81) hide show
  1. package/.github/workflows/storybook.yml +4 -2
  2. package/coverage/clover.xml +325 -297
  3. package/coverage/coverage-final.json +8 -8
  4. package/coverage/lcov-report/index.html +63 -63
  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 +37 -34
  14. package/coverage/lcov-report/src/components/MlFollowGps/index.html +11 -11
  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 +96 -30
  19. package/coverage/lcov-report/src/components/MlGeoJsonLayer/index.html +19 -19
  20. package/coverage/lcov-report/src/components/MlImageMarkerLayer/MlImageMarkerLayer.js.html +45 -150
  21. package/coverage/lcov-report/src/components/MlImageMarkerLayer/index.html +19 -19
  22. package/coverage/lcov-report/src/components/MlLayer/MlLayer.js.html +93 -27
  23. package/coverage/lcov-report/src/components/MlLayer/index.html +19 -19
  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 +10 -13
  37. package/coverage/lcov-report/src/components/MlNavigationTools/index.html +7 -7
  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 +208 -16
  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 +1 -1
  51. package/coverage/lcov-report/src/components/MlVectorTileLayer/index.html +1 -1
  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 +1 -1
  55. package/coverage/lcov-report/src/components/MlWmsLayer/index.html +1 -1
  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 +32 -32
  59. package/coverage/lcov-report/src/hooks/useMap.js.html +85 -163
  60. package/coverage/lcov-report/src/hooks/useMapState.js.html +82 -82
  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 +620 -570
  68. package/dist/index.esm.js +787 -665
  69. package/dist/index.esm.js.map +1 -1
  70. package/package.json +1 -1
  71. package/src/components/MapLibreMap/lib/MapLibreGlWrapper.js +13 -12
  72. package/src/components/MlFollowGps/MlFollowGps.js +23 -22
  73. package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.js +23 -1
  74. package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.js +21 -56
  75. package/src/components/MlLayer/MlLayer.js +26 -4
  76. package/src/components/MlNavigationTools/MlNavigationTools.js +4 -5
  77. package/src/components/MlShareMapState/MlShareMapState.js +73 -9
  78. package/src/components/MlShareMapState/MlShareMapState.stories.js +24 -1
  79. package/src/hooks/useMap.js +36 -62
  80. package/src/hooks/useMapState.js +3 -3
  81. package/src/index.js +2 -0
@@ -1,23 +1,28 @@
1
1
  import { useContext, useState, useEffect, useRef } from "react";
2
2
  import { v4 as uuidv4 } from "uuid";
3
3
  import { MapContext } from "@mapcomponents/react-core";
4
+ import useMapState from "./useMapState";
4
5
 
5
6
  function useMap(props) {
6
7
  // Use a useRef hook to reference the layer object to be able to access it later inside useEffect hooks
7
8
  const mapContext = useContext(MapContext);
8
9
 
10
+ const mapState = useMapState({
11
+ mapId: props.mapId,
12
+ watch: {
13
+ viewport: false,
14
+ layers: true,
15
+ sources: false,
16
+ },
17
+ });
18
+
9
19
  const initializedRef = useRef(false);
10
20
  const mapRef = useRef(undefined);
11
21
 
12
- const [center, setCenter] = useState(undefined);
13
- const [layerIds, setLayerIds] = useState(undefined);
14
- const layerIdsRef = useRef(undefined);
15
-
16
- const [layers, setLayers] = useState(undefined);
17
- const layersRef = useRef(undefined);
18
- //const mapRef = useRef(props.map);
19
22
  const componentId = useRef(uuidv4());
20
23
 
24
+ const [mapIsReady, setMapIsReady] = useState(undefined);
25
+
21
26
  useEffect(() => {
22
27
  let _componentId = componentId.current;
23
28
 
@@ -27,72 +32,41 @@ function useMap(props) {
27
32
  mapRef.current = undefined;
28
33
  }
29
34
  initializedRef.current = false;
35
+ setMapIsReady(false);
30
36
  };
31
37
  }, []);
32
38
 
33
- const buildLayerObjects = (layers) => {
34
- let res = {};
35
- Object.keys(layers).forEach((layerId) => {
36
- if (mapRef.current.baseLayers.indexOf(layerId) === -1) {
37
- res[layerId] = {
38
- //filter: layers[layerId].filter,
39
- id: layers[layerId].id,
40
- //layout: layers[layerId].layout,
41
- //maxzoom: layers[layerId].maxzoom,
42
- //metadata: layers[layerId].metadata,
43
- //minzoom: layers[layerId].minzoom,
44
- paint: layers[layerId].paint,
45
- //source: layers[layerId].source,
46
- //sourceLayer: layers[layerId].sourceLayer,
47
- type: layers[layerId].type,
48
- visibility: layers[layerId].visibility,
49
- };
50
- }
51
- });
52
- return res;
53
- };
54
-
55
39
  useEffect(() => {
56
40
  if (!mapContext.mapExists(props.mapId) || initializedRef.current) return;
41
+
42
+ console.log("initialize useMap hook");
43
+ //check if insertBeforeLayer exists
44
+ if (props.waitForLayer) {
45
+ let layerFound = false;
46
+
47
+ mapState?.layers?.forEach((layer) => {
48
+ console.log(layer.id + " " + props.waitForLayer);
49
+ if (layer.id === props.waitForLayer) {
50
+ layerFound = true;
51
+ }
52
+ });
53
+ if (!layerFound) {
54
+ return;
55
+ }
56
+ }
57
+ console.log("done initialize useMap hook");
57
58
  // the MapLibre-gl instance (mapContext.getMap(props.mapId)) is accessible here
58
59
  // initialize the layer and add it to the MapLibre-gl instance or do something else with it
59
60
  initializedRef.current = true;
60
61
  mapRef.current = mapContext.getMap(props.mapId);
61
-
62
- setLayerIds([...mapRef.current.style._order]);
63
- mapRef.current.on(
64
- "idle",
65
- () => {
66
- if (JSON.stringify(mapRef.current.style._order) !== layerIdsRef.current) {
67
- let layerIds = [...mapRef.current.style._order];
68
- layerIdsRef.current = JSON.stringify(layerIds);
69
- setLayerIds(layerIds);
70
- }
71
-
72
- let layerStates = buildLayerObjects(mapRef.current.style._layers);
73
- let layerStatesString = JSON.stringify(layerStates);
74
- if (layerStatesString !== layersRef.current) {
75
- layersRef.current = layerStatesString;
76
- setLayers(layerStates);
77
- }
78
- },
79
- componentId.current
80
- );
81
-
82
- setCenter(mapRef.current.getCenter());
83
- mapRef.current.on(
84
- "move",
85
- () => {
86
- setCenter(mapRef.current.getCenter());
87
- },
88
- componentId.current
89
- );
90
- }, [mapContext.mapIds, mapContext, props.mapId]);
62
+ setMapIsReady(true);
63
+ }, [mapContext.mapIds, mapState.layers, mapContext, props.mapId]);
91
64
 
92
65
  return {
93
- layers,
94
- layerIds,
95
- center,
66
+ map: mapRef.current,
67
+ mapIsReady,
68
+ componentId: componentId.current,
69
+ layers: mapState.layers,
96
70
  };
97
71
  }
98
72
 
@@ -34,11 +34,11 @@ function useMapState(props) {
34
34
  */
35
35
  const layerIdFilter = useCallback(
36
36
  (layer) => {
37
- if (!props.filter.includeBaseLayers && layer.baseLayer) {
37
+ if (!props?.filter?.includeBaseLayers && layer.baseLayer) {
38
38
  return false;
39
39
  }
40
40
 
41
- if (typeof props.filter.matchLayerIds !== "undefined") {
41
+ if (typeof props.filter?.matchLayerIds !== "undefined") {
42
42
  if (props.filter.matchLayerIds instanceof RegExp) {
43
43
  return props.filter.matchLayerIds.test(layer.id);
44
44
  } else {
@@ -58,7 +58,7 @@ function useMapState(props) {
58
58
  layersRef.current = _layerStateString;
59
59
  setLayers(_layerState);
60
60
  }
61
- },[layerIdFilter]);
61
+ }, [layerIdFilter]);
62
62
 
63
63
  useEffect(() => {
64
64
  let _componentId = componentId.current;
package/src/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  export { default as MapLibreMap } from "./components/MapLibreMap/MapLibreMap";
2
2
  export { default as MlComponentTemplate } from "./components/MlComponentTemplate/MlComponentTemplate";
3
3
  export { default as MlFillExtrusionLayer } from "./components/MlFillExtrusionLayer/MlFillExtrusionLayer";
4
+ export { default as MlFollowGps } from "./components/MlFollowGps/MlFollowGps";
4
5
  export { default as MlCreatePdfButton } from "./components/MlCreatePdfButton/MlCreatePdfButton";
5
6
  export { default as MlGeoJsonLayer } from "./components/MlGeoJsonLayer/MlGeoJsonLayer";
6
7
  export { default as MlImageMarkerLayer } from "./components/MlImageMarkerLayer/MlImageMarkerLayer";
@@ -20,3 +21,4 @@ export { default as GeoJsonContext } from "./components/MlGPXViewer/util/GeoJson
20
21
  export { default as MlSpatialElevationProfile } from "./components/MlSpatialElevationProfile/MlSpatialElevationProfile";
21
22
 
22
23
  export { default as useMapState } from "./hooks/useMapState";
24
+ export { default as useMap } from "./hooks/useMap";