@mapcomponents/react-maplibre 0.1.20 → 0.1.24
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.
- package/CHANGELOG.md +13 -0
- package/coverage/clover.xml +195 -198
- package/coverage/coverage-final.json +6 -6
- package/coverage/lcov-report/index.html +31 -31
- package/coverage/lcov-report/src/components/MapLibreMap/MapLibreMap.js.html +1 -1
- package/coverage/lcov-report/src/components/MapLibreMap/index.html +1 -1
- package/coverage/lcov-report/src/components/MlCreatePdfButton/MlCreatePdfButton.js.html +1 -1
- package/coverage/lcov-report/src/components/MlCreatePdfButton/index.html +1 -1
- package/coverage/lcov-report/src/components/MlFeatureEditor/MlFeatureEditor.js.html +1 -1
- package/coverage/lcov-report/src/components/MlFeatureEditor/index.html +1 -1
- package/coverage/lcov-report/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.js.html +1 -1
- package/coverage/lcov-report/src/components/MlFillExtrusionLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlFollowGps/MlFollowGps.js.html +1 -1
- package/coverage/lcov-report/src/components/MlFollowGps/index.html +1 -1
- package/coverage/lcov-report/src/components/MlGPXViewer/MlGPXViewer.js.html +1 -1
- package/coverage/lcov-report/src/components/MlGPXViewer/gpxConverter.js.html +1 -1
- package/coverage/lcov-report/src/components/MlGPXViewer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlGeoJsonLayer/MlGeoJsonLayer.js.html +4 -4
- package/coverage/lcov-report/src/components/MlGeoJsonLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlImageMarkerLayer/MlImageMarkerLayer.js.html +1 -1
- package/coverage/lcov-report/src/components/MlImageMarkerLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlLayer/MlLayer.js.html +1 -1
- package/coverage/lcov-report/src/components/MlLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlLayerMagnify/MlLayerMagnify.js.html +1 -1
- package/coverage/lcov-report/src/components/MlLayerMagnify/index.html +1 -1
- package/coverage/lcov-report/src/components/MlLayerSwipe/MlLayerSwipe.js.html +1 -1
- package/coverage/lcov-report/src/components/MlLayerSwipe/index.html +1 -1
- package/coverage/lcov-report/src/components/MlLayerSwitcher/MlLayerSwitcher.js.html +1 -1
- package/coverage/lcov-report/src/components/MlLayerSwitcher/components/LayerBox.js.html +1 -1
- package/coverage/lcov-report/src/components/MlLayerSwitcher/components/index.html +1 -1
- package/coverage/lcov-report/src/components/MlLayerSwitcher/index.html +1 -1
- package/coverage/lcov-report/src/components/MlMarker/MlMarker.js.html +1 -1
- package/coverage/lcov-report/src/components/MlMarker/index.html +1 -1
- package/coverage/lcov-report/src/components/MlNavigationCompass/MlNavigationCompass.js.html +1 -1
- package/coverage/lcov-report/src/components/MlNavigationCompass/index.html +1 -1
- package/coverage/lcov-report/src/components/MlNavigationTools/MlNavigationTools.js.html +1 -1
- package/coverage/lcov-report/src/components/MlNavigationTools/index.html +1 -1
- package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.js.html +1 -1
- package/coverage/lcov-report/src/components/MlOsmLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlScaleReference/MlScaleReference.js.html +1 -1
- package/coverage/lcov-report/src/components/MlScaleReference/index.html +1 -1
- package/coverage/lcov-report/src/components/MlShareMapState/MlShareMapState.js.html +261 -111
- package/coverage/lcov-report/src/components/MlShareMapState/index.html +9 -9
- package/coverage/lcov-report/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.js.html +1 -1
- package/coverage/lcov-report/src/components/MlSpatialElevationProfile/index.html +1 -1
- package/coverage/lcov-report/src/components/MlThreeJsLayer/MlThreeJsLayer.js.html +1 -1
- package/coverage/lcov-report/src/components/MlThreeJsLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlUseMapDebugger/MlUseMapDebugger.js.html +1 -1
- package/coverage/lcov-report/src/components/MlUseMapDebugger/index.html +1 -1
- package/coverage/lcov-report/src/components/MlVectorTileLayer/MlVectorTileLayer.js.html +94 -124
- package/coverage/lcov-report/src/components/MlVectorTileLayer/index.html +17 -17
- package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.js.html +1 -1
- package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/index.html +1 -1
- package/coverage/lcov-report/src/components/MlWmsLayer/MlWmsLayer.js.html +35 -89
- package/coverage/lcov-report/src/components/MlWmsLayer/index.html +17 -17
- package/coverage/lcov-report/src/components/MlWmsLoader/MlWmsLoader.js.html +1 -1
- package/coverage/lcov-report/src/components/MlWmsLoader/index.html +1 -1
- package/coverage/lcov-report/src/hooks/index.html +1 -1
- package/coverage/lcov-report/src/hooks/useMap.js.html +23 -23
- package/coverage/lcov-report/src/hooks/useMapState.js.html +34 -34
- package/coverage/lcov-report/src/hooks/useWms.js.html +1 -1
- package/coverage/lcov-report/src/i18n.js.html +1 -1
- package/coverage/lcov-report/src/index.html +1 -1
- package/coverage/lcov-report/src/translations/english.js.html +1 -1
- package/coverage/lcov-report/src/translations/german.js.html +1 -1
- package/coverage/lcov-report/src/translations/index.html +1 -1
- package/coverage/lcov.info +334 -329
- package/dist/index.esm.js +86 -106
- package/dist/index.esm.js.map +1 -1
- package/package.json +1 -1
- package/scripts/build-catalogue-markdown-docs.js +5 -3
- package/src/components/MapLibreMap/lib/MapLibreGlWrapper.js +26 -21
- package/src/components/MapLibreMap/lib/MapLibreGlWrapper.test.js +3 -3
- package/src/components/MlCreatePdfButton/MlCreatePdfButton.doc.de.md +2 -2
- package/src/components/MlCreatePdfButton/MlCreatePdfButton.doc.en.md +3 -0
- package/src/components/MlFeatureEditor/MlFeatureEditor.test.js +2 -2
- package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.js +3 -3
- package/src/components/MlNavigationCompass/MlNavigationCompass.test.js +2 -2
- package/src/components/MlShareMapState/MlShareMapState.js +138 -88
- package/src/components/MlShareMapState/MlShareMapState.stories.js +79 -29
- package/src/components/MlVectorTileLayer/MlVectorTileLayer.js +65 -75
- package/src/components/MlVectorTileLayer/MlVectorTileLayer.test.js +6 -6
- package/src/components/MlWmsLayer/MlWmsLayer.js +16 -34
- package/src/hooks/useMap.js +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import React, {
|
|
2
|
-
import
|
|
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,104 +9,94 @@ import PropTypes from "prop-types";
|
|
|
9
9
|
* @component
|
|
10
10
|
*/
|
|
11
11
|
const MlVectorTileLayer = (props) => {
|
|
12
|
-
const
|
|
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({});
|
|
17
|
+
const layerLayoutConfsRef = useRef({});
|
|
19
18
|
const initializedRef = useRef(false);
|
|
20
|
-
const mapRef = useRef(null);
|
|
21
|
-
|
|
22
|
-
const cleanup = () => {
|
|
23
|
-
if (mapRef.current && mapRef.current.style) {
|
|
24
|
-
for (let key in layerIdsRef.current) {
|
|
25
|
-
if (mapRef.current.getLayer(layerIdsRef.current[key])) {
|
|
26
|
-
mapRef.current.removeLayer(layerIdsRef.current[key]);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
if (mapRef.current.getSource(sourceName + idSuffixRef.current)) {
|
|
30
|
-
mapRef.current.removeSource(sourceName + idSuffixRef.current);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
useEffect(() => {
|
|
36
|
-
return cleanup;
|
|
37
|
-
}, []);
|
|
38
19
|
|
|
39
20
|
useEffect(() => {
|
|
40
|
-
if (!
|
|
21
|
+
if (!mapHook.map || initializedRef.current) return;
|
|
41
22
|
|
|
42
23
|
initializedRef.current = true;
|
|
43
|
-
mapRef.current = mapContext.getMap(props.mapId);
|
|
44
24
|
|
|
45
25
|
// Add the new layer to the openlayers instance once it is available
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
26
|
+
mapHook.map.addSource(
|
|
27
|
+
layerId.current,
|
|
28
|
+
{
|
|
29
|
+
type: "vector",
|
|
30
|
+
tiles: [props.url],
|
|
31
|
+
tileSize: 512,
|
|
32
|
+
attribution: "",
|
|
33
|
+
...props.sourceOptions,
|
|
34
|
+
},
|
|
35
|
+
mapHook.componentId
|
|
36
|
+
);
|
|
53
37
|
|
|
54
38
|
for (let key in props.layers) {
|
|
55
|
-
let
|
|
56
|
-
layerIdsRef.current[key] =
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
39
|
+
let _layerId = layerId.current + "_" + key;
|
|
40
|
+
layerIdsRef.current[key] = _layerId;
|
|
41
|
+
|
|
42
|
+
mapHook.map.addLayer(
|
|
43
|
+
{
|
|
44
|
+
id: _layerId,
|
|
45
|
+
source: layerId.current,
|
|
46
|
+
type: "line",
|
|
47
|
+
minzoom: 0,
|
|
48
|
+
maxzoom: 22,
|
|
49
|
+
layout: {},
|
|
50
|
+
paint: {
|
|
51
|
+
"line-opacity": 0.5,
|
|
52
|
+
"line-color": "rgb(80, 80, 80)",
|
|
53
|
+
"line-width": 2,
|
|
54
|
+
},
|
|
55
|
+
...props.layers[key],
|
|
69
56
|
},
|
|
70
|
-
|
|
71
|
-
|
|
57
|
+
props.insertBeforeLayer,
|
|
58
|
+
mapHook.componentId
|
|
59
|
+
);
|
|
72
60
|
layerPaintConfsRef.current[key] = JSON.stringify(props.layers[key].paint);
|
|
61
|
+
layerLayoutConfsRef.current[key] = JSON.stringify(props.layers[key].layout);
|
|
73
62
|
}
|
|
74
|
-
}, [
|
|
63
|
+
}, [mapHook.map, props]);
|
|
75
64
|
|
|
76
65
|
useEffect(() => {
|
|
77
|
-
if (!
|
|
78
|
-
// the MapLibre-gl instance (mapContext.map) is accessible here
|
|
66
|
+
if (!mapHook.map || !initializedRef.current) return;
|
|
79
67
|
// initialize the layer and add it to the MapLibre-gl instance or do something else with it
|
|
80
68
|
for (var key in props.layers) {
|
|
81
|
-
if (
|
|
82
|
-
|
|
69
|
+
if (mapHook.map.getLayer(layerIdsRef.current[key])) {
|
|
70
|
+
// update changed paint property
|
|
71
|
+
let layerPaintConfString = JSON.stringify(props.layers[key].paint);
|
|
83
72
|
|
|
84
|
-
if (
|
|
73
|
+
if (layerPaintConfString !== layerPaintConfsRef.current[key]) {
|
|
85
74
|
for (let paintKey in props.layers[key].paint) {
|
|
86
|
-
|
|
87
|
-
.
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
75
|
+
mapHook.map.setPaintProperty(
|
|
76
|
+
layerIdsRef.current[key],
|
|
77
|
+
paintKey,
|
|
78
|
+
props.layers[key].paint[paintKey]
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
layerPaintConfsRef.current[key] = layerPaintConfString;
|
|
83
|
+
|
|
84
|
+
// update changed layout property
|
|
85
|
+
let layerLayoutConfString = JSON.stringify(props.layers[key].layout);
|
|
86
|
+
|
|
87
|
+
if (layerLayoutConfString !== layerLayoutConfsRef.current[key]) {
|
|
88
|
+
for (let layoutKey in props.layers[key].layout) {
|
|
89
|
+
mapHook.map.setLayoutProperty(
|
|
90
|
+
layerIdsRef.current[key],
|
|
91
|
+
layoutKey,
|
|
92
|
+
props.layers[key].layout[layoutKey]
|
|
93
|
+
);
|
|
93
94
|
}
|
|
94
95
|
}
|
|
95
|
-
|
|
96
|
+
layerLayoutConfsRef.current[key] = layerLayoutConfString;
|
|
96
97
|
}
|
|
97
98
|
}
|
|
98
|
-
}, [props.layers,
|
|
99
|
-
|
|
100
|
-
useEffect(() => {
|
|
101
|
-
if (!mapRef.current) return;
|
|
102
|
-
|
|
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");
|
|
108
|
-
}
|
|
109
|
-
}, [props.visible]);
|
|
99
|
+
}, [props.layers, mapHook.map]);
|
|
110
100
|
|
|
111
101
|
return <></>;
|
|
112
102
|
};
|
|
@@ -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
|
-
|
|
32
|
-
"
|
|
31
|
+
new RegExp('^.*"MlVectorTileLayer-' + uuid_regex + '_landuseLine".*$'),
|
|
32
|
+
"MlVectorTileLayer-{uuid}_landuseLine"
|
|
33
33
|
);
|
|
34
34
|
sourceRemovalTest(
|
|
35
35
|
"<MlVectorTileLayer />",
|
|
36
36
|
testComponent,
|
|
37
|
-
|
|
38
|
-
"
|
|
37
|
+
new RegExp('^.*"MlVectorTileLayer-' + uuid_regex + '".*$'),
|
|
38
|
+
"MlVectorTileLayer-{uuid}"
|
|
39
39
|
);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import React, {
|
|
2
|
-
import
|
|
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
|
|
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
|
|
51
|
+
const layerId = useRef(props.layerId || "MlWmsLayer-" + mapHook.componentId);
|
|
54
52
|
|
|
55
53
|
useEffect(() => {
|
|
56
|
-
|
|
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
|
-
|
|
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
|
|
84
|
+
mapHook.componentId
|
|
103
85
|
);
|
|
104
86
|
|
|
105
|
-
|
|
87
|
+
mapHook.map.addLayer(
|
|
106
88
|
{
|
|
107
89
|
id: layerId.current,
|
|
108
90
|
type: "raster",
|
|
109
|
-
source:
|
|
91
|
+
source: layerId.current,
|
|
110
92
|
...props.layerOptions,
|
|
111
93
|
},
|
|
112
94
|
props.insertBeforeLayer,
|
|
113
|
-
componentId
|
|
95
|
+
mapHook.componentId
|
|
114
96
|
);
|
|
115
97
|
|
|
116
98
|
if (!props.visible) {
|
|
117
|
-
|
|
99
|
+
mapHook.map.setLayoutProperty(layerId.current, "visibility", "none");
|
|
118
100
|
}
|
|
119
|
-
}, [
|
|
101
|
+
}, [mapHook.map, props]);
|
|
120
102
|
|
|
121
103
|
useEffect(() => {
|
|
122
|
-
if (!
|
|
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
|
-
|
|
108
|
+
mapHook.map.setLayoutProperty(layerId.current, "visibility", "visible");
|
|
127
109
|
} else {
|
|
128
|
-
|
|
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
|
};
|
package/src/hooks/useMap.js
CHANGED
|
@@ -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";
|