@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,35 @@
1
+ interface useCameraFollowPathProps {
2
+ /**
3
+ * Id of the target MapLibre instance in mapContext
4
+ */
5
+ mapId?: string;
6
+ /**
7
+ * Id of an existing layer in the mapLibre instance to help specify the layer order
8
+ * This layer will be visually beneath the layer with the "insertBeforeLayer" id.
9
+ */
10
+ insertBeforeLayer?: string;
11
+ pause?: boolean;
12
+ zoom?: number;
13
+ pitch?: number;
14
+ speed?: number;
15
+ kmPerStep?: number;
16
+ route?: any;
17
+ stepDuration?: number;
18
+ timeoutId?: number;
19
+ }
20
+ export type { useCameraFollowPathProps };
21
+ /**
22
+ * Component template
23
+ *
24
+ */
25
+ declare const useCameraFollowPath: {
26
+ (props: useCameraFollowPathProps): {
27
+ play: () => void;
28
+ reset: () => void;
29
+ };
30
+ defaultProps: {
31
+ mapId: undefined;
32
+ zoom: number;
33
+ };
34
+ };
35
+ export default useCameraFollowPath;
@@ -0,0 +1,17 @@
1
+ declare const storyoptions: {
2
+ title: string;
3
+ component: {
4
+ (props: import("./useCameraFollowPath").useCameraFollowPathProps): {
5
+ play: () => void;
6
+ reset: () => void;
7
+ };
8
+ defaultProps: {
9
+ mapId: undefined;
10
+ zoom: number;
11
+ };
12
+ };
13
+ argTypes: {};
14
+ decorators: ((Story: any) => JSX.Element)[];
15
+ };
16
+ export default storyoptions;
17
+ export declare const ExampleConfig: any;
@@ -0,0 +1,11 @@
1
+ import { createExportOptions } from './lib';
2
+ interface exportMapProps {
3
+ /**
4
+ * Id of the target MapLibre instance in mapContext
5
+ */
6
+ mapId?: string;
7
+ }
8
+ export default function useExportMap(props: exportMapProps): {
9
+ createExport: ((options: Omit<createExportOptions, 'map'> & Partial<Pick<createExportOptions, 'map'>>) => Promise<import("./lib").createExportResolverParams>) | undefined;
10
+ };
11
+ export {};
@@ -0,0 +1,36 @@
1
+ import { Map } from '!maplibre-gl';
2
+ import jsPDF from 'jspdf';
3
+ import MapLibreGlWrapper from '../../components/MapLibreMap/lib/MapLibreGlWrapper';
4
+ import { BBox } from '@turf/turf';
5
+ interface createExportOptions {
6
+ map: MapLibreGlWrapper;
7
+ width: number;
8
+ height: number;
9
+ bbox: BBox;
10
+ bboxUnrotated: BBox;
11
+ bearing: number;
12
+ format: string;
13
+ orientation: string;
14
+ }
15
+ export type { createExportOptions };
16
+ declare const createExport: (options: createExportOptions) => Promise<createExportResolverParams>;
17
+ interface createExportResolverParams extends createExportOptions {
18
+ createPdf: (_options?: createJsPdfOptions) => Promise<createPdfResolverParams>;
19
+ renderMap: Map;
20
+ hiddenContainer: HTMLDivElement;
21
+ }
22
+ export type { createExportResolverParams };
23
+ interface createJsPdfOptions extends createExportOptions {
24
+ renderMap: Map;
25
+ hiddenContainer: HTMLDivElement;
26
+ }
27
+ export type { createJsPdfOptions };
28
+ interface createPdfResolverParams extends createJsPdfOptions {
29
+ pdf: jsPDF;
30
+ downloadPdf: (_options?: downloadPdfOptions) => Promise<downloadPdfOptions>;
31
+ }
32
+ export type { createPdfResolverParams };
33
+ interface downloadPdfOptions extends createJsPdfOptions {
34
+ pdf: jsPDF;
35
+ }
36
+ export { createExport };
package/dist/index.d.ts CHANGED
@@ -29,7 +29,8 @@ export { default as useMapState } from "./hooks/useMapState";
29
29
  export { default as useMap } from "./hooks/useMap";
30
30
  export { default as useWms } from "./hooks/useWms.js";
31
31
  export { default as useSource } from "./hooks/useSource";
32
- export { default as useExportMap } from "./hooks/exportMap";
32
+ export { default as useExportMap } from "./hooks/useExportMap";
33
+ export { default as useCameraFollowPath } from "./hooks/useCameraFollowPath/useCameraFollowPath";
33
34
  export { MapComponentsProvider } from "./contexts/MapContext";
34
35
  export { default as MapContext } from "./contexts/MapContext";
35
36
  export { default as SimpleDataProvider } from "./contexts/SimpleDataProvider";
package/dist/index.esm.js CHANGED
@@ -10621,7 +10621,7 @@ var createExport = function (options) {
10621
10621
  _loop_1(name_1);
10622
10622
  }
10623
10623
  // Create a new MapLibre-gl instance
10624
- var renderMap = new Map$2({
10624
+ var renderMap = new Map$1({
10625
10625
  container: container,
10626
10626
  center: options.map.map.getCenter(),
10627
10627
  zoom: options.map.map.getZoom(),
@@ -10698,7 +10698,7 @@ function downloadPdf(options) {
10698
10698
  });
10699
10699
  }
10700
10700
 
10701
- function exportMap(props) {
10701
+ function useExportMap(props) {
10702
10702
  var mapHook = useMap({ mapId: props.mapId });
10703
10703
  var _createExport = useMemo(function () {
10704
10704
  if (mapHook.map) {
@@ -10733,7 +10733,7 @@ function PdfForm(props) {
10733
10733
  // eslint-disable-next-line react/prop-types
10734
10734
  mapId: props.mapId,
10735
10735
  });
10736
- var mapExporter = exportMap({ mapId: props.mapId });
10736
+ var mapExporter = useExportMap({ mapId: props.mapId });
10737
10737
  var createPdfHandler = useCallback(function () {
10738
10738
  var _a, _b, _c, _d, _e;
10739
10739
  if (mapHook.map &&
@@ -14269,89 +14269,84 @@ var MlVectorTileLayer = function (props) {
14269
14269
  mapId: props.mapId,
14270
14270
  waitForLayer: props.insertBeforeLayer,
14271
14271
  });
14272
- var layerIdsRef = useRef({});
14273
- var layerId = useRef(props.layerId || "MlVectorTileLayer-" + mapHook.componentId);
14272
+ var layerId = useRef(props.layerId || 'MlVectorTileLayer-' + mapHook.componentId);
14274
14273
  var layerPaintConfsRef = useRef({});
14275
14274
  var layerLayoutConfsRef = useRef({});
14276
14275
  var initializedRef = useRef(false);
14277
- var createLayer = useCallback(function () {
14276
+ var createLayers = useCallback(function () {
14278
14277
  if (!mapHook.map)
14279
14278
  return;
14280
14279
  initializedRef.current = true;
14281
- if (mapHook.map.map.getLayer(layerId.current)) {
14280
+ if (mapHook.map.map.getSource(layerId.current)) {
14282
14281
  mapHook.cleanup();
14283
14282
  }
14284
- // Add the new layer to the openlayers instance once it is available
14285
- mapHook.map.addSource(layerId.current, __assign({ type: "vector", tiles: [props.url], tileSize: 512, attribution: "" }, props.sourceOptions), mapHook.componentId);
14286
- for (var key in props.layers) {
14287
- var _layerId = layerId.current + "_" + key;
14288
- layerIdsRef.current[key] = _layerId;
14289
- mapHook.map.addLayer(__assign({ id: _layerId, source: layerId.current, type: "line", minzoom: 0, maxzoom: 22, layout: {}, paint: {
14290
- "line-opacity": 0.5,
14291
- "line-color": "rgb(80, 80, 80)",
14292
- "line-width": 2,
14293
- } }, props.layers[key]), props.insertBeforeLayer, mapHook.componentId);
14294
- layerPaintConfsRef.current[key] = JSON.stringify(props.layers[key].paint);
14295
- layerLayoutConfsRef.current[key] = JSON.stringify(props.layers[key].layout);
14283
+ // Add the new layer to the maplibre instance once it is available
14284
+ mapHook.map.addSource(layerId.current, __assign({ type: 'vector', tiles: [props.url], tileSize: 512, attribution: '' }, props.sourceOptions), mapHook.componentId);
14285
+ props.layers.forEach(function (layer) {
14286
+ if (!mapHook.map)
14287
+ return;
14288
+ mapHook.map.addLayer(__assign({ source: layerId.current, minzoom: 0, maxzoom: 22, layout: {}, paint: {
14289
+ 'line-opacity': 0.5,
14290
+ 'line-color': 'rgb(80, 80, 80)',
14291
+ 'line-width': 2,
14292
+ } }, layer), props.insertBeforeLayer, mapHook.componentId);
14293
+ layerPaintConfsRef.current[layer.id] = JSON.stringify(layer.paint);
14294
+ layerLayoutConfsRef.current[layer.id] = JSON.stringify(layer.layout);
14296
14295
  // recreate layer if style has changed
14297
- mapHook.map.on("styledata", function () {
14296
+ mapHook.map.on('styledata', function () {
14298
14297
  var _a;
14299
14298
  if (initializedRef.current && !((_a = mapHook.map) === null || _a === void 0 ? void 0 : _a.map.getSource(layerId.current))) {
14300
- console.log("Recreate Layer " + layerId.current);
14301
- createLayer();
14299
+ console.log('Recreate Layer ' + layerId.current);
14300
+ createLayers();
14302
14301
  }
14303
14302
  }, mapHook.componentId);
14304
- }
14303
+ });
14305
14304
  }, [mapHook.map, props]);
14306
- useEffect(function () {
14307
- if (initializedRef.current)
14308
- return;
14309
- createLayer();
14310
- }, [createLayer]);
14311
- useEffect(function () {
14312
- if (!mapHook.map || !initializedRef.current)
14305
+ var updateLayers = useCallback(function () {
14306
+ if (!initializedRef.current)
14313
14307
  return;
14314
- // initialize the layer and add it to the MapLibre-gl instance or do something else with it
14315
- for (var key in props.layers) {
14316
- if (mapHook.map.map.getLayer(layerIdsRef.current[key])) {
14308
+ props.layers.forEach(function (layer) {
14309
+ if (!mapHook.map)
14310
+ return;
14311
+ if (mapHook.map.map.getLayer(layer.id)) {
14317
14312
  // update changed paint property
14318
- var layerPaintConfString = JSON.stringify(props.layers[key].paint);
14319
- if (layerPaintConfString !== layerPaintConfsRef.current[key]) {
14320
- for (var paintKey in props.layers[key].paint) {
14321
- mapHook.map.map.setPaintProperty(layerIdsRef.current[key], paintKey, props.layers[key].paint[paintKey]);
14313
+ var layerPaintConfString = JSON.stringify(layer.paint);
14314
+ if (layerPaintConfString !== layerPaintConfsRef.current[layer.id]) {
14315
+ for (var paintKey in layer.paint) {
14316
+ mapHook.map.map.setPaintProperty(layer.id, paintKey, layer.paint[paintKey]);
14322
14317
  }
14323
14318
  }
14324
- layerPaintConfsRef.current[key] = layerPaintConfString;
14319
+ layerPaintConfsRef.current[layer.id] = layerPaintConfString;
14325
14320
  // update changed layout property
14326
- var layerLayoutConfString = JSON.stringify(props.layers[key].layout);
14327
- if (layerLayoutConfString !== layerLayoutConfsRef.current[key]) {
14328
- for (var layoutKey in props.layers[key].layout) {
14329
- mapHook.map.map.setLayoutProperty(layerIdsRef.current[key], layoutKey, props.layers[key].layout[layoutKey]);
14321
+ var layerLayoutConfString = JSON.stringify(layer.layout);
14322
+ if (layerLayoutConfString !== layerLayoutConfsRef.current[layer.id]) {
14323
+ for (var layoutKey in layer.layout) {
14324
+ mapHook.map.map.setLayoutProperty(layer.id, layoutKey, layer.layout[layoutKey]);
14330
14325
  }
14331
14326
  }
14332
- layerLayoutConfsRef.current[key] = layerLayoutConfString;
14327
+ layerLayoutConfsRef.current[layer.id] = layerLayoutConfString;
14333
14328
  }
14334
- }
14329
+ });
14330
+ }, [mapHook.map, props.layers]);
14331
+ // initial layer creation
14332
+ useEffect(function () {
14333
+ if (initializedRef.current)
14334
+ return;
14335
+ createLayers();
14336
+ }, [createLayers]);
14337
+ // if layers get removed or added
14338
+ useEffect(function () {
14339
+ if (!mapHook.map || !initializedRef.current)
14340
+ return;
14341
+ createLayers();
14342
+ }, [props.layers.length, mapHook.map]);
14343
+ // on layout/paint update
14344
+ useEffect(function () {
14345
+ if (!mapHook.map || !initializedRef.current)
14346
+ return;
14347
+ updateLayers();
14335
14348
  }, [props.layers, mapHook.map]);
14336
14349
  return React__default.createElement(React__default.Fragment, null);
14337
- };
14338
- MlVectorTileLayer.propTypes = {
14339
- /**
14340
- * Id of the target MapLibre instance in mapContext
14341
- */
14342
- mapId: PropTypes.string,
14343
- /**
14344
- * Options object that will be used as first parameter on the MapLibreGl.addSource call see MapLibre source options documentation.
14345
- */
14346
- sourceOptions: PropTypes.object,
14347
- /**
14348
- * Object that hold layers
14349
- */
14350
- layers: PropTypes.object,
14351
- /**
14352
- * String of the URL of a wms layer
14353
- */
14354
- url: PropTypes.string,
14355
14350
  };
14356
14351
 
14357
14352
  var defaultProps = {
@@ -19683,6 +19678,157 @@ function useSource(props) {
19683
19678
  };
19684
19679
  }
19685
19680
 
19681
+ /**
19682
+ * Component template
19683
+ *
19684
+ */
19685
+ var useCameraFollowPath = function (props) {
19686
+ // Use a useRef hook to reference the layer object to be able to access it later inside useEffect hooks
19687
+ // without the requirement of adding it to the dependency list (ignore the false eslint exhaustive deps warning)
19688
+ var initializedRef = useRef(false);
19689
+ var pause = useRef(props.pause);
19690
+ var zoom = useRef(props.zoom);
19691
+ var pitch = useRef(props.pitch);
19692
+ var step = useRef(1);
19693
+ var speed = useRef(props.speed);
19694
+ var timeoutId = useRef();
19695
+ var kmPerStep = props.kmPerStep || 0.01;
19696
+ var routeDistance = turf.lineDistance(props.route);
19697
+ var stepDuration = props.stepDuration || 70;
19698
+ var mapHook = useMap({
19699
+ mapId: props.mapId,
19700
+ waitForLayer: props.insertBeforeLayer,
19701
+ });
19702
+ useEffect(function () {
19703
+ pause.current = props.pause;
19704
+ if (!pause.current) {
19705
+ play();
19706
+ }
19707
+ }, [props.pause]);
19708
+ useEffect(function () {
19709
+ if (!mapHook.map)
19710
+ return;
19711
+ zoom.current = props.zoom;
19712
+ if (typeof zoom.current !== 'undefined' && mapHook.map.map.getZoom() !== zoom.current) {
19713
+ mapHook.map.map.setZoom(zoom.current);
19714
+ }
19715
+ }, [mapHook.map, props.zoom]);
19716
+ useEffect(function () {
19717
+ if (!mapHook.map)
19718
+ return;
19719
+ pitch.current = props.pitch;
19720
+ if (typeof pitch.current !== 'undefined' && pitch.current !== mapHook.map.map.getPitch()) {
19721
+ mapHook.map.map.setPitch(pitch.current);
19722
+ }
19723
+ }, [mapHook.map, props.pitch]);
19724
+ useEffect(function () {
19725
+ speed.current = props.speed;
19726
+ }, [props.speed]);
19727
+ var disableInteractivity = useCallback(function () {
19728
+ if (!mapHook.map)
19729
+ return;
19730
+ mapHook.map.map['scrollZoom'].disable();
19731
+ mapHook.map.map['boxZoom'].disable();
19732
+ mapHook.map.map['dragRotate'].disable();
19733
+ mapHook.map.map['dragPan'].disable();
19734
+ mapHook.map.map['keyboard'].disable();
19735
+ mapHook.map.map['doubleClickZoom'].disable();
19736
+ mapHook.map.map['touchZoomRotate'].disable();
19737
+ }, [mapHook.map]);
19738
+ var enableInteractivity = useCallback(function () {
19739
+ if (!mapHook.map)
19740
+ return;
19741
+ mapHook.map.map['scrollZoom'].enable();
19742
+ mapHook.map.map['boxZoom'].enable();
19743
+ mapHook.map.map['dragRotate'].enable();
19744
+ mapHook.map.map['dragPan'].enable();
19745
+ mapHook.map.map['keyboard'].enable();
19746
+ mapHook.map.map['doubleClickZoom'].enable();
19747
+ mapHook.map.map['touchZoomRotate'].enable();
19748
+ }, [mapHook.map]);
19749
+ function centerRoute() {
19750
+ if (!mapHook.map || !props.route)
19751
+ return;
19752
+ var bbox = turf.bbox(props.route);
19753
+ var bounds;
19754
+ if (bbox && bbox.length > 3) {
19755
+ bounds = [
19756
+ [bbox[0], bbox[1]],
19757
+ [bbox[2], bbox[3]],
19758
+ ];
19759
+ mapHook.map.map.fitBounds(bounds, { padding: 100 });
19760
+ }
19761
+ }
19762
+ function play() {
19763
+ if (!mapHook.map)
19764
+ return;
19765
+ if (!pause.current) {
19766
+ disableInteractivity();
19767
+ if (typeof zoom.current !== 'undefined' && mapHook.map.map.getZoom() !== zoom.current) {
19768
+ mapHook.map.map.setZoom(zoom.current);
19769
+ }
19770
+ var alongRoutelati = turf.along(props.route, step.current * kmPerStep).geometry
19771
+ .coordinates;
19772
+ if (step.current * kmPerStep < routeDistance) {
19773
+ mapHook.map.map.easeTo({
19774
+ center: alongRoutelati,
19775
+ bearing: turf.bearing(turf.point([mapHook.map.map.getCenter().lng, mapHook.map.map.getCenter().lat]), turf.point(alongRoutelati)),
19776
+ duration: stepDuration,
19777
+ essential: true,
19778
+ });
19779
+ if (typeof speed.current !== 'undefined') {
19780
+ step.current = step.current + speed.current;
19781
+ }
19782
+ else {
19783
+ step.current++;
19784
+ }
19785
+ console.log('PAN MOVE');
19786
+ setTimeout(function () {
19787
+ play();
19788
+ }, 100);
19789
+ }
19790
+ else {
19791
+ mapHook.map.map.setPitch(0);
19792
+ centerRoute();
19793
+ enableInteractivity();
19794
+ console.log('ENABLE CONTROLS');
19795
+ step.current = 1;
19796
+ }
19797
+ }
19798
+ else {
19799
+ enableInteractivity();
19800
+ }
19801
+ }
19802
+ function reset() {
19803
+ if (!mapHook.map)
19804
+ return;
19805
+ centerRoute();
19806
+ enableInteractivity();
19807
+ step.current = 1;
19808
+ }
19809
+ useEffect(function () {
19810
+ if (!mapHook.map || initializedRef.current)
19811
+ return;
19812
+ initializedRef.current = true;
19813
+ centerRoute();
19814
+ }, [mapHook.map]);
19815
+ useEffect(function () {
19816
+ return function () {
19817
+ if (timeoutId.current) {
19818
+ clearTimeout(timeoutId.current);
19819
+ }
19820
+ };
19821
+ }, []);
19822
+ return {
19823
+ play: play,
19824
+ reset: reset,
19825
+ };
19826
+ };
19827
+ useCameraFollowPath.defaultProps = {
19828
+ mapId: undefined,
19829
+ zoom: 18,
19830
+ };
19831
+
19686
19832
  var SimpleDataContext = /*#__PURE__*/React__default.createContext({});
19687
19833
  var SimpleDataContextProvider = SimpleDataContext.Provider;
19688
19834
 
@@ -19745,5 +19891,5 @@ SimpleDataProvider.propTypes = {
19745
19891
  children: PropTypes.node.isRequired
19746
19892
  };
19747
19893
 
19748
- export { GeoJsonContext, GeoJsonProvider, MapComponentsProvider, MapContext, MapLibreMap, MlBasicComponent, MlComponentTemplate, MlCreatePdfButton, MlCreatePdfForm, MlFeatureEditor, MlFillExtrusionLayer, MlFollowGps, MlGPXViewer, MlGeoJsonLayer, MlImageMarkerLayer, MlLayer, MlLayerMagnify, MlLayerSwipe, MlMarker, MlMeasureTool, MlNavigationCompass, MlNavigationTools, MlOsmLayer, MlScaleReference, MlSpatialElevationProfile, MlTransitionGeoJsonLayer, MlVectorTileLayer, MlWmsLayer, SimpleDataContext, SimpleDataProvider, exportMap as useExportMap, useLayer, useMap, useMapState, useSource, useWms };
19894
+ export { GeoJsonContext, GeoJsonProvider, MapComponentsProvider, MapContext, MapLibreMap, MlBasicComponent, MlComponentTemplate, MlCreatePdfButton, MlCreatePdfForm, MlFeatureEditor, MlFillExtrusionLayer, MlFollowGps, MlGPXViewer, MlGeoJsonLayer, MlImageMarkerLayer, MlLayer, MlLayerMagnify, MlLayerSwipe, MlMarker, MlMeasureTool, MlNavigationCompass, MlNavigationTools, MlOsmLayer, MlScaleReference, MlSpatialElevationProfile, MlTransitionGeoJsonLayer, MlVectorTileLayer, MlWmsLayer, SimpleDataContext, SimpleDataProvider, useCameraFollowPath, useExportMap, useLayer, useMap, useMapState, useSource, useWms };
19749
19895
  //# sourceMappingURL=index.esm.js.map