@mapcomponents/react-maplibre 0.1.16 → 0.1.17

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 (90) hide show
  1. package/coverage/clover.xml +257 -284
  2. package/coverage/coverage-final.json +10 -10
  3. package/coverage/lcov-report/index.html +44 -45
  4. package/coverage/lcov-report/src/components/MapLibreMap/MapLibreMap.js.html +2 -3
  5. package/coverage/lcov-report/src/components/MapLibreMap/index.html +2 -3
  6. package/coverage/lcov-report/src/components/MlCreatePdfButton/MlCreatePdfButton.js.html +2 -3
  7. package/coverage/lcov-report/src/components/MlCreatePdfButton/index.html +2 -3
  8. package/coverage/lcov-report/src/components/MlFeatureEditor/MlFeatureEditor.js.html +2 -3
  9. package/coverage/lcov-report/src/components/MlFeatureEditor/index.html +2 -3
  10. package/coverage/lcov-report/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.js.html +2 -3
  11. package/coverage/lcov-report/src/components/MlFillExtrusionLayer/index.html +2 -3
  12. package/coverage/lcov-report/src/components/MlFollowGps/MlFollowGps.js.html +2 -3
  13. package/coverage/lcov-report/src/components/MlFollowGps/index.html +2 -3
  14. package/coverage/lcov-report/src/components/MlGPXViewer/MlGPXViewer.js.html +2 -3
  15. package/coverage/lcov-report/src/components/MlGPXViewer/gpxConverter.js.html +2 -3
  16. package/coverage/lcov-report/src/components/MlGPXViewer/index.html +2 -3
  17. package/coverage/lcov-report/src/components/MlGeoJsonLayer/MlGeoJsonLayer.js.html +123 -181
  18. package/coverage/lcov-report/src/components/MlGeoJsonLayer/index.html +20 -21
  19. package/coverage/lcov-report/src/components/MlImageMarkerLayer/MlImageMarkerLayer.js.html +2 -3
  20. package/coverage/lcov-report/src/components/MlImageMarkerLayer/index.html +2 -3
  21. package/coverage/lcov-report/src/components/MlLayer/MlLayer.js.html +9 -13
  22. package/coverage/lcov-report/src/components/MlLayer/index.html +16 -17
  23. package/coverage/lcov-report/src/components/MlLayerMagnify/MlLayerMagnify.js.html +2 -3
  24. package/coverage/lcov-report/src/components/MlLayerMagnify/index.html +2 -3
  25. package/coverage/lcov-report/src/components/MlLayerSwipe/MlLayerSwipe.js.html +2 -3
  26. package/coverage/lcov-report/src/components/MlLayerSwipe/index.html +2 -3
  27. package/coverage/lcov-report/src/components/MlLayerSwitcher/MlLayerSwitcher.js.html +3 -10
  28. package/coverage/lcov-report/src/components/MlLayerSwitcher/components/LayerBox.js.html +9 -82
  29. package/coverage/lcov-report/src/components/MlLayerSwitcher/components/index.html +10 -11
  30. package/coverage/lcov-report/src/components/MlLayerSwitcher/index.html +2 -3
  31. package/coverage/lcov-report/src/components/MlMarker/MlMarker.js.html +6 -7
  32. package/coverage/lcov-report/src/components/MlMarker/index.html +6 -7
  33. package/coverage/lcov-report/src/components/MlNavigationCompass/MlNavigationCompass.js.html +2 -3
  34. package/coverage/lcov-report/src/components/MlNavigationCompass/index.html +2 -3
  35. package/coverage/lcov-report/src/components/MlNavigationTools/MlNavigationTools.js.html +2 -3
  36. package/coverage/lcov-report/src/components/MlNavigationTools/index.html +2 -3
  37. package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.js.html +2 -3
  38. package/coverage/lcov-report/src/components/MlOsmLayer/index.html +2 -3
  39. package/coverage/lcov-report/src/components/MlScaleReference/MlScaleReference.js.html +2 -3
  40. package/coverage/lcov-report/src/components/MlScaleReference/index.html +2 -3
  41. package/coverage/lcov-report/src/components/MlShareMapState/MlShareMapState.js.html +2 -3
  42. package/coverage/lcov-report/src/components/MlShareMapState/index.html +2 -3
  43. package/coverage/lcov-report/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.js.html +2 -3
  44. package/coverage/lcov-report/src/components/MlSpatialElevationProfile/index.html +2 -3
  45. package/coverage/lcov-report/src/components/MlThreeJsLayer/MlThreeJsLayer.js.html +2 -3
  46. package/coverage/lcov-report/src/components/MlThreeJsLayer/index.html +2 -3
  47. package/coverage/lcov-report/src/components/MlUseMapDebugger/MlUseMapDebugger.js.html +6 -25
  48. package/coverage/lcov-report/src/components/MlUseMapDebugger/index.html +6 -7
  49. package/coverage/lcov-report/src/components/MlVectorTileLayer/MlVectorTileLayer.js.html +2 -3
  50. package/coverage/lcov-report/src/components/MlVectorTileLayer/index.html +2 -3
  51. package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.js.html +2 -3
  52. package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/index.html +2 -3
  53. package/coverage/lcov-report/src/components/MlWmsLayer/MlWmsLayer.js.html +2 -3
  54. package/coverage/lcov-report/src/components/MlWmsLayer/index.html +2 -3
  55. package/coverage/lcov-report/src/components/MlWmsLoader/MlWmsLoader.js.html +6 -19
  56. package/coverage/lcov-report/src/components/MlWmsLoader/index.html +8 -9
  57. package/coverage/lcov-report/src/hooks/index.html +14 -15
  58. package/coverage/lcov-report/src/hooks/useMap.js.html +23 -24
  59. package/coverage/lcov-report/src/hooks/useMapState.js.html +7 -50
  60. package/coverage/lcov-report/src/hooks/useWms.js.html +9 -22
  61. package/coverage/lcov-report/src/i18n.js.html +2 -3
  62. package/coverage/lcov-report/src/index.html +2 -3
  63. package/coverage/lcov-report/src/translations/english.js.html +2 -3
  64. package/coverage/lcov-report/src/translations/german.js.html +2 -3
  65. package/coverage/lcov-report/src/translations/index.html +2 -3
  66. package/coverage/lcov.info +487 -524
  67. package/dist/index.esm.js +137 -148
  68. package/dist/index.esm.js.map +1 -1
  69. package/package.json +2 -2
  70. package/src/components/MapLibreMap/lib/MapLibreGlWrapper.js +3 -2
  71. package/src/components/MlComponentTemplate/MlComponentTemplate.js +3 -3
  72. package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.js +90 -109
  73. package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.stories.js +20 -6
  74. package/src/components/MlGeoJsonLayer/assets/sample_polygon_1.json +33 -0
  75. package/src/components/MlGeoJsonLayer/util/getDefaultLayerTypeByGeometry.js +25 -0
  76. package/src/components/MlGeoJsonLayer/util/getDefaultPaintPropsByType.js +22 -0
  77. package/src/components/MlLayer/MlLayer.js +0 -1
  78. package/src/components/MlLayerSwitcher/MlLayerSwitcher.js +0 -2
  79. package/src/components/MlLayerSwitcher/MlLayerSwitcher.stories.js +3 -6
  80. package/src/components/MlLayerSwitcher/components/LayerBox.js +2 -26
  81. package/src/components/MlMarker/MlMarker.js +1 -1
  82. package/src/components/MlShareMapState/MlShareMapState.stories.js +14 -17
  83. package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.stories.js +1 -3
  84. package/src/components/MlUseMapDebugger/MlUseMapDebugger.js +1 -7
  85. package/src/components/MlWmsLoader/MlWmsLoader.js +0 -4
  86. package/src/hooks/useMapState.js +0 -14
  87. package/src/hooks/useWms.js +2 -7
  88. package/src/ui_components/ImageLoader.js +8 -3
  89. package/src/ui_components/Sidebar.js +1 -1
  90. package/src/ui_components/TopToolbar.js +0 -2
package/dist/index.esm.js CHANGED
@@ -38,14 +38,9 @@ function ownKeys(object, enumerableOnly) {
38
38
 
39
39
  if (Object.getOwnPropertySymbols) {
40
40
  var symbols = Object.getOwnPropertySymbols(object);
41
-
42
- if (enumerableOnly) {
43
- symbols = symbols.filter(function (sym) {
44
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
45
- });
46
- }
47
-
48
- keys.push.apply(keys, symbols);
41
+ enumerableOnly && (symbols = symbols.filter(function (sym) {
42
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
43
+ })), keys.push.apply(keys, symbols);
49
44
  }
50
45
 
51
46
  return keys;
@@ -53,19 +48,12 @@ function ownKeys(object, enumerableOnly) {
53
48
 
54
49
  function _objectSpread2(target) {
55
50
  for (var i = 1; i < arguments.length; i++) {
56
- var source = arguments[i] != null ? arguments[i] : {};
57
-
58
- if (i % 2) {
59
- ownKeys(Object(source), true).forEach(function (key) {
60
- _defineProperty(target, key, source[key]);
61
- });
62
- } else if (Object.getOwnPropertyDescriptors) {
63
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
64
- } else {
65
- ownKeys(Object(source)).forEach(function (key) {
66
- Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
67
- });
68
- }
51
+ var source = null != arguments[i] ? arguments[i] : {};
52
+ i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
53
+ _defineProperty(target, key, source[key]);
54
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
55
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
56
+ });
69
57
  }
70
58
 
71
59
  return target;
@@ -74,17 +62,11 @@ function _objectSpread2(target) {
74
62
  function _typeof(obj) {
75
63
  "@babel/helpers - typeof";
76
64
 
77
- if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
78
- _typeof = function (obj) {
79
- return typeof obj;
80
- };
81
- } else {
82
- _typeof = function (obj) {
83
- return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
84
- };
85
- }
86
-
87
- return _typeof(obj);
65
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
66
+ return typeof obj;
67
+ } : function (obj) {
68
+ return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
69
+ }, _typeof(obj);
88
70
  }
89
71
 
90
72
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
@@ -319,6 +301,8 @@ var MapLibreGlWrapper = function MapLibreGlWrapper(props) {
319
301
  if (!Object.is(item.handler, handler)) {
320
302
  return item;
321
303
  }
304
+
305
+ return false;
322
306
  });
323
307
  },
324
308
 
@@ -366,12 +350,12 @@ var MapLibreGlWrapper = function MapLibreGlWrapper(props) {
366
350
  //if (self.baseLayers.indexOf(layer.id) === -1) {
367
351
  var paint = {};
368
352
  var values = (_layer$paint = layer.paint) === null || _layer$paint === void 0 ? void 0 : _layer$paint._values;
369
- Object.keys(values || {}).map(function (propName) {
353
+ Object.keys(values || {}).forEach(function (propName) {
370
354
  paint[propName] = typeof values[propName].value !== "undefined" ? values[propName].value.value : values[propName];
371
355
  });
372
356
  var layout = {};
373
357
  values = (_layer$layout = layer.layout) === null || _layer$layout === void 0 ? void 0 : _layer$layout._values;
374
- Object.keys(values || {}).map(function (propName) {
358
+ Object.keys(values || {}).forEach(function (propName) {
375
359
  layout[propName] = typeof values[propName].value !== "undefined" ? values[propName].value.value : values[propName];
376
360
  });
377
361
  return {
@@ -868,20 +852,15 @@ function useMapState(props) {
868
852
 
869
853
  var _useState = useState(undefined),
870
854
  _useState2 = _slicedToArray(_useState, 2),
871
- center = _useState2[0],
872
- setCenter = _useState2[1];
873
-
874
- var _useState3 = useState(undefined),
875
- _useState4 = _slicedToArray(_useState3, 2),
876
- viewport = _useState4[0],
877
- setViewport = _useState4[1];
855
+ viewport = _useState2[0],
856
+ setViewport = _useState2[1];
878
857
 
879
858
  var viewportRef = useRef(undefined);
880
859
 
881
- var _useState5 = useState(undefined),
882
- _useState6 = _slicedToArray(_useState5, 2),
883
- layers = _useState6[0],
884
- setLayers = _useState6[1];
860
+ var _useState3 = useState(undefined),
861
+ _useState4 = _slicedToArray(_useState3, 2),
862
+ layers = _useState4[0],
863
+ setLayers = _useState4[1];
885
864
 
886
865
  var layersRef = useRef(undefined); //const mapRef = useRef(props.map);
887
866
 
@@ -939,15 +918,6 @@ function useMapState(props) {
939
918
 
940
919
  initializedRef.current = true;
941
920
  mapRef.current = mapContext.getMap(props.mapId);
942
- /*
943
- mapRef.current.on(
944
- "move",
945
- () => {
946
- setCenter(mapRef.current.getCenter());
947
- },
948
- componentId.current
949
- );
950
- */
951
921
 
952
922
  if (props !== null && props !== void 0 && (_props$watch = props.watch) !== null && _props$watch !== void 0 && _props$watch.viewport) {
953
923
  setViewport(mapRef.current.wrapper.viewportState);
@@ -955,10 +925,9 @@ function useMapState(props) {
955
925
  var _mapRef$current;
956
926
 
957
927
  if (viewportRef.current !== ((_mapRef$current = mapRef.current) === null || _mapRef$current === void 0 ? void 0 : _mapRef$current.wrapper.viewportStateString)) {
958
- var _mapRef$current2, _mapRef$current3, _mapRef$current3$wrap;
928
+ var _mapRef$current2;
959
929
 
960
930
  setViewport((_mapRef$current2 = mapRef.current) === null || _mapRef$current2 === void 0 ? void 0 : _mapRef$current2.wrapper.viewportState);
961
- setCenter((_mapRef$current3 = mapRef.current) === null || _mapRef$current3 === void 0 ? void 0 : (_mapRef$current3$wrap = _mapRef$current3.wrapper.viewportState) === null || _mapRef$current3$wrap === void 0 ? void 0 : _mapRef$current3$wrap.center);
962
931
  }
963
932
  }, componentId.current);
964
933
  }
@@ -1102,7 +1071,7 @@ var MlComponentTemplate = function MlComponentTemplate(props) {
1102
1071
 
1103
1072
  initializedRef.current = true;
1104
1073
  mapHook.map.setCenter([7.132122000552613, 50.716405378037706]);
1105
- }, [mapHook.map, props.mapId]);
1074
+ }, [mapHook.map, mapHook.mapIsReady, props.mapId]);
1106
1075
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null);
1107
1076
  };
1108
1077
 
@@ -1412,7 +1381,58 @@ var _transitionToGeojson = function _transitionToGeojson(newGeojson, props, tran
1412
1381
  }, msPerStep);
1413
1382
  };
1414
1383
 
1384
+ var getDefaultPaintPropsByType = function getDefaultPaintPropsByType(type) {
1385
+ switch (type) {
1386
+ case "fill":
1387
+ return {
1388
+ "fill-color": "rgba(10,240,256,0.6)"
1389
+ };
1390
+
1391
+ case "line":
1392
+ return {
1393
+ "line-color": "rgb(100,200,100)",
1394
+ "line-width": 5
1395
+ };
1396
+
1397
+ case "circle":
1398
+ default:
1399
+ return {
1400
+ "circle-color": "#44aaaa",
1401
+ "circle-stroke-color": "#fff",
1402
+ "circle-stroke-width": 2
1403
+ };
1404
+ }
1405
+ };
1406
+
1407
+ var mapGeometryTypesToLayerTypes = {
1408
+ Position: "circle",
1409
+ Point: "circle",
1410
+ MultiPoint: "circle",
1411
+ LineString: "line",
1412
+ MultiLineString: "line",
1413
+ Polygon: "fill",
1414
+ MultiPolygon: "fill",
1415
+ GeometryCollection: "circle"
1416
+ };
1417
+
1418
+ var getDefaulLayerTypeByGeometry = function getDefaulLayerTypeByGeometry(geojson) {
1419
+ if ((geojson === null || geojson === void 0 ? void 0 : geojson.type) === "Feature") {
1420
+ var _geojson$geometry;
1421
+
1422
+ return mapGeometryTypesToLayerTypes !== null && mapGeometryTypesToLayerTypes !== void 0 && mapGeometryTypesToLayerTypes[geojson === null || geojson === void 0 ? void 0 : (_geojson$geometry = geojson.geometry) === null || _geojson$geometry === void 0 ? void 0 : _geojson$geometry.type] ? mapGeometryTypesToLayerTypes[geojson.geometry.type] : "circle";
1423
+ }
1424
+
1425
+ if ((geojson === null || geojson === void 0 ? void 0 : geojson.type) === "FeatureCollection") {
1426
+ if (geojson.features.length) {
1427
+ return getDefaulLayerTypeByGeometry(geojson.features[0]);
1428
+ }
1429
+
1430
+ return "circle";
1431
+ }
1432
+ };
1433
+
1415
1434
  var msPerStep = 50;
1435
+ var legalLayerTypes = ["circle", "fill", "line"];
1416
1436
  /**
1417
1437
  * Adds source and layer of types "line", "fill" or "circle" to display GeoJSON data on the map.
1418
1438
  *
@@ -1421,61 +1441,49 @@ var msPerStep = 50;
1421
1441
 
1422
1442
  var MlGeoJsonLayer = function MlGeoJsonLayer(props) {
1423
1443
  // Use a useRef hook to reference the layer object to be able to access it later inside useEffect hooks
1424
- var mapContext = useContext(MapContext);
1425
- var mapState = useMapState({
1444
+ var mapHook = useMap({
1426
1445
  mapId: props.mapId,
1427
- watch: {
1428
- viewport: false,
1429
- layers: true,
1430
- sources: false
1431
- }
1446
+ waitForLayer: props.insertBeforeLayer
1432
1447
  });
1433
- var oldGeojsonRef = useRef(null);
1434
- var mapRef = useRef(null);
1435
1448
  var initializedRef = useRef(false);
1449
+ var layerId = useRef(props.layerId || "MlGeoJsonLayer-" + mapHook.componentId);
1450
+ var layerTypeRef = useRef(undefined); // transition effect variables
1451
+
1452
+ var oldGeojsonRef = useRef(null);
1436
1453
  var transitionInProgressRef = useRef(false);
1437
1454
  var transitionTimeoutRef = useRef(undefined);
1438
1455
  var currentTransitionStepRef = useRef(false);
1439
1456
  var transitionGeojsonDataRef = useRef([]);
1440
1457
  var transitionGeojsonCommonDataRef = useRef([]);
1441
- var componentId = useRef((props.layerId ? props.layerId : "MlGeoJsonLayer-") + (props.idSuffix || v4()));
1442
- var layerId = useRef(props.layerId || componentId.current);
1443
1458
  useEffect(function () {
1444
- var _componentId = componentId.current;
1445
1459
  return function () {
1446
1460
  // This is the cleanup function, it is called when this react component is removed from react-dom
1447
1461
  if (transitionTimeoutRef.current) {
1448
1462
  clearTimeout(transitionTimeoutRef.current);
1449
1463
  }
1450
-
1451
- if (mapRef.current) {
1452
- mapRef.current.cleanup(_componentId);
1453
- mapRef.current = null;
1454
- }
1455
1464
  };
1456
1465
  }, []);
1457
1466
  useEffect(function () {
1458
- if (!mapRef.current || !initializedRef.current) return;
1467
+ if (!mapHook.map || !initializedRef.current) return;
1459
1468
 
1460
1469
  for (var key in props.layout) {
1461
- mapContext.getMap(props.mapId).setLayoutProperty(layerId.current, key, props.layout[key]);
1470
+ mapHook.map.setLayoutProperty(layerId.current, key, props.layout[key]);
1462
1471
  }
1463
- }, [props.layout, mapContext, props.mapId]);
1472
+ }, [props.layout, mapHook.map, props.mapId]);
1464
1473
  useEffect(function () {
1465
- if (!mapRef.current || !initializedRef.current) return;
1474
+ if (!mapHook.map || !initializedRef.current) return;
1466
1475
 
1467
1476
  for (var key in props.paint) {
1468
- mapContext.getMap(props.mapId).setPaintProperty(layerId.current, key, props.paint[key]);
1477
+ mapHook.map.setPaintProperty(layerId.current, key, props.paint[key]);
1469
1478
  }
1470
- }, [props.paint, mapContext, props.mapId]);
1479
+ }, [props.paint, mapHook.map, props.mapId]);
1471
1480
  var transitionToGeojson = useCallback(function (newGeojson) {
1472
- _transitionToGeojson(newGeojson, props, transitionGeojsonCommonDataRef, transitionGeojsonDataRef, transitionInProgressRef, oldGeojsonRef, msPerStep, currentTransitionStepRef, mapRef.current, componentId.current, transitionTimeoutRef);
1473
- }, [props]);
1481
+ _transitionToGeojson(newGeojson, props, transitionGeojsonCommonDataRef, transitionGeojsonDataRef, transitionInProgressRef, oldGeojsonRef, msPerStep, currentTransitionStepRef, mapHook.map, layerId.current, transitionTimeoutRef);
1482
+ }, [props, mapHook.map]);
1474
1483
  useEffect(function () {
1475
- var _mapRef$current, _mapRef$current$getSo;
1484
+ var _mapHook$map;
1476
1485
 
1477
- if (!((_mapRef$current = mapRef.current) !== null && _mapRef$current !== void 0 && (_mapRef$current$getSo = _mapRef$current.getSource) !== null && _mapRef$current$getSo !== void 0 && _mapRef$current$getSo.call(_mapRef$current, componentId.current)) || !initializedRef.current) return; // the MapLibre-gl instance (mapContext.map) is accessible here
1478
- // initialize the layer and add it to the MapLibre-gl instance or do something else with it
1486
+ if (!(mapHook !== null && mapHook !== void 0 && (_mapHook$map = mapHook.map) !== null && _mapHook$map !== void 0 && _mapHook$map.getSource(layerId.current)) || !initializedRef.current) return;
1479
1487
 
1480
1488
  if (typeof props.transitionTime !== "undefined" && props.type === "line" && oldGeojsonRef.current) {
1481
1489
  transitionInProgressRef.current = false;
@@ -1484,73 +1492,61 @@ var MlGeoJsonLayer = function MlGeoJsonLayer(props) {
1484
1492
  transitionGeojsonCommonDataRef.current = [];
1485
1493
  transitionToGeojson(props.geojson);
1486
1494
  } else {
1487
- mapRef.current.getSource(componentId.current).setData(props.geojson);
1495
+ mapHook.map.getSource(layerId.current).setData(props.geojson);
1488
1496
  }
1489
1497
 
1490
1498
  oldGeojsonRef.current = props.geojson;
1491
- }, [props.geojson, props.mapId, mapContext, props.type, transitionToGeojson, props.transitionTime]);
1492
- useEffect(function () {
1493
- if (!mapContext.mapExists(props.mapId) || initializedRef.current) return; // the MapLibre-gl instance (mapContext.map) is accessible here
1494
- // initialize the layer and add it to the MapLibre-gl instance or do something else with it
1499
+ }, [props.geojson, props.mapId, mapHook.map, props.type, transitionToGeojson, props.transitionTime]);
1500
+ var createLayer = useCallback(function () {
1501
+ var geojson = props.geojson;
1495
1502
 
1496
- if (props.geojson) {
1497
- //check if insertBeforeLayer exists
1498
- if (props.insertBeforeLayer) {
1499
- var _mapState$layers;
1503
+ if (props.type === "line" && typeof props.transitionTime !== "undefined" && props.transitionTime && typeof props.geojson.geometry !== "undefined") {
1504
+ var tmpChunks = lineChunk(props.geojson, 0.01);
1505
+ geojson = tmpChunks.features[0];
1506
+ }
1500
1507
 
1501
- var layerFound = false;
1502
- mapState === null || mapState === void 0 ? void 0 : (_mapState$layers = mapState.layers) === null || _mapState$layers === void 0 ? void 0 : _mapState$layers.forEach(function (layer) {
1503
- if (layer.id === props.insertBeforeLayer) {
1504
- layerFound = true;
1505
- }
1506
- });
1508
+ layerTypeRef.current = props.type || getDefaulLayerTypeByGeometry(props.geojson);
1509
+ mapHook.map.addLayer({
1510
+ id: layerId.current,
1511
+ source: {
1512
+ type: "geojson",
1513
+ data: geojson
1514
+ },
1515
+ type: layerTypeRef.current,
1516
+ paint: props.paint || getDefaultPaintPropsByType(layerTypeRef.current),
1517
+ layout: props.layout || {}
1518
+ }, props.insertBeforeLayer, mapHook.componentId);
1507
1519
 
1508
- if (!layerFound) {
1509
- return;
1510
- }
1511
- }
1520
+ if (typeof props.onHover !== "undefined") {
1521
+ mapHook.map.on("mousemove", mapHook.componentId, props.onHover, mapHook.componentId);
1522
+ }
1512
1523
 
1513
- initializedRef.current = true;
1514
- var geojson = props.geojson;
1524
+ if (typeof props.onClick !== "undefined") {
1525
+ mapHook.map.on("click", mapHook.componentId, props.onClick, mapHook.componentId);
1526
+ }
1515
1527
 
1516
- if (props.type === "line" && typeof props.transitionTime !== "undefined" && props.transitionTime && typeof props.geojson.geometry !== "undefined") {
1517
- var tmpChunks = lineChunk(props.geojson, 0.01);
1518
- geojson = tmpChunks.features[0];
1519
- }
1528
+ if (typeof props.onLeave !== "undefined") {
1529
+ mapHook.map.on("mouseleave", mapHook.componentId, props.onLeave, mapHook.componentId);
1530
+ }
1520
1531
 
1521
- mapRef.current = mapContext.getMap(props.mapId);
1522
- mapRef.current.addLayer({
1523
- id: layerId.current,
1524
- source: {
1525
- type: "geojson",
1526
- data: geojson
1527
- },
1528
- type: props.type || "line",
1529
- paint: props.paint || {
1530
- "line-color": "rgb(100,200,100)",
1531
- "line-width": 10
1532
- },
1533
- layout: props.layout || {}
1534
- }, props.insertBeforeLayer, componentId.current);
1535
-
1536
- if (typeof props.onHover !== "undefined") {
1537
- mapRef.current.on("mousemove", componentId.current, props.onHover, componentId.current);
1538
- }
1532
+ if (props.type === "line" && typeof props.transitionTime !== "undefined" && typeof props.geojson.geometry !== "undefined") {
1533
+ transitionToGeojson(props.geojson);
1534
+ oldGeojsonRef.current = props.geojson;
1535
+ }
1536
+ }, [mapHook.map, props, transitionToGeojson]);
1537
+ useEffect(function () {
1538
+ if (!mapHook.mapIsReady || !props.geojson) return;
1539
1539
 
1540
- if (typeof props.onClick !== "undefined") {
1541
- mapRef.current.on("click", componentId.current, props.onClick, componentId.current);
1542
- }
1540
+ if (initializedRef.current && legalLayerTypes.indexOf(props.type) !== -1 && layerTypeRef.current && props.type !== layerTypeRef.current) {
1541
+ mapHook.map.cleanup(mapHook.componentId);
1542
+ } else if (initializedRef.current && (legalLayerTypes.indexOf(props.type) === -1 || legalLayerTypes.indexOf(props.type) !== -1 && props.type === layerTypeRef.current)) {
1543
+ return;
1544
+ } // initialize the layer and add it to the MapLibre-gl instance or do something else with it
1543
1545
 
1544
- if (typeof props.onLeave !== "undefined") {
1545
- mapRef.current.on("mouseleave", componentId.current, props.onLeave, componentId.current);
1546
- }
1547
1546
 
1548
- if (props.type === "line" && typeof props.transitionTime !== "undefined" && typeof props.geojson.geometry !== "undefined") {
1549
- transitionToGeojson(props.geojson);
1550
- oldGeojsonRef.current = props.geojson;
1551
- }
1552
- }
1553
- }, [mapContext.mapIds, mapContext, props, transitionToGeojson, mapState.layers]);
1547
+ initializedRef.current = true;
1548
+ createLayer();
1549
+ }, [mapHook.mapIsReady, createLayer, props]);
1554
1550
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null);
1555
1551
  };
1556
1552
 
@@ -1620,13 +1616,7 @@ MlGeoJsonLayer.propTypes = {
1620
1616
  * Creates transition animation whenever the geojson prop changes.
1621
1617
  * Only works with layer type "line" and LineString GeoJSON data.
1622
1618
  */
1623
- transitionTime: PropTypes.number,
1624
-
1625
- /**
1626
- * Id suffix string that is appended to the componentId.
1627
- * Probably removed soon.
1628
- */
1629
- idSuffix: PropTypes.string
1619
+ transitionTime: PropTypes.number
1630
1620
  };
1631
1621
 
1632
1622
  var MlImageMarkerLayer = function MlImageMarkerLayer(props) {
@@ -2483,7 +2473,6 @@ var MlLayer = function MlLayer(props) {
2483
2473
  var layerInitializedRef = useRef(false);
2484
2474
  var mapRef = useRef(null);
2485
2475
  var componentId = useRef((props.layerId ? props.layerId : "MlLayer-") + v4());
2486
- var idSuffixRef = useRef(props.idSuffix || new Date().getTime());
2487
2476
  var layerId = useRef(props.layerId || componentId.current);
2488
2477
  var layerPaintConfRef = useRef(undefined);
2489
2478
  var layerLayoutConfRef = useRef(undefined);