@mapcomponents/react-maplibre 0.1.59 → 0.1.61

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 (113) hide show
  1. package/.eslintignore +2 -1
  2. package/CHANGELOG.md +15 -0
  3. package/coverage/clover.xml +142 -47
  4. package/coverage/coverage-final.json +5 -4
  5. package/coverage/lcov-report/index.html +36 -21
  6. package/coverage/lcov-report/src/components/MapLibreMap/MapLibreMap.tsx.html +1 -1
  7. package/coverage/lcov-report/src/components/MapLibreMap/index.html +1 -1
  8. package/coverage/lcov-report/src/components/MlCenterPosition/MlCenterPosition.tsx.html +1 -1
  9. package/coverage/lcov-report/src/components/MlCenterPosition/index.html +1 -1
  10. package/coverage/lcov-report/src/components/MlCreatePdfButton/MlCreatePdfButton.tsx.html +1 -1
  11. package/coverage/lcov-report/src/components/MlCreatePdfButton/index.html +1 -1
  12. package/coverage/lcov-report/src/components/MlCreatePdfForm/MlCreatePdfForm.tsx.html +2 -2
  13. package/coverage/lcov-report/src/components/MlCreatePdfForm/index.html +1 -1
  14. package/coverage/lcov-report/src/components/MlFeatureEditor/MlFeatureEditor.tsx.html +1 -1
  15. package/coverage/lcov-report/src/components/MlFeatureEditor/index.html +1 -1
  16. package/coverage/lcov-report/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.tsx.html +1 -1
  17. package/coverage/lcov-report/src/components/MlFillExtrusionLayer/index.html +1 -1
  18. package/coverage/lcov-report/src/components/MlFollowGps/MlFollowGps.tsx.html +1 -1
  19. package/coverage/lcov-report/src/components/MlFollowGps/index.html +1 -1
  20. package/coverage/lcov-report/src/components/MlGPXViewer/MlGPXViewer.tsx.html +1 -1
  21. package/coverage/lcov-report/src/components/MlGPXViewer/gpxConverter.js.html +1 -1
  22. package/coverage/lcov-report/src/components/MlGPXViewer/index.html +1 -1
  23. package/coverage/lcov-report/src/components/MlGeoJsonLayer/MlGeoJsonLayer.tsx.html +1 -1
  24. package/coverage/lcov-report/src/components/MlGeoJsonLayer/index.html +1 -1
  25. package/coverage/lcov-report/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.tsx.html +1 -1
  26. package/coverage/lcov-report/src/components/MlGeojsonLayerWithSource/index.html +1 -1
  27. package/coverage/lcov-report/src/components/MlImageMarkerLayer/MlImageMarkerLayer.tsx.html +1 -1
  28. package/coverage/lcov-report/src/components/MlImageMarkerLayer/index.html +1 -1
  29. package/coverage/lcov-report/src/components/MlLayer/MlLayer.tsx.html +1 -1
  30. package/coverage/lcov-report/src/components/MlLayer/index.html +1 -1
  31. package/coverage/lcov-report/src/components/MlLayerMagnify/MlLayerMagnify.tsx.html +1 -1
  32. package/coverage/lcov-report/src/components/MlLayerMagnify/index.html +1 -1
  33. package/coverage/lcov-report/src/components/MlLayerSwipe/MlLayerSwipe.tsx.html +1 -1
  34. package/coverage/lcov-report/src/components/MlLayerSwipe/index.html +1 -1
  35. package/coverage/lcov-report/src/components/MlLayerSwitcher/MlLayerSwitcher.js.html +1 -1
  36. package/coverage/lcov-report/src/components/MlLayerSwitcher/components/LayerBox.js.html +1 -1
  37. package/coverage/lcov-report/src/components/MlLayerSwitcher/components/index.html +1 -1
  38. package/coverage/lcov-report/src/components/MlLayerSwitcher/index.html +1 -1
  39. package/coverage/lcov-report/src/components/MlMarker/MlMarker.tsx.html +1 -1
  40. package/coverage/lcov-report/src/components/MlMarker/index.html +1 -1
  41. package/coverage/lcov-report/src/components/MlMeasureTool/MlMeasureTool.tsx.html +1 -1
  42. package/coverage/lcov-report/src/components/MlMeasureTool/index.html +1 -1
  43. package/coverage/lcov-report/src/components/MlNavigationCompass/MlNavigationCompass.tsx.html +1 -1
  44. package/coverage/lcov-report/src/components/MlNavigationCompass/index.html +1 -1
  45. package/coverage/lcov-report/src/components/MlNavigationTools/MlNavigationTools.tsx.html +1 -1
  46. package/coverage/lcov-report/src/components/MlNavigationTools/index.html +1 -1
  47. package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.js.html +1 -1
  48. package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.stories_.js.html +1 -1
  49. package/coverage/lcov-report/src/components/MlOsmLayer/index.html +1 -1
  50. package/coverage/lcov-report/src/components/MlScaleReference/MlScaleReference.js.html +1 -1
  51. package/coverage/lcov-report/src/components/MlScaleReference/index.html +1 -1
  52. package/coverage/lcov-report/src/components/MlShareMapState/MlShareMapState.js.html +1 -1
  53. package/coverage/lcov-report/src/components/MlShareMapState/index.html +1 -1
  54. package/coverage/lcov-report/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.js.html +1 -1
  55. package/coverage/lcov-report/src/components/MlSpatialElevationProfile/index.html +1 -1
  56. package/coverage/lcov-report/src/components/MlThreeJsLayer/MlThreeJsLayer.js.html +1 -1
  57. package/coverage/lcov-report/src/components/MlThreeJsLayer/index.html +1 -1
  58. package/coverage/lcov-report/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.tsx.html +1 -1
  59. package/coverage/lcov-report/src/components/MlTransitionGeoJsonLayer/index.html +1 -1
  60. package/coverage/lcov-report/src/components/MlUseMapDebugger/MlUseMapDebugger.js.html +1 -1
  61. package/coverage/lcov-report/src/components/MlUseMapDebugger/index.html +1 -1
  62. package/coverage/lcov-report/src/components/MlVectorTileLayer/MlVectorTileLayer.tsx.html +92 -146
  63. package/coverage/lcov-report/src/components/MlVectorTileLayer/index.html +21 -21
  64. package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.js.html +1 -1
  65. package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/index.html +1 -1
  66. package/coverage/lcov-report/src/components/MlWmsLayer/MlWmsLayer.tsx.html +1 -1
  67. package/coverage/lcov-report/src/components/MlWmsLayer/index.html +1 -1
  68. package/coverage/lcov-report/src/components/MlWmsLoader/MlWmsLoader.tsx.html +1 -1
  69. package/coverage/lcov-report/src/components/MlWmsLoader/index.html +1 -1
  70. package/coverage/lcov-report/src/contexts/MapContext.tsx.html +1 -1
  71. package/coverage/lcov-report/src/contexts/SimpleDataContext.js.html +1 -1
  72. package/coverage/lcov-report/src/contexts/SimpleDataProvider.js.html +1 -1
  73. package/coverage/lcov-report/src/contexts/index.html +1 -1
  74. package/coverage/lcov-report/src/hooks/index.html +1 -1
  75. package/coverage/lcov-report/src/hooks/useCameraFollowPath/index.html +116 -0
  76. package/coverage/lcov-report/src/hooks/useCameraFollowPath/useCameraFollowPath.tsx.html +661 -0
  77. package/coverage/lcov-report/src/hooks/{exportMap → useExportMap}/index.html +3 -3
  78. package/coverage/lcov-report/src/hooks/{exportMap → useExportMap}/index.ts.html +4 -4
  79. package/coverage/lcov-report/src/hooks/{exportMap → useExportMap}/lib.ts.html +4 -4
  80. package/coverage/lcov-report/src/hooks/useLayer.ts.html +1 -1
  81. package/coverage/lcov-report/src/hooks/useLayerEvent.js.html +1 -1
  82. package/coverage/lcov-report/src/hooks/useMap.ts.html +4 -4
  83. package/coverage/lcov-report/src/hooks/useMapState.ts.html +1 -1
  84. package/coverage/lcov-report/src/hooks/useSource.ts.html +1 -1
  85. package/coverage/lcov-report/src/hooks/useWms.js.html +1 -1
  86. package/coverage/lcov-report/src/index.html +1 -1
  87. package/coverage/lcov-report/src/index.ts.html +6 -3
  88. package/coverage/lcov.info +270 -76
  89. package/dist/components/MlCreatePdfForm/MlCreatePdfForm.d.ts +1 -1
  90. package/dist/components/MlCreatePdfForm/lib/PdfForm.d.ts +1 -1
  91. package/dist/components/MlVectorTileLayer/MlVectorTileLayer.d.ts +5 -24
  92. package/dist/hooks/useCameraFollowPath/useCameraFollowPath.d.ts +35 -0
  93. package/dist/hooks/useCameraFollowPath/useCameraFollowPath.stories.d.ts +17 -0
  94. package/dist/hooks/useExportMap/index.d.ts +11 -0
  95. package/dist/hooks/useExportMap/lib.d.ts +36 -0
  96. package/dist/index.d.ts +2 -1
  97. package/dist/index.esm.js +209 -63
  98. package/dist/index.esm.js.map +1 -1
  99. package/package.json +2 -1
  100. package/scripts/build-catalogue-meta.js +1 -1
  101. package/src/components/MlCreatePdfForm/MlCreatePdfForm.tsx +1 -1
  102. package/src/components/MlCreatePdfForm/lib/PdfForm.tsx +5 -5
  103. package/src/components/MlVectorTileLayer/MlVectorTileLayer.stories.js +15 -9
  104. package/src/components/MlVectorTileLayer/MlVectorTileLayer.test.js +7 -6
  105. package/src/components/MlVectorTileLayer/MlVectorTileLayer.tsx +59 -77
  106. package/src/hooks/useCameraFollowPath/useCameraFollowPath.doc.de.md +4 -0
  107. package/src/hooks/useCameraFollowPath/useCameraFollowPath.doc.en.md +1 -0
  108. package/src/hooks/useCameraFollowPath/useCameraFollowPath.meta.json +15 -0
  109. package/src/hooks/useCameraFollowPath/useCameraFollowPath.stories.tsx +198 -0
  110. package/src/hooks/useCameraFollowPath/useCameraFollowPath.tsx +192 -0
  111. package/src/hooks/{exportMap → useExportMap}/index.ts +1 -1
  112. package/src/hooks/{exportMap → useExportMap}/lib.ts +1 -1
  113. package/src/index.ts +2 -1
@@ -0,0 +1,192 @@
1
+ import { useEffect, useCallback, useRef } from 'react';
2
+
3
+ import * as turf from '@turf/turf';
4
+ import useMap from '../useMap';
5
+ import { LngLatBoundsLike, LngLatLike } from 'maplibre-gl';
6
+
7
+ interface useCameraFollowPathProps {
8
+ /**
9
+ * Id of the target MapLibre instance in mapContext
10
+ */
11
+ mapId?: string;
12
+ /**
13
+ * Id of an existing layer in the mapLibre instance to help specify the layer order
14
+ * This layer will be visually beneath the layer with the "insertBeforeLayer" id.
15
+ */
16
+ insertBeforeLayer?: string;
17
+ /* pause is an useRef const and is triggerd in the storie */
18
+ pause?: boolean;
19
+ /* zoom is an useRef const and is triggerd in the storie */
20
+ zoom?: number;
21
+ /* pitch is an useRef const and is triggerd in the storie */
22
+ pitch?: number;
23
+ /* speed is an useRef const and is triggerd in the storie */
24
+ speed?: number;
25
+ /* kmPerStep is an useRef const */
26
+ kmPerStep?: number;
27
+ /* route is a json file, which is defined loaded in the storie */
28
+ route?: any;
29
+ /* stepDuration is a const */
30
+ stepDuration?: number;
31
+ /* timeoutId is an useRef const */
32
+ timeoutId?: number;
33
+ }
34
+ export type { useCameraFollowPathProps };
35
+
36
+ /**
37
+ * Component template
38
+ *
39
+ */
40
+ const useCameraFollowPath = (props: useCameraFollowPathProps) => {
41
+ // Use a useRef hook to reference the layer object to be able to access it later inside useEffect hooks
42
+ // without the requirement of adding it to the dependency list (ignore the false eslint exhaustive deps warning)
43
+ const initializedRef = useRef(false);
44
+ const pause = useRef<boolean | undefined>(props.pause);
45
+ const zoom = useRef<number | undefined>(props.zoom);
46
+ const pitch = useRef<number | undefined>(props.pitch);
47
+ const step = useRef(1);
48
+ const speed = useRef<number | undefined>(props.speed);
49
+ const timeoutId = useRef();
50
+
51
+ const kmPerStep = props.kmPerStep || 0.01;
52
+ const routeDistance = turf.lineDistance(props.route);
53
+ const stepDuration = props.stepDuration || 70;
54
+
55
+ const mapHook = useMap({
56
+ mapId: props.mapId,
57
+ waitForLayer: props.insertBeforeLayer,
58
+ });
59
+
60
+ useEffect(() => {
61
+ pause.current = props.pause;
62
+ if (!pause.current) {
63
+ play();
64
+ }
65
+ }, [props.pause]);
66
+ useEffect(() => {
67
+ if (!mapHook.map) return;
68
+ zoom.current = props.zoom;
69
+ if (typeof zoom.current !== 'undefined' && mapHook.map.map.getZoom() !== zoom.current) {
70
+ mapHook.map.map.setZoom(zoom.current);
71
+ }
72
+ }, [mapHook.map, props.zoom]);
73
+ useEffect(() => {
74
+ if (!mapHook.map) return;
75
+ pitch.current = props.pitch;
76
+ if (typeof pitch.current !== 'undefined' && pitch.current !== mapHook.map.map.getPitch()) {
77
+ mapHook.map.map.setPitch(pitch.current);
78
+ }
79
+ }, [mapHook.map, props.pitch]);
80
+ useEffect(() => {
81
+ speed.current = props.speed;
82
+ }, [props.speed]);
83
+
84
+ const disableInteractivity = useCallback(() => {
85
+ if (!mapHook.map) return;
86
+ mapHook.map.map['scrollZoom'].disable();
87
+ mapHook.map.map['boxZoom'].disable();
88
+ mapHook.map.map['dragRotate'].disable();
89
+ mapHook.map.map['dragPan'].disable();
90
+ mapHook.map.map['keyboard'].disable();
91
+ mapHook.map.map['doubleClickZoom'].disable();
92
+ mapHook.map.map['touchZoomRotate'].disable();
93
+ }, [mapHook.map]);
94
+ const enableInteractivity = useCallback(() => {
95
+ if (!mapHook.map) return;
96
+ mapHook.map.map['scrollZoom'].enable();
97
+ mapHook.map.map['boxZoom'].enable();
98
+ mapHook.map.map['dragRotate'].enable();
99
+ mapHook.map.map['dragPan'].enable();
100
+ mapHook.map.map['keyboard'].enable();
101
+ mapHook.map.map['doubleClickZoom'].enable();
102
+ mapHook.map.map['touchZoomRotate'].enable();
103
+ }, [mapHook.map]);
104
+
105
+ function centerRoute() {
106
+ if (!mapHook.map || !props.route) return;
107
+ const bbox = turf.bbox(props.route);
108
+ let bounds: LngLatBoundsLike;
109
+ if (bbox && bbox.length > 3) {
110
+ bounds = [
111
+ [bbox[0], bbox[1]],
112
+ [bbox[2], bbox[3]],
113
+ ];
114
+ mapHook.map.map.fitBounds(bounds, { padding: 100 });
115
+ }
116
+ }
117
+ function play() {
118
+ if (!mapHook.map) return;
119
+
120
+ if (!pause.current) {
121
+ disableInteractivity();
122
+ if (typeof zoom.current !== 'undefined' && mapHook.map.map.getZoom() !== zoom.current) {
123
+ mapHook.map.map.setZoom(zoom.current);
124
+ }
125
+
126
+ const alongRoutelati: number[] = turf.along(props.route, step.current * kmPerStep).geometry
127
+ .coordinates;
128
+
129
+ if (step.current * kmPerStep < routeDistance) {
130
+ mapHook.map.map.easeTo({
131
+ center: alongRoutelati as LngLatLike,
132
+ bearing: turf.bearing(
133
+ turf.point([mapHook.map.map.getCenter().lng, mapHook.map.map.getCenter().lat]),
134
+ turf.point(alongRoutelati)
135
+ ),
136
+ duration: stepDuration,
137
+ essential: true,
138
+ });
139
+ if (typeof speed.current !== 'undefined') {
140
+ step.current = step.current + speed.current;
141
+ } else {
142
+ step.current++;
143
+ }
144
+ console.log('PAN MOVE');
145
+ setTimeout(() => {
146
+ play();
147
+ }, 100);
148
+ } else {
149
+ mapHook.map.map.setPitch(0);
150
+ centerRoute();
151
+ enableInteractivity();
152
+ console.log('ENABLE CONTROLS');
153
+ step.current = 1;
154
+ }
155
+ } else {
156
+ enableInteractivity();
157
+ }
158
+ }
159
+
160
+ function reset() {
161
+ if (!mapHook.map) return;
162
+ centerRoute();
163
+ enableInteractivity();
164
+ step.current = 1;
165
+ }
166
+
167
+ useEffect(() => {
168
+ if (!mapHook.map || initializedRef.current) return;
169
+ initializedRef.current = true;
170
+ centerRoute();
171
+ }, [mapHook.map]);
172
+
173
+ useEffect(() => {
174
+ return () => {
175
+ if (timeoutId.current) {
176
+ clearTimeout(timeoutId.current);
177
+ }
178
+ };
179
+ }, []);
180
+
181
+ return {
182
+ play: play,
183
+ reset: reset,
184
+ };
185
+ };
186
+
187
+ useCameraFollowPath.defaultProps = {
188
+ mapId: undefined,
189
+ zoom: 18,
190
+ };
191
+
192
+ export default useCameraFollowPath;
@@ -10,7 +10,7 @@ interface exportMapProps {
10
10
  mapId?: string;
11
11
  }
12
12
 
13
- export default function exportMap(props: exportMapProps) {
13
+ export default function useExportMap(props: exportMapProps) {
14
14
  const mapHook = useMap({ mapId: props.mapId });
15
15
 
16
16
  const _createExport = useMemo(() => {
@@ -1,4 +1,4 @@
1
- import { LngLatLike, Map } from 'maplibre-gl';
1
+ import { LngLatLike, Map } from '!maplibre-gl';
2
2
  import jsPDF from 'jspdf';
3
3
  import MapLibreGlWrapper from '../../components/MapLibreMap/lib/MapLibreGlWrapper';
4
4
 
package/src/index.ts CHANGED
@@ -35,7 +35,8 @@ export { default as useMapState } from "./hooks/useMapState";
35
35
  export { default as useMap } from "./hooks/useMap";
36
36
  export { default as useWms } from "./hooks/useWms.js";
37
37
  export { default as useSource } from "./hooks/useSource";
38
- export { default as useExportMap } from "./hooks/exportMap";
38
+ export { default as useExportMap } from "./hooks/useExportMap";
39
+ export { default as useCameraFollowPath } from "./hooks/useCameraFollowPath/useCameraFollowPath";
39
40
 
40
41
  export { MapComponentsProvider } from "./contexts/MapContext";
41
42
  export { default as MapContext } from "./contexts/MapContext";