@mapcomponents/react-maplibre 0.1.34 → 0.1.37

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 (305) hide show
  1. package/.babelrc +3 -0
  2. package/.github/workflows/storybook.yml +1 -1
  3. package/.storybook/.babelrc +26 -0
  4. package/.storybook/main.js +15 -1
  5. package/.storybook/mapcomponents_logo.png +0 -0
  6. package/CHANGELOG.md +16 -1
  7. package/config/env.js +106 -0
  8. package/config/getHttpsConfig.js +66 -0
  9. package/config/jest/babelTransform.js +29 -0
  10. package/config/jest/cssTransform.js +14 -0
  11. package/config/jest/fileTransform.js +40 -0
  12. package/config/modules.js +134 -0
  13. package/config/paths.js +75 -0
  14. package/config/pnpTs.js +35 -0
  15. package/config/webpack.config.js +757 -0
  16. package/config/webpackDevServer.config.js +130 -0
  17. package/coverage/clover.xml +822 -900
  18. package/coverage/coverage-final.json +23 -24
  19. package/coverage/lcov-report/index.html +135 -150
  20. package/coverage/lcov-report/src/components/MapLibreMap/{MapLibreMap.js.html → MapLibreMap.tsx.html} +77 -68
  21. package/coverage/lcov-report/src/components/MapLibreMap/index.html +6 -6
  22. package/coverage/lcov-report/src/components/MlCreatePdfButton/{MlCreatePdfButton.js.html → MlCreatePdfButton.tsx.html} +40 -43
  23. package/coverage/lcov-report/src/components/MlCreatePdfButton/index.html +10 -10
  24. package/coverage/lcov-report/src/components/MlFeatureEditor/{MlFeatureEditor.js.html → MlFeatureEditor.tsx.html} +145 -85
  25. package/coverage/lcov-report/src/components/MlFeatureEditor/index.html +21 -21
  26. package/coverage/lcov-report/src/components/{MlImageMarkerLayer/MlImageMarkerLayer.js.html → MlFillExtrusionLayer/MlFillExtrusionLayer.tsx.html} +141 -111
  27. package/coverage/lcov-report/src/components/MlFillExtrusionLayer/index.html +20 -20
  28. package/coverage/lcov-report/src/components/MlFollowGps/{MlFollowGps.js.html → MlFollowGps.tsx.html} +177 -138
  29. package/coverage/lcov-report/src/components/MlFollowGps/index.html +15 -15
  30. package/coverage/lcov-report/src/components/MlGPXViewer/{MlGPXViewer.js.html → MlGPXViewer.tsx.html} +134 -80
  31. package/coverage/lcov-report/src/components/MlGPXViewer/gpxConverter.js.html +1 -1
  32. package/coverage/lcov-report/src/components/MlGPXViewer/index.html +16 -16
  33. package/coverage/lcov-report/src/components/{MlLayer/MlLayer.js.html → MlGeoJsonLayer/MlGeoJsonLayer.tsx.html} +151 -154
  34. package/coverage/lcov-report/src/components/MlGeoJsonLayer/index.html +19 -19
  35. package/coverage/lcov-report/src/components/{MlFillExtrusionLayer/MlFillExtrusionLayer.js.html → MlImageMarkerLayer/MlImageMarkerLayer.tsx.html} +151 -223
  36. package/coverage/lcov-report/src/components/MlImageMarkerLayer/index.html +16 -16
  37. package/coverage/lcov-report/src/components/MlLayer/MlLayer.tsx.html +229 -0
  38. package/coverage/lcov-report/src/components/MlLayer/index.html +21 -21
  39. package/coverage/lcov-report/src/components/MlLayerMagnify/{MlLayerMagnify.js.html → MlLayerMagnify.tsx.html} +134 -77
  40. package/coverage/lcov-report/src/components/MlLayerMagnify/index.html +20 -20
  41. package/coverage/lcov-report/src/components/MlLayerSwipe/{MlLayerSwipe.js.html → MlLayerSwipe.tsx.html} +83 -41
  42. package/coverage/lcov-report/src/components/MlLayerSwipe/index.html +2 -2
  43. package/coverage/lcov-report/src/components/MlLayerSwitcher/MlLayerSwitcher.js.html +3 -15
  44. package/coverage/lcov-report/src/components/MlLayerSwitcher/components/LayerBox.js.html +1 -1
  45. package/coverage/lcov-report/src/components/MlLayerSwitcher/components/index.html +1 -1
  46. package/coverage/lcov-report/src/components/MlLayerSwitcher/index.html +1 -1
  47. package/coverage/lcov-report/src/components/MlMarker/{MlMarker.js.html → MlMarker.tsx.html} +89 -137
  48. package/coverage/lcov-report/src/components/MlMarker/index.html +10 -10
  49. package/coverage/lcov-report/src/components/MlNavigationCompass/{MlNavigationCompass.js.html → MlNavigationCompass.tsx.html} +76 -25
  50. package/coverage/lcov-report/src/components/MlNavigationCompass/index.html +17 -17
  51. package/coverage/lcov-report/src/components/MlNavigationTools/{MlNavigationTools.js.html → MlNavigationTools.tsx.html} +67 -52
  52. package/coverage/lcov-report/src/components/MlNavigationTools/index.html +10 -10
  53. package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.js.html +1 -1
  54. package/coverage/lcov-report/src/components/MlOsmLayer/index.html +1 -1
  55. package/coverage/lcov-report/src/components/MlScaleReference/MlScaleReference.js.html +1 -1
  56. package/coverage/lcov-report/src/components/MlScaleReference/index.html +1 -1
  57. package/coverage/lcov-report/src/components/MlShareMapState/MlShareMapState.js.html +1 -1
  58. package/coverage/lcov-report/src/components/MlShareMapState/index.html +1 -1
  59. package/coverage/lcov-report/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.js.html +3 -3
  60. package/coverage/lcov-report/src/components/MlSpatialElevationProfile/index.html +1 -1
  61. package/coverage/lcov-report/src/components/MlThreeJsLayer/MlThreeJsLayer.js.html +5 -5
  62. package/coverage/lcov-report/src/components/MlThreeJsLayer/index.html +1 -1
  63. package/coverage/lcov-report/src/components/MlTransitionGeoJsonLayer/{MlTransitionGeoJsonLayer.js.html → MlTransitionGeoJsonLayer.tsx.html} +127 -118
  64. package/coverage/lcov-report/src/components/MlTransitionGeoJsonLayer/index.html +11 -11
  65. package/coverage/lcov-report/src/components/MlUseMapDebugger/MlUseMapDebugger.js.html +1 -1
  66. package/coverage/lcov-report/src/components/MlUseMapDebugger/index.html +1 -1
  67. package/coverage/lcov-report/src/components/MlVectorTileLayer/{MlVectorTileLayer.js.html → MlVectorTileLayer.tsx.html} +59 -11
  68. package/coverage/lcov-report/src/components/MlVectorTileLayer/index.html +2 -2
  69. package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.js.html +1 -1
  70. package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/index.html +1 -1
  71. package/coverage/lcov-report/src/components/MlWmsLayer/{MlWmsLayer.js.html → MlWmsLayer.tsx.html} +56 -11
  72. package/coverage/lcov-report/src/components/MlWmsLayer/index.html +2 -2
  73. package/coverage/lcov-report/src/components/MlWmsLoader/{MlWmsLoader.js.html → MlWmsLoader.tsx.html} +102 -78
  74. package/coverage/lcov-report/src/components/MlWmsLoader/index.html +8 -8
  75. package/coverage/lcov-report/src/hooks/index.html +44 -29
  76. package/coverage/lcov-report/src/{components/MlGeoJsonLayer/MlGeoJsonLayer.js.html → hooks/useLayer.ts.html} +328 -184
  77. package/coverage/lcov-report/src/hooks/{useMap.js.html → useMap.ts.html} +140 -50
  78. package/coverage/lcov-report/src/hooks/{useMapState.js.html → useMapState.ts.html} +166 -61
  79. package/coverage/lcov-report/src/hooks/useWms.js.html +1 -1
  80. package/coverage/lcov-report/src/index.html +15 -15
  81. package/coverage/lcov-report/src/{i18n.js.html → index.ts.html} +50 -32
  82. package/coverage/lcov.info +1540 -1669
  83. package/dist/index.esm.css +195 -0
  84. package/dist/index.esm.js +42894 -4862
  85. package/dist/index.esm.js.map +1 -1
  86. package/docs-build/0.d0c23b79.iframe.bundle.js +2 -0
  87. package/docs-build/0.d0c23b79.iframe.bundle.js.map +1 -0
  88. package/docs-build/0.fd1aa3ea21956d993519.manager.bundle.js +1 -0
  89. package/docs-build/1.34075652.iframe.bundle.js +10 -0
  90. package/docs-build/1.34075652.iframe.bundle.js.map +1 -0
  91. package/docs-build/16.ca488dae.iframe.bundle.js +2 -0
  92. package/docs-build/16.ca488dae.iframe.bundle.js.map +1 -0
  93. package/docs-build/17.e40eac7f.iframe.bundle.js +17 -0
  94. package/docs-build/17.e40eac7f.iframe.bundle.js.map +1 -0
  95. package/docs-build/18.62af0912.iframe.bundle.js +14 -0
  96. package/docs-build/18.62af0912.iframe.bundle.js.map +1 -0
  97. package/docs-build/19.0a217189.iframe.bundle.js +2 -0
  98. package/docs-build/19.0a217189.iframe.bundle.js.map +1 -0
  99. package/docs-build/2.f15ae19a.iframe.bundle.js +2 -0
  100. package/docs-build/2.f15ae19a.iframe.bundle.js.map +1 -0
  101. package/docs-build/20.4c43e27c.iframe.bundle.js +4 -0
  102. package/docs-build/20.4c43e27c.iframe.bundle.js.map +1 -0
  103. package/docs-build/21.19c21085.iframe.bundle.js +22 -0
  104. package/docs-build/21.19c21085.iframe.bundle.js.map +1 -0
  105. package/docs-build/3.5dd9e88b.iframe.bundle.js +2 -0
  106. package/docs-build/3.5dd9e88b.iframe.bundle.js.map +1 -0
  107. package/docs-build/4.f741dafe1833630ec8bf.manager.bundle.js +2 -0
  108. package/docs-build/4.f741dafe1833630ec8bf.manager.bundle.js.LICENSE.txt +8 -0
  109. package/docs-build/5.d4de191e7daeefb036ca.manager.bundle.js +1 -0
  110. package/docs-build/6.2b178c5444648ee5c0fa.manager.bundle.js +2 -0
  111. package/docs-build/6.2b178c5444648ee5c0fa.manager.bundle.js.LICENSE.txt +12 -0
  112. package/docs-build/7.7c16aea8ec7ea6e91994.manager.bundle.js +1 -0
  113. package/docs-build/8.52fa838fdf937b29676a.manager.bundle.js +1 -0
  114. package/docs-build/assets/dop.png +0 -0
  115. package/docs-build/assets/historic.png +0 -0
  116. package/docs-build/assets/marker.png +0 -0
  117. package/docs-build/assets/osm.png +0 -0
  118. package/docs-build/assets/sample.gpx +716 -0
  119. package/docs-build/{.gitkeep → catalogue/.gitkeep} +0 -0
  120. package/docs-build/catalogue/mc_meta.json +1 -0
  121. package/docs-build/favicon.ico +0 -0
  122. package/docs-build/iframe.html +348 -0
  123. package/docs-build/index.html +59 -0
  124. package/docs-build/logo.png +0 -0
  125. package/docs-build/main.8a7ec710ea1c16b5e13f.manager.bundle.js +1 -0
  126. package/docs-build/main~24120820.ba6665a8.iframe.bundle.js +2 -0
  127. package/docs-build/main~24120820.ba6665a8.iframe.bundle.js.map +1 -0
  128. package/docs-build/manifest.json +25 -0
  129. package/docs-build/robots.txt +3 -0
  130. package/docs-build/runtime~main.67aa1de2d72f40a81164.manager.bundle.js +1 -0
  131. package/docs-build/static/media/mapcomponents_logo.98b01a05.png +0 -0
  132. package/docs-build/static/media/wg-marker.bf3eeb2d.png +0 -0
  133. package/docs-build/stories.json +331 -0
  134. package/docs-build/thumbnails/MapLibreMap.png +0 -0
  135. package/docs-build/thumbnails/MlCameraFollowPath.png +0 -0
  136. package/docs-build/thumbnails/MlCreatePdfButton.png +0 -0
  137. package/docs-build/thumbnails/MlDeckGlLayer.png +0 -0
  138. package/docs-build/thumbnails/MlDeckGlTerrainLayer.png +0 -0
  139. package/docs-build/thumbnails/MlDemoDashboard.png +0 -0
  140. package/docs-build/thumbnails/MlFeatureEditor.png +0 -0
  141. package/docs-build/thumbnails/MlFillExtrusionLayer.png +0 -0
  142. package/docs-build/thumbnails/MlFollowGps.png +0 -0
  143. package/docs-build/thumbnails/MlGPXViewer.png +0 -0
  144. package/docs-build/thumbnails/MlGeoJsonLayer.png +0 -0
  145. package/docs-build/thumbnails/MlHillshadeLayer.png +0 -0
  146. package/docs-build/thumbnails/MlIconLayer.png +0 -0
  147. package/docs-build/thumbnails/MlLaermkarte.png +0 -0
  148. package/docs-build/thumbnails/MlLayerMagnify.png +0 -0
  149. package/docs-build/thumbnails/MlLayerSwipe.png +0 -0
  150. package/docs-build/thumbnails/MlMapDrawTools.png +0 -0
  151. package/docs-build/thumbnails/MlMobilerImker.png +0 -0
  152. package/docs-build/thumbnails/MlNavigationCompass.png +0 -0
  153. package/docs-build/thumbnails/MlNavigationTools.png +0 -0
  154. package/docs-build/thumbnails/MlOsmLayer.png +0 -0
  155. package/docs-build/thumbnails/MlScaleReference.png +0 -0
  156. package/docs-build/thumbnails/MlSpatialElevationProfile.png +0 -0
  157. package/docs-build/thumbnails/MlThreeJsLayer.png +0 -0
  158. package/docs-build/thumbnails/MlTransitionGeoJsonLayer.png +0 -0
  159. package/docs-build/thumbnails/MlVectorTileLayer.png +0 -0
  160. package/docs-build/thumbnails/MlWanderApp.png +0 -0
  161. package/docs-build/thumbnails/MlWmsLayer.png +0 -0
  162. package/docs-build/thumbnails/MlWmsLoader.png +0 -0
  163. package/docs-build/vendors~main.351900838c49e9200954.manager.bundle.js +2 -0
  164. package/docs-build/vendors~main.351900838c49e9200954.manager.bundle.js.LICENSE.txt +101 -0
  165. package/docs-build/vendors~main~0ad7406a.a6abfed7.iframe.bundle.js +8 -0
  166. package/docs-build/vendors~main~0ad7406a.a6abfed7.iframe.bundle.js.map +1 -0
  167. package/docs-build/vendors~main~0f485567.1d7a15b7.iframe.bundle.js +2 -0
  168. package/docs-build/vendors~main~0f485567.1d7a15b7.iframe.bundle.js.map +1 -0
  169. package/docs-build/vendors~main~41a6ab2c.525ecc56.iframe.bundle.js +2 -0
  170. package/docs-build/vendors~main~41a6ab2c.525ecc56.iframe.bundle.js.map +1 -0
  171. package/docs-build/vendors~main~52589227.1d1558cd.iframe.bundle.js +8 -0
  172. package/docs-build/vendors~main~52589227.1d1558cd.iframe.bundle.js.map +1 -0
  173. package/docs-build/vendors~main~73914085.227c6747.iframe.bundle.js +293 -0
  174. package/docs-build/vendors~main~73914085.227c6747.iframe.bundle.js.map +1 -0
  175. package/docs-build/vendors~main~9c5b28f6.f02cc741.iframe.bundle.js +7 -0
  176. package/docs-build/vendors~main~9c5b28f6.f02cc741.iframe.bundle.js.map +1 -0
  177. package/docs-build/vendors~main~b5906859.4083ac60.iframe.bundle.js +21 -0
  178. package/docs-build/vendors~main~b5906859.4083ac60.iframe.bundle.js.map +1 -0
  179. package/docs-build/vendors~main~b8f44717.7a612c34.iframe.bundle.js +89 -0
  180. package/docs-build/vendors~main~b8f44717.7a612c34.iframe.bundle.js.map +1 -0
  181. package/docs-build/vendors~main~b9cf3951.45da142d.iframe.bundle.js +68 -0
  182. package/docs-build/vendors~main~b9cf3951.45da142d.iframe.bundle.js.map +1 -0
  183. package/docs-build/vendors~main~d939e436.92c27fbf.iframe.bundle.js +2 -0
  184. package/docs-build/vendors~main~d939e436.92c27fbf.iframe.bundle.js.map +1 -0
  185. package/docs-build/vendors~main~dab50aa4.b0d58038.iframe.bundle.js +107 -0
  186. package/docs-build/vendors~main~dab50aa4.b0d58038.iframe.bundle.js.map +1 -0
  187. package/package.json +131 -113
  188. package/public/favicon.ico +0 -0
  189. package/public/logo.png +0 -0
  190. package/rollup.config.js +26 -3
  191. package/scripts/start.js +166 -0
  192. package/scripts/test.js +53 -0
  193. package/src/components/MapLibreMap/MapLibreMap.stories.js +14 -5
  194. package/src/components/MapLibreMap/MapLibreMap.test.js +1 -1
  195. package/src/components/MapLibreMap/{MapLibreMap.js → MapLibreMap.tsx} +40 -37
  196. package/src/components/MapLibreMap/lib/MapLibreGlWrapper.test.js +3 -3
  197. package/src/components/MapLibreMap/lib/MapLibreGlWrapper.ts +636 -0
  198. package/src/components/MlComponentTemplate/MlComponentTemplate.stories.js +0 -2
  199. package/src/components/MlComponentTemplate/MlComponentTemplate.tsx +42 -0
  200. package/src/components/MlCreatePdfButton/MlCreatePdfButton.stories.js +0 -5
  201. package/src/components/MlCreatePdfButton/MlCreatePdfButton.tsx +51 -0
  202. package/src/components/MlCreatePdfButton/lib/{createPdf.js → createPdf.ts} +26 -23
  203. package/src/components/MlCreatePdfButton/lib/{nominatimMap.js → nominatimMap.ts} +3 -3
  204. package/src/components/MlFeatureEditor/MlFeatureEditor.tsx +139 -0
  205. package/src/components/MlFeatureEditor/custom-direct-select-mode.js +12 -8
  206. package/src/components/MlFeatureEditor/custom-polygon-mode.js +9 -5
  207. package/src/components/MlFeatureEditor/custom-select-mode.js +11 -7
  208. package/src/components/MlFeatureEditor/lib/LICENSE.md +18 -0
  209. package/src/components/MlFeatureEditor/lib/common_selectors.js +4 -0
  210. package/src/components/MlFeatureEditor/lib/constants.js +4 -0
  211. package/src/components/MlFeatureEditor/lib/constrain_feature_movement.js +4 -0
  212. package/src/components/MlFeatureEditor/lib/create_midpoint.js +4 -0
  213. package/src/components/MlFeatureEditor/lib/create_supplementary_points.js +4 -0
  214. package/src/components/MlFeatureEditor/lib/create_vertex.js +4 -0
  215. package/src/components/MlFeatureEditor/lib/double_click_zoom.js +4 -0
  216. package/src/components/MlFeatureEditor/lib/euclidean_distance.js +4 -0
  217. package/src/components/MlFeatureEditor/lib/features_at.js +4 -0
  218. package/src/components/MlFeatureEditor/lib/get_features_and_set_cursor.js +4 -0
  219. package/src/components/MlFeatureEditor/lib/is_click.js +4 -0
  220. package/src/components/MlFeatureEditor/lib/is_event_at_coordinates.js +4 -0
  221. package/src/components/MlFeatureEditor/lib/is_tap.js +4 -0
  222. package/src/components/MlFeatureEditor/lib/map_event_to_bounding_box.js +4 -0
  223. package/src/components/MlFeatureEditor/lib/mode_handler.js +4 -0
  224. package/src/components/MlFeatureEditor/lib/mouse_event_point.js +4 -0
  225. package/src/components/MlFeatureEditor/lib/move_features.js +4 -0
  226. package/src/components/MlFeatureEditor/lib/sort_features.js +4 -0
  227. package/src/components/MlFeatureEditor/lib/string_set.js +4 -0
  228. package/src/components/MlFeatureEditor/lib/string_sets_are_equal.js +4 -0
  229. package/src/components/MlFeatureEditor/lib/theme.js +4 -0
  230. package/src/components/MlFeatureEditor/lib/to_dense_array.js +4 -0
  231. package/src/components/MlFeatureEditor/lib/utils.js +4 -0
  232. package/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.stories.js +6 -11
  233. package/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.tsx +85 -0
  234. package/src/components/MlFollowGps/MlFollowGps.stories.js +0 -2
  235. package/src/components/MlFollowGps/{MlFollowGps.js → MlFollowGps.tsx} +99 -86
  236. package/src/components/MlGPXViewer/{MlGPXViewer.js → MlGPXViewer.tsx} +68 -50
  237. package/src/components/MlGPXViewer/util/GeoJsonContext.ts +13 -0
  238. package/src/components/MlGPXViewer/util/{GeoJsonProvider.js → GeoJsonProvider.tsx} +3 -7
  239. package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.stories.js +8 -3
  240. package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.tsx +106 -0
  241. package/src/components/MlGeoJsonLayer/util/{getDefaultLayerTypeByGeometry.js → getDefaultLayerTypeByGeometry.ts} +6 -1
  242. package/src/components/MlGeoJsonLayer/util/{getDefaultPaintPropsByType.js → getDefaultPaintPropsByType.ts} +1 -1
  243. package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.stories.js +1 -4
  244. package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.tsx +129 -0
  245. package/src/components/MlLayer/MlLayer.stories.js +0 -2
  246. package/src/components/MlLayer/MlLayer.tsx +48 -0
  247. package/src/components/MlLayerMagnify/MlLayerMagnify.stories.js +3 -3
  248. package/src/components/MlLayerMagnify/{MlLayerMagnify.js → MlLayerMagnify.tsx} +62 -43
  249. package/src/components/MlLayerSwipe/MlLayerSwipe.stories.js +0 -2
  250. package/src/components/MlLayerSwipe/{MlLayerSwipe.js → MlLayerSwipe.tsx} +38 -24
  251. package/src/components/MlLayerSwitcher/MlLayerSwitcher.js +0 -4
  252. package/src/components/MlMarker/MlMarker.tsx +140 -0
  253. package/src/components/MlNavigationCompass/{MlNavigationCompass.js → MlNavigationCompass.tsx} +27 -10
  254. package/src/components/MlNavigationTools/{MlNavigationTools.js → MlNavigationTools.tsx} +37 -32
  255. package/src/components/MlTransitionGeoJsonLayer/{MlTransitionGeoJsonLayer.js → MlTransitionGeoJsonLayer.tsx} +76 -73
  256. package/src/components/MlVectorTileLayer/{MlVectorTileLayer.js → MlVectorTileLayer.tsx} +23 -7
  257. package/src/components/MlWmsLayer/{MlWmsLayer.js → MlWmsLayer.tsx} +22 -7
  258. package/src/components/MlWmsLoader/{MlWmsLoader.js → MlWmsLoader.tsx} +55 -47
  259. package/src/custom.d.tsx +26 -0
  260. package/src/hooks/useLayer.ts +221 -0
  261. package/src/hooks/{useMap.js → useMap.ts} +48 -17
  262. package/src/hooks/{useMapState.js → useMapState.ts} +42 -7
  263. package/src/{index.js → index.ts} +15 -8
  264. package/tsconfig.json +18 -24
  265. package/.env +0 -1
  266. package/.storybook/main.bck.js +0 -56
  267. package/babel.config.json +0 -4
  268. package/coverage/lcov-report/src/translations/english.js.html +0 -94
  269. package/coverage/lcov-report/src/translations/german.js.html +0 -94
  270. package/coverage/lcov-report/src/translations/index.html +0 -131
  271. package/jest.config.json +0 -16
  272. package/jsdoc.json +0 -21
  273. package/public/assets/3D/posttower.gltf +0 -103
  274. package/public/assets/3D/posttower_simple.gltf +0 -103
  275. package/public/assets/3D/posttower_wh.gltf.glb +0 -0
  276. package/public/bee.png +0 -0
  277. package/public/logo192.png +0 -0
  278. package/public/logo512.png +0 -0
  279. package/src/components/MapLibreMap/lib/MapLibreGlWrapper.js +0 -528
  280. package/src/components/MlComponentTemplate/MlComponentTemplate.js +0 -39
  281. package/src/components/MlCreatePdfButton/MlCreatePdfButton.js +0 -52
  282. package/src/components/MlFeatureEditor/MlFeatureEditor.js +0 -119
  283. package/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.js +0 -153
  284. package/src/components/MlGPXViewer/util/GeoJsonContext.js +0 -6
  285. package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.js +0 -173
  286. package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.js +0 -75
  287. package/src/components/MlLayer/MlLayer.js +0 -107
  288. package/src/components/MlLayerMagnify/utils/compareMagnify.js +0 -173
  289. package/src/components/MlLayerSwipe/utils/swipeCompare.js +0 -220
  290. package/src/components/MlMarker/MlMarker.js +0 -156
  291. package/src/components/index.js +0 -6
  292. package/src/i18n.js +0 -28
  293. package/src/react-app-env.d.ts +0 -1
  294. package/src/stories/IntroductionCore.stories.mdx +0 -3
  295. package/src/stories/assets/code-brackets.svg +0 -1
  296. package/src/stories/assets/colors.svg +0 -1
  297. package/src/stories/assets/comments.svg +0 -1
  298. package/src/stories/assets/direction.svg +0 -1
  299. package/src/stories/assets/flow.svg +0 -1
  300. package/src/stories/assets/plugin.svg +0 -1
  301. package/src/stories/assets/repo.svg +0 -1
  302. package/src/stories/assets/stackalt.svg +0 -1
  303. package/src/stories/components/ComponentTeaser.js +0 -64
  304. package/src/translations/english.js +0 -4
  305. package/src/translations/german.js +0 -4
@@ -27,13 +27,24 @@ const defaultProps = {
27
27
  },
28
28
  };
29
29
 
30
+ interface MlWmsLayerProps {
31
+ urlParameters?: any;
32
+ url: string;
33
+ visible?: boolean;
34
+ attribution?: string;
35
+ mapId?: string;
36
+ sourceOptions?: any;
37
+ layerOptions?: any;
38
+ insertBeforeLayer?: string;
39
+ layerId?: string;
40
+ }
30
41
  /**
31
42
  * Adds a WMS raster source & layer to the maplibre-gl instance
32
43
  *
33
44
  * @param {object} props
34
45
  * @param {object} props.urlParameters URL query parameters that will be added to the WMS URL. A layers property (string) is mandatory. Any value defined on this attribute will extend the default object
35
46
  * @param {string} props.url WMS URL
36
- * @param {bool} props.visible Sets layer "visibility" property to "visible" if true or "none" if false
47
+ * @param {bool} props.visible Sets layer "visibility" property to "visible" if true or "none" if false
37
48
  * @param {string} props.attribution MapLibre attribution shown in the bottom right of the map, if this layer is visible
38
49
  * @param {string} props.mapId Id of the target MapLibre instance in mapContext
39
50
  * @param {object} props.sourceOptions Object that is passed to the MapLibre.addSource call as config option parameter
@@ -43,8 +54,11 @@ const defaultProps = {
43
54
  *
44
55
  * @component
45
56
  */
46
- const MlWmsLayer = (props) => {
47
- const mapHook = useMap({ mapId: props.mapId, waitForLayer: props.insertBeforeLayer });
57
+ const MlWmsLayer = (props:MlWmsLayerProps) => {
58
+ const mapHook = useMap({
59
+ mapId: props.mapId,
60
+ waitForLayer: props.insertBeforeLayer,
61
+ });
48
62
 
49
63
  const initializedRef = useRef(false);
50
64
  const layerId = useRef(props.layerId || "MlWmsLayer-" + mapHook.componentId);
@@ -69,7 +83,8 @@ const MlWmsLayer = (props) => {
69
83
  };
70
84
  let urlParams = new URLSearchParams(urlParamsObj);
71
85
  let urlParamsStr =
72
- decodeURIComponent(urlParams.toString()) + "".replace(/%2F/g, "/").replace(/%3A/g, ":");
86
+ decodeURIComponent(urlParams.toString()) +
87
+ "".replace(/%2F/g, "/").replace(/%3A/g, ":");
73
88
 
74
89
  mapHook.map.addSource(
75
90
  layerId.current,
@@ -95,7 +110,7 @@ const MlWmsLayer = (props) => {
95
110
  );
96
111
 
97
112
  if (!props.visible) {
98
- mapHook.map.setLayoutProperty(layerId.current, "visibility", "none");
113
+ mapHook.map.map.setLayoutProperty(layerId.current, "visibility", "none");
99
114
  }
100
115
  }, [mapHook, props]);
101
116
 
@@ -104,9 +119,9 @@ const MlWmsLayer = (props) => {
104
119
 
105
120
  // toggle layer visibility by changing the layout object's visibility property
106
121
  if (props.visible) {
107
- mapHook.map.setLayoutProperty(layerId.current, "visibility", "visible");
122
+ mapHook.map.map.setLayoutProperty(layerId.current, "visibility", "visible");
108
123
  } else {
109
- mapHook.map.setLayoutProperty(layerId.current, "visibility", "none");
124
+ mapHook.map.map.setLayoutProperty(layerId.current, "visibility", "none");
110
125
  }
111
126
  }, [props.visible, mapHook.map]);
112
127
 
@@ -1,6 +1,6 @@
1
1
  import React, { useRef, useEffect, useContext, useCallback, useState } from "react";
2
- import PropTypes from "prop-types";
3
2
 
3
+ // @ts-ignore
4
4
  import { MapContext } from "@mapcomponents/react-core";
5
5
  import { v4 as uuidv4 } from "uuid";
6
6
 
@@ -15,9 +15,11 @@ import List from "@mui/material/List";
15
15
  import ListItem from "@mui/material/ListItem";
16
16
  import ListItemText from "@mui/material/ListItemText";
17
17
  import IconButton from "@mui/material/IconButton";
18
+ import {LngLat} from "maplibre-gl";
19
+ import MapLibreGlWrapper from "../MapLibreMap/lib/MapLibreGlWrapper";
18
20
 
19
21
  var originShift = (2 * Math.PI * 6378137) / 2.0;
20
- const lngLatToMeters = function (lnglat, validate, accuracy = { enable: true, decimal: 1 }) {
22
+ const lngLatToMeters = function (lnglat:LngLat, accuracy = { enable: true, decimal: 1 }) {
21
23
  var lng = lnglat.lng;
22
24
  var lat = lnglat.lat;
23
25
  var x = (lng * originShift) / 180.0;
@@ -29,6 +31,32 @@ const lngLatToMeters = function (lnglat, validate, accuracy = { enable: true, de
29
31
  }
30
32
  return [x, y];
31
33
  };
34
+
35
+ interface MlWmsLoaderProps {
36
+ /**
37
+ * WMS URL
38
+ */
39
+ url: string;
40
+ /**
41
+ * Id of the target MapLibre instance in mapContext
42
+ */
43
+ mapId: string;
44
+ /**
45
+ * URL parameters that will be used in the getCapabilities request
46
+ */
47
+ urlParameters: object;
48
+ /**
49
+ * URL parameters that will be added when requesting WMS capabilities
50
+ */
51
+ wmsUrlParameters: object;
52
+ /**
53
+ * URL parameters that will be added when requesting tiles
54
+ */
55
+ layerUrlParameters: object;
56
+ lngLat: LngLat;
57
+ idPrefix: string;
58
+ };
59
+
32
60
  /**
33
61
  * Loads a WMS getCapabilities xml document and adds a MlWmsLayer component for each layer that is
34
62
  * offered by the WMS.
@@ -37,21 +65,23 @@ const lngLatToMeters = function (lnglat, validate, accuracy = { enable: true, de
37
65
  *
38
66
  * @component
39
67
  */
40
- const MlWmsLoader = (props) => {
68
+ const MlWmsLoader = (props: MlWmsLoaderProps) => {
41
69
  // Use a useRef hook to reference the layer object to be able to access it later inside useEffect hooks
42
- const mapContext = useContext(MapContext);
43
- const { capabilities, error, setUrl, getFeatureInfoUrl, wmsUrl } = useWms({
70
+ const mapContext: MapContextType = useContext(MapContext);
71
+ const { capabilities, error, setUrl, getFeatureInfoUrl, wmsUrl }: any = useWms({
44
72
  url: undefined,
45
73
  urlParameters: props.urlParameters,
46
74
  });
75
+ let layerType : { visible: boolean, queryable: boolean, Name: string, Title: string, LatLonBoundingBox: Array<number>,
76
+ EX_GeographicBoundingBox: Array<number>, Abstract: any}
47
77
 
48
78
  const initializedRef = useRef(false);
49
- const mapRef = useRef(undefined);
79
+ const mapRef = useRef<MapLibreGlWrapper>();
50
80
  const componentId = useRef((props.idPrefix ? props.idPrefix : "MlWmsLoader-") + uuidv4());
51
- const [layers, setLayers] = useState([]);
81
+ const [layers, setLayers] = useState<Array<typeof layerType>>([]);
52
82
 
53
83
  const [featureInfoLngLat, setFeatureInfoLngLat] = useState(undefined);
54
- const [featureInfoContent, setFeatureInfoContent] = useState(undefined);
84
+ const [featureInfoContent, setFeatureInfoContent] = useState<string|undefined>(undefined);
55
85
 
56
86
  useEffect(() => {
57
87
  let _componentId = componentId.current;
@@ -79,9 +109,10 @@ const MlWmsLoader = (props) => {
79
109
 
80
110
  const getFeatureInfo = useCallback(
81
111
  (ev) => {
112
+ if(!mapRef.current) return;
82
113
  setFeatureInfoLngLat(undefined);
83
114
  setFeatureInfoContent(undefined);
84
- let _bounds = mapRef.current.getBounds();
115
+ let _bounds = mapRef.current.map.getBounds();
85
116
  let _sw = lngLatToMeters(_bounds._sw);
86
117
  let _ne = lngLatToMeters(_bounds._ne);
87
118
  let bbox = [_sw[0], _sw[1], _ne[0], _ne[1]];
@@ -96,13 +127,13 @@ const MlWmsLoader = (props) => {
96
127
  : "text/plain",
97
128
  FEATURE_COUNT: "10",
98
129
  LAYERS: layers
99
- .map((layer, idx) => (layer.visible && layer.queryable ? layer.Name : undefined))
130
+ .map((layer: typeof layerType) => (layer.visible && layer.queryable ? layer.Name : undefined))
100
131
  .filter((n) => n),
101
132
  QUERY_LAYERS: layers
102
- .map((layer, idx) => (layer.visible && layer.queryable ? layer.Name : undefined))
133
+ .map((layer: typeof layerType) => (layer.visible && layer.queryable ? layer.Name : undefined))
103
134
  .filter((n) => n),
104
- WIDTH: mapRef.current._container.clientWidth,
105
- HEIGHT: mapRef.current._container.clientHeight,
135
+ WIDTH: mapRef.current?.map._container.clientWidth,
136
+ HEIGHT: mapRef.current?.map._container.clientHeight,
106
137
  srs: "EPSG:3857",
107
138
  CRS: "EPSG:3857",
108
139
  version: "1.3.0",
@@ -113,7 +144,7 @@ const MlWmsLoader = (props) => {
113
144
  buffer: "50",
114
145
  };
115
146
 
116
- let _gfiUrl = getFeatureInfoUrl;
147
+ let _gfiUrl : string | undefined = getFeatureInfoUrl;
117
148
  let _gfiUrlParts;
118
149
  if (_gfiUrl?.indexOf?.("?") !== -1) {
119
150
  _gfiUrlParts = props.url.split("?");
@@ -126,7 +157,7 @@ const MlWmsLoader = (props) => {
126
157
  ..._getFeatureInfoUrlParams,
127
158
  };
128
159
  // create URLSearchParams object to assemble the URL Parameters
129
- let urlParams = new URLSearchParams(urlParamsObj);
160
+ let urlParams = new URLSearchParams(urlParamsObj.toString());
130
161
 
131
162
  fetch(props.url + "?" + urlParams.toString())
132
163
  .then((res) => {
@@ -151,9 +182,9 @@ const MlWmsLoader = (props) => {
151
182
 
152
183
  mapRef.current.on("click", _getFeatureInfo, componentId.current);
153
184
  return () => {
154
- mapRef.current?.off?.("click", _getFeatureInfo);
185
+ mapRef.current?.map.off?.("click", _getFeatureInfo);
155
186
  };
156
- }, [getFeatureInfoUrl]);
187
+ }, [getFeatureInfo]);
157
188
 
158
189
  useEffect(() => {
159
190
  if (!capabilities?.Service) return;
@@ -167,9 +198,9 @@ const MlWmsLoader = (props) => {
167
198
  "MlWmsLoader (" + capabilities.Service.Title + "): WGS 84/Pseudo-Mercator supported"
168
199
  );
169
200
 
170
- let _LatLonBoundingBox;
201
+ let _LatLonBoundingBox: Array<number> = [];
171
202
  setLayers(
172
- capabilities?.Capability?.Layer?.Layer.map((layer, idx) => {
203
+ capabilities?.Capability?.Layer?.Layer.map((layer: typeof layerType, idx: number) => {
173
204
  if (idx === 0) {
174
205
  _LatLonBoundingBox = layer.LatLonBoundingBox;
175
206
  if (!_LatLonBoundingBox) {
@@ -182,8 +213,8 @@ const MlWmsLoader = (props) => {
182
213
  );
183
214
 
184
215
  // zoom to extent of first layer
185
- if (mapRef.current && _LatLonBoundingBox?.length > 3) {
186
- mapRef.current.fitBounds([
216
+ if (mapRef.current && _LatLonBoundingBox.length > 3) {
217
+ mapRef.current.map.fitBounds([
187
218
  [_LatLonBoundingBox[0], _LatLonBoundingBox[1]],
188
219
  [_LatLonBoundingBox[2], _LatLonBoundingBox[3]],
189
220
  ]);
@@ -206,7 +237,7 @@ const MlWmsLoader = (props) => {
206
237
  {error && <p>{error}</p>}
207
238
  <h3 key="title">{capabilities?.Service?.Title}</h3>
208
239
  {console.log(componentId.current)}
209
- {capabilities?.Capability?.Layer?.Layer.map((layer, idx) => (
240
+ {capabilities?.Capability?.Layer?.Layer.map((idx: number) => (
210
241
  <MlLayer
211
242
  layerId={"Order-" + componentId.current + "-" + idx}
212
243
  key={componentId.current + "-" + idx}
@@ -219,7 +250,7 @@ const MlWmsLoader = (props) => {
219
250
  ))}
220
251
  <List dense key="layers">
221
252
  {wmsUrl &&
222
- layers?.map?.((layer, idx) => {
253
+ layers?.map?.((layer: typeof layerType, idx) => {
223
254
  return layer?.Name ? (
224
255
  <ListItem
225
256
  key={layer.Name + idx}
@@ -228,7 +259,7 @@ const MlWmsLoader = (props) => {
228
259
  edge="end"
229
260
  aria-label="toggle visibility"
230
261
  onClick={() => {
231
- let _layers = [...layers];
262
+ let _layers: Array<typeof layerType> = [...layers];
232
263
  _layers[idx].visible = !_layers[idx].visible;
233
264
  setLayers([..._layers]);
234
265
  }}
@@ -272,27 +303,4 @@ MlWmsLoader.defaultProps = {
272
303
  },
273
304
  };
274
305
 
275
- MlWmsLoader.propTypes = {
276
- /**
277
- * WMS URL
278
- */
279
- url: PropTypes.string.isRequired,
280
- /**
281
- * Id of the target MapLibre instance in mapContext
282
- */
283
- mapId: PropTypes.string,
284
- /**
285
- * URL parameters that will be used in the getCapabilities request
286
- */
287
- urlParameters: PropTypes.object,
288
- /**
289
- * URL parameters that will be added when requesting WMS capabilities
290
- */
291
- wmsUrlParameters: PropTypes.object,
292
- /**
293
- * URL parameters that will be added when requesting tiles
294
- */
295
- layerUrlParameters: PropTypes.object,
296
- };
297
-
298
306
  export default MlWmsLoader;
@@ -0,0 +1,26 @@
1
+
2
+ declare module "*.svg" {
3
+ const content: any;
4
+ export default content;
5
+ export { content as ReactComponent };
6
+ }
7
+ declare module "*.js" {
8
+ const content: any;
9
+ export default content;
10
+ }
11
+
12
+ //declare module '@mapcomponents/react-core';
13
+ type MapContextType= {
14
+ mapIds: [string?];
15
+ mapExists: Function;
16
+ maps: [];
17
+ map: any,
18
+ getMap: Function;
19
+ setMap: Function;
20
+ };
21
+
22
+ interface GeoJSON {
23
+ type: string,
24
+ features?: any
25
+ geometry?: any
26
+ }
@@ -0,0 +1,221 @@
1
+ import { useState, useEffect, useCallback, useRef } from "react";
2
+
3
+ import useMap, { useMapType } from "./useMap";
4
+
5
+ import { LayerSpecification } from "maplibre-gl";
6
+
7
+ import MapLibreGlWrapper from "../components/MapLibreMap/lib/MapLibreGlWrapper";
8
+
9
+ type useLayerType = {
10
+ map: MapLibreGlWrapper | undefined;
11
+ layer: LayerSpecification;
12
+ layerId: string;
13
+ componentId: string;
14
+ mapHook: useMapType;
15
+ };
16
+
17
+ interface useLayerProps {
18
+ mapId?: string;
19
+ layerId?: string;
20
+ idPrefix?: string;
21
+ insertBeforeLayer?: string;
22
+ insertBeforeFirstSymbolLayer?: boolean;
23
+ geojson?: object;
24
+ options: LayerSpecification;
25
+ onHover?: Function;
26
+ onClick?: Function;
27
+ onLeave?: Function;
28
+ }
29
+
30
+ const legalLayerTypes = [
31
+ "fill",
32
+ "line",
33
+ "symbol",
34
+ "circle",
35
+ "heatmap",
36
+ "fill-extrusion",
37
+ "raster",
38
+ "hillshade",
39
+ "background",
40
+ ];
41
+
42
+ function useLayer(props: useLayerProps): useLayerType {
43
+ const mapHook = useMap({
44
+ mapId: props.mapId,
45
+ waitForLayer: props.insertBeforeLayer,
46
+ });
47
+
48
+ const layerTypeRef = useRef<string>("");
49
+ const layerPaintConfRef = useRef<string>("");
50
+ const layerLayoutConfRef = useRef<string>("");
51
+
52
+ const [layer, setLayer] = useState<any>();
53
+
54
+ const initializedRef = useRef<boolean>(false);
55
+ const layerId = useRef(
56
+ props.layerId ||
57
+ (props.idPrefix ? props.idPrefix : "Layer-") + mapHook.componentId
58
+ );
59
+
60
+ const createLayer = useCallback(() => {
61
+ if (initializedRef.current || !mapHook.map) return;
62
+ initializedRef.current = true;
63
+
64
+ mapHook.map.addLayer(
65
+ {
66
+ ...props.options,
67
+ ...(props.geojson
68
+ ? {
69
+ source: {
70
+ type: "geojson",
71
+ data: props.geojson,
72
+ },
73
+ }
74
+ : {}),
75
+ id: layerId.current,
76
+ },
77
+ props.insertBeforeLayer
78
+ ? props.insertBeforeLayer
79
+ : props.insertBeforeFirstSymbolLayer
80
+ ? mapHook.map.firstSymbolLayer
81
+ : undefined,
82
+ mapHook.componentId
83
+ );
84
+
85
+ setLayer(mapHook.map.map.getLayer(layerId.current));
86
+
87
+ if (typeof props.onHover !== "undefined") {
88
+ mapHook.map.on(
89
+ "mousemove",
90
+ layerId.current,
91
+ props.onHover,
92
+ mapHook.componentId
93
+ );
94
+ }
95
+
96
+ if (typeof props.onClick !== "undefined") {
97
+ mapHook.map.on(
98
+ "click",
99
+ layerId.current,
100
+ props.onClick,
101
+ mapHook.componentId
102
+ );
103
+ }
104
+
105
+ if (typeof props.onLeave !== "undefined") {
106
+ mapHook.map.on(
107
+ "mouseleave",
108
+ layerId.current,
109
+ props.onLeave,
110
+ mapHook.componentId
111
+ );
112
+ }
113
+
114
+ layerPaintConfRef.current = JSON.stringify(props.options?.paint);
115
+ layerLayoutConfRef.current = JSON.stringify(props.options?.layout);
116
+ layerTypeRef.current = props.options.type;
117
+ }, [props, mapHook.map]);
118
+
119
+ useEffect(() => {
120
+ if (!mapHook.map) return;
121
+
122
+ if (
123
+ initializedRef.current &&
124
+ legalLayerTypes.indexOf(props.options.type) !== -1 &&
125
+ layerTypeRef.current &&
126
+ props.options.type !== layerTypeRef.current
127
+ ) {
128
+ // remove (cleanup) & reinitialize the layer if type has changed
129
+ cleanup();
130
+ } else if (
131
+ initializedRef.current &&
132
+ (legalLayerTypes.indexOf(props.options.type) === -1 ||
133
+ (legalLayerTypes.indexOf(props.options.type) !== -1 &&
134
+ props.options.type === layerTypeRef.current))
135
+ ) {
136
+ return;
137
+ }
138
+
139
+ createLayer();
140
+ }, [mapHook.map, props.options, createLayer]);
141
+
142
+ useEffect(() => {
143
+ if (
144
+ !initializedRef.current ||
145
+ !mapHook?.map?.map.getSource(layerId.current)
146
+ )
147
+ return;
148
+
149
+ // @ts-ignore
150
+ mapHook.map.map.getSource(layerId.current).setData(props.geojson);
151
+ }, [props.geojson, mapHook.map, props.options.type]);
152
+
153
+ useEffect(() => {
154
+ if (
155
+ !mapHook.map ||
156
+ !mapHook.map?.map?.getLayer?.(layerId.current) ||
157
+ !initializedRef.current
158
+ )
159
+ return;
160
+
161
+ var key;
162
+
163
+ let layoutString = JSON.stringify(props.options.layout);
164
+ if (props.options.layout && layoutString !== layerLayoutConfRef.current) {
165
+ let oldLayout = JSON.parse(layerLayoutConfRef.current);
166
+
167
+ for (key in props.options.layout) {
168
+ if (
169
+ props.options.layout?.[key] &&
170
+ props.options.layout[key] !== oldLayout[key]
171
+ ) {
172
+ mapHook.map.map.setLayoutProperty(
173
+ layerId.current,
174
+ key,
175
+ props.options.layout[key]
176
+ );
177
+ }
178
+ }
179
+ layerLayoutConfRef.current = layoutString;
180
+ }
181
+
182
+ let paintString = JSON.stringify(props.options.paint);
183
+ if (paintString !== layerPaintConfRef.current) {
184
+ let oldPaint = JSON.parse(layerPaintConfRef.current);
185
+ for (key in props.options.paint) {
186
+ if (
187
+ props.options.paint?.[key] &&
188
+ props.options.paint[key] !== oldPaint[key]
189
+ ) {
190
+ mapHook.map.map.setPaintProperty(
191
+ layerId.current,
192
+ key,
193
+ props.options.paint[key]
194
+ );
195
+ }
196
+ }
197
+ layerPaintConfRef.current = paintString;
198
+ }
199
+ }, [props.options, mapHook.map]);
200
+
201
+ const cleanup = () => {
202
+ initializedRef.current = false;
203
+ mapHook.cleanup();
204
+ };
205
+
206
+ useEffect(() => {
207
+ return () => {
208
+ cleanup();
209
+ };
210
+ }, []);
211
+
212
+ return {
213
+ map: mapHook.map,
214
+ layer: layer,
215
+ layerId: layerId.current,
216
+ componentId: mapHook.componentId,
217
+ mapHook: mapHook,
218
+ };
219
+ }
220
+
221
+ export default useLayer;
@@ -1,11 +1,30 @@
1
- import React, { useContext, useState, useEffect, useRef } from "react";
1
+ import {
2
+ useContext,
3
+ useState,
4
+ useEffect,
5
+ useRef,
6
+ MutableRefObject,
7
+ } from "react";
2
8
  import { v4 as uuidv4 } from "uuid";
9
+ // @ts-ignore
3
10
  import { MapContext } from "@mapcomponents/react-core";
4
11
  import useMapState from "./useMapState";
12
+ import MapLibreGlWrapper, {
13
+ LayerState,
14
+ } from "../components/MapLibreMap/lib/MapLibreGlWrapper";
5
15
 
6
- function useMap(props) {
16
+ type useMapType = {
17
+ map: MapLibreGlWrapper | undefined;
18
+ mapIsReady: boolean;
19
+ componentId: string;
20
+ layers: (LayerState | undefined)[];
21
+ cleanup: Function
22
+ };
23
+
24
+ function useMap(props: { mapId?: string; waitForLayer?: string }): useMapType {
7
25
  // Use a useRef hook to reference the layer object to be able to access it later inside useEffect hooks
8
- const mapContext = useContext(MapContext);
26
+ const mapContext: MapContextType = useContext(MapContext);
27
+ const [map, setMap] = useState();
9
28
 
10
29
  const mapState = useMapState({
11
30
  mapId: props.mapId,
@@ -20,23 +39,24 @@ function useMap(props) {
20
39
  });
21
40
 
22
41
  const initializedRef = useRef(false);
23
- const mapRef = useRef(undefined);
42
+ const mapRef: MutableRefObject<MapLibreGlWrapper | undefined> =
43
+ useRef(undefined);
24
44
 
25
45
  const componentId = useRef(uuidv4());
26
46
 
27
47
  const [mapIsReady, setMapIsReady] = useState(false);
28
48
 
29
- useEffect(() => {
30
- let _componentId = componentId.current;
49
+ const cleanup = () => {
50
+ if (mapRef.current) {
51
+ mapRef.current.cleanup(componentId.current);
52
+ mapRef.current = undefined;
53
+ }
54
+ initializedRef.current = false;
55
+ setMapIsReady(false);
56
+ };
31
57
 
32
- return () => {
33
- if (mapRef.current) {
34
- mapRef.current.cleanup(_componentId);
35
- mapRef.current = undefined;
36
- }
37
- initializedRef.current = false;
38
- setMapIsReady(false);
39
- };
58
+ useEffect(() => {
59
+ return cleanup;
40
60
  }, []);
41
61
 
42
62
  useEffect(() => {
@@ -47,7 +67,7 @@ function useMap(props) {
47
67
  if (props.waitForLayer) {
48
68
  let layerFound = false;
49
69
 
50
- mapState?.layers?.forEach((layer) => {
70
+ mapState?.layers?.forEach((layer: any) => {
51
71
  if (layer.id === props.waitForLayer) {
52
72
  layerFound = true;
53
73
  }
@@ -60,15 +80,26 @@ function useMap(props) {
60
80
  // initialize the layer and add it to the MapLibre-gl instance or do something else with it
61
81
  initializedRef.current = true;
62
82
  mapRef.current = mapContext.getMap(props.mapId);
83
+ // @ts-ignore
84
+ setMap(mapRef.current);
63
85
  setMapIsReady(true);
64
- }, [mapContext.mapIds, mapState.layers, mapContext, props.waitForLayer, props.mapId]);
86
+ }, [
87
+ mapContext.mapIds,
88
+ mapState.layers,
89
+ mapContext,
90
+ props.waitForLayer,
91
+ props.mapId,
92
+ ]);
65
93
 
66
94
  return {
67
- map: mapRef.current,
95
+ map: map,
68
96
  mapIsReady,
69
97
  componentId: componentId.current,
70
98
  layers: mapState.layers,
99
+ cleanup
71
100
  };
72
101
  }
73
102
 
74
103
  export default useMap;
104
+
105
+ export type {useMapType};