@mapcomponents/react-maplibre 0.1.57 → 0.1.59

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 (276) hide show
  1. package/.eslintignore +11 -0
  2. package/.eslintrc.js +20 -0
  3. package/.github/workflows/check-formatting.yml +46 -0
  4. package/.prettierignore +11 -0
  5. package/.prettierrc.json +6 -0
  6. package/CHANGELOG.md +18 -0
  7. package/coverage/clover.xml +229 -77
  8. package/coverage/coverage-final.json +43 -37
  9. package/coverage/lcov-report/index.html +65 -20
  10. package/coverage/lcov-report/src/components/MapLibreMap/MapLibreMap.tsx.html +83 -83
  11. package/coverage/lcov-report/src/components/MapLibreMap/index.html +1 -1
  12. package/coverage/lcov-report/src/components/MlCenterPosition/MlCenterPosition.tsx.html +66 -66
  13. package/coverage/lcov-report/src/components/MlCenterPosition/index.html +1 -1
  14. package/coverage/lcov-report/src/components/MlCreatePdfButton/MlCreatePdfButton.tsx.html +30 -30
  15. package/coverage/lcov-report/src/components/MlCreatePdfButton/index.html +1 -1
  16. package/coverage/lcov-report/src/components/MlCreatePdfForm/MlCreatePdfForm.tsx.html +202 -0
  17. package/coverage/lcov-report/src/components/MlCreatePdfForm/index.html +116 -0
  18. package/coverage/lcov-report/src/components/MlFeatureEditor/MlFeatureEditor.tsx.html +99 -99
  19. package/coverage/lcov-report/src/components/MlFeatureEditor/index.html +1 -1
  20. package/coverage/lcov-report/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.tsx.html +66 -66
  21. package/coverage/lcov-report/src/components/MlFillExtrusionLayer/index.html +1 -1
  22. package/coverage/lcov-report/src/components/MlFollowGps/MlFollowGps.tsx.html +221 -221
  23. package/coverage/lcov-report/src/components/MlFollowGps/index.html +1 -1
  24. package/coverage/lcov-report/src/components/MlGPXViewer/MlGPXViewer.tsx.html +308 -308
  25. package/coverage/lcov-report/src/components/MlGPXViewer/gpxConverter.js.html +497 -497
  26. package/coverage/lcov-report/src/components/MlGPXViewer/index.html +1 -1
  27. package/coverage/lcov-report/src/components/MlGeoJsonLayer/MlGeoJsonLayer.tsx.html +85 -85
  28. package/coverage/lcov-report/src/components/MlGeoJsonLayer/index.html +1 -1
  29. package/coverage/lcov-report/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.tsx.html +469 -0
  30. package/coverage/lcov-report/src/components/MlGeojsonLayerWithSource/index.html +116 -0
  31. package/coverage/lcov-report/src/components/MlImageMarkerLayer/MlImageMarkerLayer.tsx.html +140 -140
  32. package/coverage/lcov-report/src/components/MlImageMarkerLayer/index.html +1 -1
  33. package/coverage/lcov-report/src/components/MlLayer/MlLayer.tsx.html +37 -37
  34. package/coverage/lcov-report/src/components/MlLayer/index.html +1 -1
  35. package/coverage/lcov-report/src/components/MlLayerMagnify/MlLayerMagnify.tsx.html +179 -179
  36. package/coverage/lcov-report/src/components/MlLayerMagnify/index.html +1 -1
  37. package/coverage/lcov-report/src/components/MlLayerSwipe/MlLayerSwipe.tsx.html +113 -113
  38. package/coverage/lcov-report/src/components/MlLayerSwipe/index.html +1 -1
  39. package/coverage/lcov-report/src/components/MlLayerSwitcher/MlLayerSwitcher.js.html +181 -181
  40. package/coverage/lcov-report/src/components/MlLayerSwitcher/components/LayerBox.js.html +58 -58
  41. package/coverage/lcov-report/src/components/MlLayerSwitcher/components/index.html +1 -1
  42. package/coverage/lcov-report/src/components/MlLayerSwitcher/index.html +1 -1
  43. package/coverage/lcov-report/src/components/MlMarker/MlMarker.tsx.html +108 -108
  44. package/coverage/lcov-report/src/components/MlMarker/index.html +1 -1
  45. package/coverage/lcov-report/src/components/MlMeasureTool/MlMeasureTool.tsx.html +39 -39
  46. package/coverage/lcov-report/src/components/MlMeasureTool/index.html +1 -1
  47. package/coverage/lcov-report/src/components/MlNavigationCompass/MlNavigationCompass.tsx.html +183 -183
  48. package/coverage/lcov-report/src/components/MlNavigationCompass/index.html +1 -1
  49. package/coverage/lcov-report/src/components/MlNavigationTools/MlNavigationTools.tsx.html +163 -163
  50. package/coverage/lcov-report/src/components/MlNavigationTools/index.html +1 -1
  51. package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.js.html +50 -50
  52. package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.stories_.js.html +30 -30
  53. package/coverage/lcov-report/src/components/MlOsmLayer/index.html +1 -1
  54. package/coverage/lcov-report/src/components/MlScaleReference/MlScaleReference.js.html +83 -83
  55. package/coverage/lcov-report/src/components/MlScaleReference/index.html +1 -1
  56. package/coverage/lcov-report/src/components/MlShareMapState/MlShareMapState.js.html +204 -204
  57. package/coverage/lcov-report/src/components/MlShareMapState/index.html +1 -1
  58. package/coverage/lcov-report/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.js.html +180 -180
  59. package/coverage/lcov-report/src/components/MlSpatialElevationProfile/index.html +1 -1
  60. package/coverage/lcov-report/src/components/MlThreeJsLayer/MlThreeJsLayer.js.html +163 -163
  61. package/coverage/lcov-report/src/components/MlThreeJsLayer/index.html +1 -1
  62. package/coverage/lcov-report/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.tsx.html +136 -136
  63. package/coverage/lcov-report/src/components/MlTransitionGeoJsonLayer/index.html +1 -1
  64. package/coverage/lcov-report/src/components/MlUseMapDebugger/MlUseMapDebugger.js.html +53 -53
  65. package/coverage/lcov-report/src/components/MlUseMapDebugger/index.html +1 -1
  66. package/coverage/lcov-report/src/components/MlVectorTileLayer/MlVectorTileLayer.tsx.html +123 -123
  67. package/coverage/lcov-report/src/components/MlVectorTileLayer/index.html +1 -1
  68. package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.js.html +35 -35
  69. package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/index.html +1 -1
  70. package/coverage/lcov-report/src/components/MlWmsLayer/MlWmsLayer.tsx.html +155 -155
  71. package/coverage/lcov-report/src/components/MlWmsLayer/index.html +1 -1
  72. package/coverage/lcov-report/src/components/MlWmsLoader/MlWmsLoader.tsx.html +255 -255
  73. package/coverage/lcov-report/src/components/MlWmsLoader/index.html +1 -1
  74. package/coverage/lcov-report/src/contexts/MapContext.tsx.html +66 -66
  75. package/coverage/lcov-report/src/contexts/SimpleDataContext.js.html +1 -1
  76. package/coverage/lcov-report/src/contexts/SimpleDataProvider.js.html +48 -48
  77. package/coverage/lcov-report/src/contexts/index.html +1 -1
  78. package/coverage/lcov-report/src/hooks/exportMap/index.html +131 -0
  79. package/coverage/lcov-report/src/hooks/exportMap/index.ts.html +175 -0
  80. package/coverage/lcov-report/src/hooks/exportMap/lib.ts.html +646 -0
  81. package/coverage/lcov-report/src/hooks/index.html +48 -18
  82. package/coverage/lcov-report/src/hooks/useLayer.ts.html +230 -188
  83. package/coverage/lcov-report/src/hooks/useLayerEvent.js.html +232 -0
  84. package/coverage/lcov-report/src/hooks/useMap.ts.html +72 -69
  85. package/coverage/lcov-report/src/hooks/useMapState.ts.html +145 -145
  86. package/coverage/lcov-report/src/hooks/useSource.ts.html +337 -0
  87. package/coverage/lcov-report/src/hooks/useWms.js.html +72 -72
  88. package/coverage/lcov-report/src/index.html +1 -1
  89. package/coverage/lcov-report/src/index.ts.html +11 -2
  90. package/coverage/lcov.info +448 -151
  91. package/dist/components/MlCreatePdfForm/MlCreatePdfForm.d.ts +24 -0
  92. package/dist/components/MlCreatePdfForm/MlCreatePdfForm.stories.d.ts +13 -0
  93. package/dist/components/MlCreatePdfForm/lib/PdfContext.d.ts +21 -0
  94. package/dist/components/MlCreatePdfForm/lib/PdfForm.d.ts +10 -0
  95. package/dist/components/MlCreatePdfForm/lib/PdfPreview.d.ts +13 -0
  96. package/dist/components/MlCreatePdfForm/lib/pdf.templates.d.ts +11 -0
  97. package/dist/components/MlFeatureEditor/lib/create_vertex.d.ts +1 -1
  98. package/dist/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.d.ts +22 -0
  99. package/dist/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.stories.d.ts +10 -0
  100. package/dist/components/MlLayerSwipe/MlLayerSwipe.d.ts +1 -1
  101. package/dist/components/MlWmsLayer/MlWmsLayer.d.ts +2 -2
  102. package/dist/decorators/MapContextDecoratorHooks.d.ts +2 -0
  103. package/dist/hooks/exportMap/index.d.ts +11 -0
  104. package/dist/hooks/exportMap/lib.d.ts +36 -0
  105. package/dist/hooks/useLayer.d.ts +6 -5
  106. package/dist/hooks/useLayerEvent.d.ts +2 -0
  107. package/dist/hooks/useMap.d.ts +1 -1
  108. package/dist/hooks/useMapState.stories.d.ts +2 -2
  109. package/dist/hooks/useSource.d.ts +17 -0
  110. package/dist/hooks/useSources.stories.d.ts +13 -0
  111. package/dist/index.d.ts +3 -0
  112. package/dist/index.esm.js +1055 -315
  113. package/dist/index.esm.js.map +1 -1
  114. package/eslintErrorTest.js +10 -0
  115. package/package.json +7 -1
  116. package/public/thumbnails/MlCreatePdfForm.png +0 -0
  117. package/src/components/MapLibreMap/MapLibreMap.stories.js +72 -72
  118. package/src/components/MapLibreMap/MapLibreMap.test.js +60 -60
  119. package/src/components/MapLibreMap/MapLibreMap.tsx +82 -82
  120. package/src/components/MapLibreMap/lib/MapLibreGlWrapper.test.js +343 -343
  121. package/src/components/MapLibreMap/lib/MapLibreGlWrapper.ts +619 -619
  122. package/src/components/MlBasicComponent.js +25 -25
  123. package/src/components/MlCenterPosition/MlCenterPosition.stories.js +6 -6
  124. package/src/components/MlCenterPosition/MlCenterPosition.tsx +65 -65
  125. package/src/components/MlComponentTemplate/MlComponentTemplate.stories.js +5 -5
  126. package/src/components/MlComponentTemplate/MlComponentTemplate.tsx +23 -23
  127. package/src/components/MlCreatePdfButton/{MlCreatePdfButton.meta.json → MlCreatePdfButton.meta_.json} +0 -0
  128. package/src/components/MlCreatePdfButton/MlCreatePdfButton.stories.js +16 -16
  129. package/src/components/MlCreatePdfButton/MlCreatePdfButton.tsx +29 -29
  130. package/src/components/MlCreatePdfButton/lib/createPdf.ts +175 -175
  131. package/src/components/MlCreatePdfButton/lib/nominatimMap.ts +51 -51
  132. package/src/components/MlCreatePdfForm/MlCreatePdfForm.doc.de.md +3 -0
  133. package/src/components/MlCreatePdfForm/MlCreatePdfForm.meta.json +15 -0
  134. package/src/components/MlCreatePdfForm/MlCreatePdfForm.stories.tsx +152 -0
  135. package/src/components/MlCreatePdfForm/MlCreatePdfForm.tsx +39 -0
  136. package/src/components/MlCreatePdfForm/lib/PdfContext.tsx +53 -0
  137. package/src/components/MlCreatePdfForm/lib/PdfForm.tsx +161 -0
  138. package/src/components/MlCreatePdfForm/lib/PdfPreview.tsx +399 -0
  139. package/src/components/MlCreatePdfForm/lib/pdf.templates.ts +82 -0
  140. package/src/components/MlFeatureEditor/MlFeatureEditor.stories.js +55 -55
  141. package/src/components/MlFeatureEditor/MlFeatureEditor.test.js +105 -105
  142. package/src/components/MlFeatureEditor/MlFeatureEditor.tsx +119 -119
  143. package/src/components/MlFeatureEditor/custom-direct-select-mode.js +208 -208
  144. package/src/components/MlFeatureEditor/custom-polygon-mode.js +148 -148
  145. package/src/components/MlFeatureEditor/custom-select-mode.js +314 -314
  146. package/src/components/MlFeatureEditor/lib/common_selectors.js +34 -34
  147. package/src/components/MlFeatureEditor/lib/constants.js +61 -61
  148. package/src/components/MlFeatureEditor/lib/constrain_feature_movement.js +51 -51
  149. package/src/components/MlFeatureEditor/lib/create_midpoint.js +30 -30
  150. package/src/components/MlFeatureEditor/lib/create_supplementary_points.js +82 -82
  151. package/src/components/MlFeatureEditor/lib/create_vertex.js +16 -16
  152. package/src/components/MlFeatureEditor/lib/double_click_zoom.js +23 -23
  153. package/src/components/MlFeatureEditor/lib/euclidean_distance.js +3 -3
  154. package/src/components/MlFeatureEditor/lib/features_at.js +23 -23
  155. package/src/components/MlFeatureEditor/lib/get_features_and_set_cursor.js +15 -15
  156. package/src/components/MlFeatureEditor/lib/is_click.js +8 -8
  157. package/src/components/MlFeatureEditor/lib/is_event_at_coordinates.js +2 -2
  158. package/src/components/MlFeatureEditor/lib/is_tap.js +6 -6
  159. package/src/components/MlFeatureEditor/lib/map_event_to_bounding_box.js +4 -4
  160. package/src/components/MlFeatureEditor/lib/mode_handler.js +105 -105
  161. package/src/components/MlFeatureEditor/lib/mouse_event_point.js +5 -5
  162. package/src/components/MlFeatureEditor/lib/move_features.js +33 -33
  163. package/src/components/MlFeatureEditor/lib/sort_features.js +25 -25
  164. package/src/components/MlFeatureEditor/lib/string_set.js +36 -36
  165. package/src/components/MlFeatureEditor/lib/string_sets_are_equal.js +2 -2
  166. package/src/components/MlFeatureEditor/lib/theme.js +230 -230
  167. package/src/components/MlFeatureEditor/lib/to_dense_array.js +1 -1
  168. package/src/components/MlFeatureEditor/lib/utils.js +40 -40
  169. package/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.stories.js +9 -9
  170. package/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.test.js +4 -4
  171. package/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.tsx +65 -65
  172. package/src/components/MlFollowGps/MlFollowGps.stories.js +6 -6
  173. package/src/components/MlFollowGps/MlFollowGps.test.js +44 -44
  174. package/src/components/MlFollowGps/MlFollowGps.tsx +220 -220
  175. package/src/components/MlGPXViewer/MlGPXViewer.stories.js +15 -15
  176. package/src/components/MlGPXViewer/MlGPXViewer.test.js +12 -12
  177. package/src/components/MlGPXViewer/MlGPXViewer.tsx +345 -345
  178. package/src/components/MlGPXViewer/gpxConverter.js +496 -496
  179. package/src/components/MlGPXViewer/util/GeoJsonContext.ts +4 -4
  180. package/src/components/MlGPXViewer/util/GeoJsonProvider.tsx +16 -16
  181. package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.stories.js +34 -34
  182. package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.test.js +8 -8
  183. package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.tsx +84 -84
  184. package/src/components/MlGeoJsonLayer/util/getDefaultLayerTypeByGeometry.ts +21 -21
  185. package/src/components/MlGeoJsonLayer/util/getDefaultPaintPropsByType.ts +27 -27
  186. package/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.doc.de.md +3 -0
  187. package/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.meta_.json +15 -0
  188. package/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.stories.js +19 -0
  189. package/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.tsx +128 -0
  190. package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.stories.js +28 -28
  191. package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.test.js +8 -8
  192. package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.tsx +162 -162
  193. package/src/components/MlLayer/MlLayer.stories.js +5 -5
  194. package/src/components/MlLayer/MlLayer.test.js +86 -86
  195. package/src/components/MlLayer/MlLayer.tsx +36 -36
  196. package/src/components/MlLayerMagnify/MlLayerMagnify.stories.js +21 -21
  197. package/src/components/MlLayerMagnify/MlLayerMagnify.test.js +54 -54
  198. package/src/components/MlLayerMagnify/MlLayerMagnify.tsx +201 -201
  199. package/src/components/MlLayerSwipe/MlLayerSwipe.stories.js +20 -20
  200. package/src/components/MlLayerSwipe/MlLayerSwipe.test.js +54 -54
  201. package/src/components/MlLayerSwipe/MlLayerSwipe.tsx +130 -130
  202. package/src/components/MlLayerSwitcher/MlLayerSwitcher.js +194 -194
  203. package/src/components/MlLayerSwitcher/MlLayerSwitcher.stories.js +85 -85
  204. package/src/components/MlLayerSwitcher/components/LayerBox.js +57 -57
  205. package/src/components/MlMarker/MlMarker.stories.js +7 -7
  206. package/src/components/MlMarker/MlMarker.tsx +119 -119
  207. package/src/components/MlMeasureTool/MlMeasureTool.stories.js +64 -64
  208. package/src/components/MlMeasureTool/MlMeasureTool.tsx +38 -38
  209. package/src/components/MlNavigationCompass/MlNavigationCompass.stories.js +45 -45
  210. package/src/components/MlNavigationCompass/MlNavigationCompass.test.js +40 -40
  211. package/src/components/MlNavigationCompass/MlNavigationCompass.tsx +192 -192
  212. package/src/components/MlNavigationTools/MlNavigationTools.stories.js +18 -18
  213. package/src/components/MlNavigationTools/MlNavigationTools.tsx +173 -173
  214. package/src/components/MlOsmLayer/MlOsmLayer.js +49 -49
  215. package/src/components/MlOsmLayer/MlOsmLayer.stories_.js +29 -29
  216. package/src/components/MlOsmLayer/MlOsmLayer.test.js +8 -8
  217. package/src/components/MlScaleReference/MlScaleReference.js +82 -82
  218. package/src/components/MlScaleReference/MlScaleReference.stories.js +27 -27
  219. package/src/components/MlShareMapState/MlShareMapState.js +203 -203
  220. package/src/components/MlShareMapState/MlShareMapState.stories.js +68 -68
  221. package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.js +201 -201
  222. package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.stories.js +35 -35
  223. package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.test.js +8 -8
  224. package/src/components/MlThreeJsLayer/MlThreeJsLayer.js +186 -186
  225. package/src/components/MlThreeJsLayer/MlThreeJsLayer.stories.js +21 -21
  226. package/src/components/MlThreeJsLayer/MlThreeJsLayer.test.js +24 -24
  227. package/src/components/MlThreeJsLayer/lib/GLTFLoader.js +3327 -3327
  228. package/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.stories.js +31 -30
  229. package/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.test.js +8 -8
  230. package/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.tsx +146 -146
  231. package/src/components/MlTransitionGeoJsonLayer/util/transitionFunctions.js +207 -207
  232. package/src/components/MlUseMapDebugger/MlUseMapDebugger.js +52 -52
  233. package/src/components/MlUseMapDebugger/MlUseMapDebugger.stories.js +13 -13
  234. package/src/components/MlVectorTileLayer/MlVectorTileLayer.stories.js +27 -27
  235. package/src/components/MlVectorTileLayer/MlVectorTileLayer.test.js +27 -27
  236. package/src/components/MlVectorTileLayer/MlVectorTileLayer.tsx +137 -137
  237. package/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.js +34 -34
  238. package/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.stories.js +7 -7
  239. package/src/components/MlWmsLayer/MlWmsLayer.stories.js +26 -26
  240. package/src/components/MlWmsLayer/MlWmsLayer.test.js +8 -8
  241. package/src/components/MlWmsLayer/MlWmsLayer.tsx +167 -167
  242. package/src/components/MlWmsLoader/MlWmsLoader.stories.js +27 -27
  243. package/src/components/MlWmsLoader/MlWmsLoader.tsx +254 -254
  244. package/src/contexts/MapComponentsProvider.test.js +229 -229
  245. package/src/contexts/MapContext.tsx +65 -65
  246. package/src/contexts/SimpleDataProvider.js +47 -47
  247. package/src/contexts/SimpleDataProvider.test.js +29 -29
  248. package/src/custom.d.tsx +14 -14
  249. package/src/decorators/MapContextDecorator.js +22 -22
  250. package/src/decorators/MapContextDecoratorHooks.js +34 -0
  251. package/src/decorators/MultiMapContextDecorator.js +63 -63
  252. package/src/decorators/NoNavToolsDecorator.js +17 -17
  253. package/src/decorators/ThemeWrapper.jsx +1 -1
  254. package/src/hooks/assets/pointWG.json +13 -0
  255. package/src/hooks/exportMap/index.ts +30 -0
  256. package/src/hooks/exportMap/lib.ts +187 -0
  257. package/src/hooks/useLayer.test.js +188 -188
  258. package/src/hooks/useLayer.ts +194 -180
  259. package/src/hooks/useLayerEvent.js +49 -0
  260. package/src/hooks/useMap.ts +67 -66
  261. package/src/hooks/useMapState.stories.js +78 -78
  262. package/src/hooks/useMapState.ts +161 -161
  263. package/src/hooks/useSource.ts +84 -0
  264. package/src/hooks/useSources.stories.js +232 -0
  265. package/src/hooks/useWms.js +71 -71
  266. package/src/index.ts +3 -0
  267. package/src/setupTests.js +86 -86
  268. package/src/ui_components/ImageLoader.js +62 -62
  269. package/src/ui_components/Legend.js +34 -34
  270. package/src/ui_components/LoadingOverlay.js +29 -29
  271. package/src/ui_components/LoadingOverlayContext.js +68 -68
  272. package/src/ui_components/Sidebar.js +80 -80
  273. package/src/ui_components/Tooltip.js +9 -9
  274. package/src/ui_components/TopToolbar.js +23 -23
  275. package/src/util/layerRemovalTest.js +111 -111
  276. package/src/util/sourceRemovalTest.js +103 -103
@@ -19,41 +19,41 @@ import MapLibreGlWrapper from "../MapLibreMap/lib/MapLibreGlWrapper";
19
19
 
20
20
  var originShift = (2 * Math.PI * 6378137) / 2.0;
21
21
  const lngLatToMeters = function (lnglat: LngLat, accuracy = { enable: true, decimal: 1 }) {
22
- var lng = lnglat.lng;
23
- var lat = lnglat.lat;
24
- var x = (lng * originShift) / 180.0;
25
- var y = Math.log(Math.tan(((90 + lat) * Math.PI) / 360.0)) / (Math.PI / 180.0);
26
- y = (y * originShift) / 180.0;
27
- if (accuracy.enable) {
28
- x = Number(x.toFixed(accuracy.decimal));
29
- y = Number(y.toFixed(accuracy.decimal));
30
- }
31
- return [x, y];
22
+ var lng = lnglat.lng;
23
+ var lat = lnglat.lat;
24
+ var x = (lng * originShift) / 180.0;
25
+ var y = Math.log(Math.tan(((90 + lat) * Math.PI) / 360.0)) / (Math.PI / 180.0);
26
+ y = (y * originShift) / 180.0;
27
+ if (accuracy.enable) {
28
+ x = Number(x.toFixed(accuracy.decimal));
29
+ y = Number(y.toFixed(accuracy.decimal));
30
+ }
31
+ return [x, y];
32
32
  };
33
33
 
34
34
  interface MlWmsLoaderProps {
35
- /**
36
- * WMS URL
37
- */
38
- url: string;
39
- /**
40
- * Id of the target MapLibre instance in mapContext
41
- */
42
- mapId: string;
43
- /**
44
- * URL parameters that will be used in the getCapabilities request
45
- */
46
- urlParameters: object;
47
- /**
48
- * URL parameters that will be added when requesting WMS capabilities
49
- */
50
- wmsUrlParameters: object;
51
- /**
52
- * URL parameters that will be added when requesting tiles
53
- */
54
- layerUrlParameters: object;
55
- lngLat: LngLat;
56
- idPrefix: string;
35
+ /**
36
+ * WMS URL
37
+ */
38
+ url: string;
39
+ /**
40
+ * Id of the target MapLibre instance in mapContext
41
+ */
42
+ mapId: string;
43
+ /**
44
+ * URL parameters that will be used in the getCapabilities request
45
+ */
46
+ urlParameters: object;
47
+ /**
48
+ * URL parameters that will be added when requesting WMS capabilities
49
+ */
50
+ wmsUrlParameters: object;
51
+ /**
52
+ * URL parameters that will be added when requesting tiles
53
+ */
54
+ layerUrlParameters: object;
55
+ lngLat: LngLat;
56
+ idPrefix: string;
57
57
  }
58
58
 
59
59
  /**
@@ -65,253 +65,253 @@ interface MlWmsLoaderProps {
65
65
  * @component
66
66
  */
67
67
  const MlWmsLoader = (props: MlWmsLoaderProps) => {
68
- // Use a useRef hook to reference the layer object to be able to access it later inside useEffect hooks
69
- const mapContext: MapContextType = useContext(MapContext);
70
- const { capabilities, error, setUrl, getFeatureInfoUrl, wmsUrl }: any = useWms({
71
- url: undefined,
72
- urlParameters: props.urlParameters,
73
- });
74
- let layerType: {
75
- visible: boolean;
76
- queryable: boolean;
77
- Name: string;
78
- Title: string;
79
- LatLonBoundingBox: Array<number>;
80
- EX_GeographicBoundingBox: Array<number>;
81
- Abstract: any;
82
- };
68
+ // Use a useRef hook to reference the layer object to be able to access it later inside useEffect hooks
69
+ const mapContext: MapContextType = useContext(MapContext);
70
+ const { capabilities, error, setUrl, getFeatureInfoUrl, wmsUrl }: any = useWms({
71
+ url: undefined,
72
+ urlParameters: props.urlParameters,
73
+ });
74
+ let layerType: {
75
+ visible: boolean;
76
+ queryable: boolean;
77
+ Name: string;
78
+ Title: string;
79
+ LatLonBoundingBox: Array<number>;
80
+ EX_GeographicBoundingBox: Array<number>;
81
+ Abstract: any;
82
+ };
83
83
 
84
- const initializedRef = useRef(false);
85
- const mapRef = useRef<MapLibreGlWrapper>();
86
- const componentId = useRef((props.idPrefix ? props.idPrefix : "MlWmsLoader-") + uuidv4());
87
- const [layers, setLayers] = useState<Array<typeof layerType>>([]);
84
+ const initializedRef = useRef(false);
85
+ const mapRef = useRef<MapLibreGlWrapper>();
86
+ const componentId = useRef((props.idPrefix ? props.idPrefix : "MlWmsLoader-") + uuidv4());
87
+ const [layers, setLayers] = useState<Array<typeof layerType>>([]);
88
88
 
89
- const [featureInfoLngLat, setFeatureInfoLngLat] = useState<{lng:number,lat:number} | undefined>();
90
- const [featureInfoContent, setFeatureInfoContent] = useState<string | undefined>(undefined);
89
+ const [featureInfoLngLat, setFeatureInfoLngLat] = useState<{lng:number,lat:number} | undefined>();
90
+ const [featureInfoContent, setFeatureInfoContent] = useState<string | undefined>(undefined);
91
91
 
92
- useEffect(() => {
93
- let _componentId = componentId.current;
92
+ useEffect(() => {
93
+ let _componentId = componentId.current;
94
94
 
95
- return () => {
96
- // This is the cleanup function, it is called when this react component is removed from react-dom
97
- // try to remove anything this component has added to the MapLibre-gl instance
98
- // e.g.: remove the layer
99
- // mapContext.getMap(props.mapId).removeLayer(layerRef.current);
100
- // check for the existence of map.style before calling getLayer or getSource
95
+ return () => {
96
+ // This is the cleanup function, it is called when this react component is removed from react-dom
97
+ // try to remove anything this component has added to the MapLibre-gl instance
98
+ // e.g.: remove the layer
99
+ // mapContext.getMap(props.mapId).removeLayer(layerRef.current);
100
+ // check for the existence of map.style before calling getLayer or getSource
101
101
 
102
- if (mapRef.current) {
103
- mapRef.current.cleanup(_componentId);
104
- mapRef.current = undefined;
105
- }
106
- initializedRef.current = false;
107
- };
108
- }, []);
102
+ if (mapRef.current) {
103
+ mapRef.current.cleanup(_componentId);
104
+ mapRef.current = undefined;
105
+ }
106
+ initializedRef.current = false;
107
+ };
108
+ }, []);
109
109
 
110
- useEffect(() => {
111
- if (!initializedRef.current) return;
110
+ useEffect(() => {
111
+ if (!initializedRef.current) return;
112
112
 
113
- setUrl(props.url);
114
- }, [props.url]);
113
+ setUrl(props.url);
114
+ }, [props.url]);
115
115
 
116
- const getFeatureInfo = useCallback(
117
- (ev) => {
118
- if (!mapRef.current) return;
119
- setFeatureInfoLngLat(undefined);
120
- setFeatureInfoContent(undefined);
121
- let _bounds = mapRef.current.map.getBounds();
122
- let _sw = lngLatToMeters(_bounds._sw);
123
- let _ne = lngLatToMeters(_bounds._ne);
124
- let bbox = [_sw[0], _sw[1], _ne[0], _ne[1]];
125
- let _getFeatureInfoUrlParams = {
126
- REQUEST: "GetFeatureInfo",
116
+ const getFeatureInfo = useCallback(
117
+ (ev) => {
118
+ if (!mapRef.current) return;
119
+ setFeatureInfoLngLat(undefined);
120
+ setFeatureInfoContent(undefined);
121
+ let _bounds = mapRef.current.map.getBounds();
122
+ let _sw = lngLatToMeters(_bounds._sw);
123
+ let _ne = lngLatToMeters(_bounds._ne);
124
+ let bbox = [_sw[0], _sw[1], _ne[0], _ne[1]];
125
+ let _getFeatureInfoUrlParams = {
126
+ REQUEST: "GetFeatureInfo",
127
127
 
128
- BBOX: bbox.join(","),
129
- SERVICE: "WMS",
130
- INFO_FORMAT:
131
- capabilities?.Capability?.Request?.GetFeatureInfo.Format.indexOf("text/html") !== -1
132
- ? "text/html"
133
- : "text/plain",
134
- FEATURE_COUNT: "10",
135
- LAYERS: layers
136
- .map((layer: typeof layerType) =>
137
- layer.visible && layer.queryable ? layer.Name : undefined
138
- )
139
- .filter((n) => n),
140
- QUERY_LAYERS: layers
141
- .map((layer: typeof layerType) =>
142
- layer.visible && layer.queryable ? layer.Name : undefined
143
- )
144
- .filter((n) => n),
145
- WIDTH: mapRef.current?.map._container.clientWidth,
146
- HEIGHT: mapRef.current?.map._container.clientHeight,
147
- srs: "EPSG:3857",
148
- CRS: "EPSG:3857",
149
- version: "1.3.0",
150
- X: ev.point.x,
151
- Y: ev.point.y,
152
- I: ev.point.x,
153
- J: ev.point.y,
154
- buffer: "50",
155
- };
128
+ BBOX: bbox.join(","),
129
+ SERVICE: "WMS",
130
+ INFO_FORMAT:
131
+ capabilities?.Capability?.Request?.GetFeatureInfo.Format.indexOf("text/html") !== -1
132
+ ? "text/html"
133
+ : "text/plain",
134
+ FEATURE_COUNT: "10",
135
+ LAYERS: layers
136
+ .map((layer: typeof layerType) =>
137
+ layer.visible && layer.queryable ? layer.Name : undefined
138
+ )
139
+ .filter((n) => n),
140
+ QUERY_LAYERS: layers
141
+ .map((layer: typeof layerType) =>
142
+ layer.visible && layer.queryable ? layer.Name : undefined
143
+ )
144
+ .filter((n) => n),
145
+ WIDTH: mapRef.current?.map._container.clientWidth,
146
+ HEIGHT: mapRef.current?.map._container.clientHeight,
147
+ srs: "EPSG:3857",
148
+ CRS: "EPSG:3857",
149
+ version: "1.3.0",
150
+ X: ev.point.x,
151
+ Y: ev.point.y,
152
+ I: ev.point.x,
153
+ J: ev.point.y,
154
+ buffer: "50",
155
+ };
156
156
 
157
- let _gfiUrl: string | undefined = getFeatureInfoUrl;
158
- let _gfiUrlParts;
159
- if (_gfiUrl?.indexOf?.("?") !== -1) {
160
- _gfiUrlParts = props.url.split("?");
161
- _gfiUrl = _gfiUrlParts[0];
162
- }
163
- let _urlParamsFromUrl = new URLSearchParams(_gfiUrlParts?.[1]);
157
+ let _gfiUrl: string | undefined = getFeatureInfoUrl;
158
+ let _gfiUrlParts;
159
+ if (_gfiUrl?.indexOf?.("?") !== -1) {
160
+ _gfiUrlParts = props.url.split("?");
161
+ _gfiUrl = _gfiUrlParts[0];
162
+ }
163
+ let _urlParamsFromUrl = new URLSearchParams(_gfiUrlParts?.[1]);
164
164
 
165
- let urlParamsObj = {
166
- ...Object.fromEntries(_urlParamsFromUrl),
167
- ..._getFeatureInfoUrlParams,
168
- };
169
- // create URLSearchParams object to assemble the URL Parameters
170
- // "as any" can be removed once the URLSearchParams ts spec is fixed
171
- let urlParams = new URLSearchParams(urlParamsObj as any);
165
+ let urlParamsObj = {
166
+ ...Object.fromEntries(_urlParamsFromUrl),
167
+ ..._getFeatureInfoUrlParams,
168
+ };
169
+ // create URLSearchParams object to assemble the URL Parameters
170
+ // "as any" can be removed once the URLSearchParams ts spec is fixed
171
+ let urlParams = new URLSearchParams(urlParamsObj as any);
172
172
 
173
- fetch(props.url + "?" + urlParams.toString())
174
- .then((res) => {
175
- if (!res.ok) {
176
- throw new Error("FeatureInfo could not be fetched");
177
- }
178
- return res.text();
179
- })
180
- .then((text) => {
181
- setFeatureInfoLngLat(ev.lngLat);
182
- setFeatureInfoContent(text);
183
- })
184
- .catch((error) => console.log(error));
185
- },
186
- [capabilities, getFeatureInfoUrl]
187
- );
173
+ fetch(props.url + "?" + urlParams.toString())
174
+ .then((res) => {
175
+ if (!res.ok) {
176
+ throw new Error("FeatureInfo could not be fetched");
177
+ }
178
+ return res.text();
179
+ })
180
+ .then((text) => {
181
+ setFeatureInfoLngLat(ev.lngLat);
182
+ setFeatureInfoContent(text);
183
+ })
184
+ .catch((error) => console.log(error));
185
+ },
186
+ [capabilities, getFeatureInfoUrl]
187
+ );
188
188
 
189
- useEffect(() => {
190
- if (!mapRef.current) return;
189
+ useEffect(() => {
190
+ if (!mapRef.current) return;
191
191
 
192
- const _getFeatureInfo = getFeatureInfo;
192
+ const _getFeatureInfo = getFeatureInfo;
193
193
 
194
- mapRef.current.on("click", _getFeatureInfo, componentId.current);
195
- return () => {
196
- mapRef.current?.map.off?.("click", _getFeatureInfo);
197
- };
198
- }, [getFeatureInfo]);
194
+ mapRef.current.on("click", _getFeatureInfo, componentId.current);
195
+ return () => {
196
+ mapRef.current?.map.off?.("click", _getFeatureInfo);
197
+ };
198
+ }, [getFeatureInfo]);
199
199
 
200
- useEffect(() => {
201
- if (!capabilities?.Service) return;
200
+ useEffect(() => {
201
+ if (!capabilities?.Service) return;
202
202
 
203
- if (capabilities?.Capability?.Layer?.SRS?.indexOf?.("EPSG:3857") === -1) {
204
- console.log(
205
- "MlWmsLoader (" + capabilities.Service.Title + "): No WGS 84/Pseudo-Mercator support"
206
- );
207
- } else {
208
- console.log(
209
- "MlWmsLoader (" + capabilities.Service.Title + "): WGS 84/Pseudo-Mercator supported"
210
- );
203
+ if (capabilities?.Capability?.Layer?.SRS?.indexOf?.("EPSG:3857") === -1) {
204
+ console.log(
205
+ "MlWmsLoader (" + capabilities.Service.Title + "): No WGS 84/Pseudo-Mercator support"
206
+ );
207
+ } else {
208
+ console.log(
209
+ "MlWmsLoader (" + capabilities.Service.Title + "): WGS 84/Pseudo-Mercator supported"
210
+ );
211
211
 
212
- let _LatLonBoundingBox: Array<number> = [];
213
- setLayers(
214
- capabilities?.Capability?.Layer?.Layer.map((layer: typeof layerType, idx: number) => {
215
- if (idx === 0) {
216
- _LatLonBoundingBox = layer.LatLonBoundingBox;
217
- if (!_LatLonBoundingBox) {
218
- _LatLonBoundingBox = layer.EX_GeographicBoundingBox;
219
- }
220
- }
221
- layer.visible = capabilities?.Capability?.Layer?.Layer?.length > 2 ? idx > 1 : true;
222
- return layer;
223
- })
224
- );
212
+ let _LatLonBoundingBox: Array<number> = [];
213
+ setLayers(
214
+ capabilities?.Capability?.Layer?.Layer.map((layer: typeof layerType, idx: number) => {
215
+ if (idx === 0) {
216
+ _LatLonBoundingBox = layer.LatLonBoundingBox;
217
+ if (!_LatLonBoundingBox) {
218
+ _LatLonBoundingBox = layer.EX_GeographicBoundingBox;
219
+ }
220
+ }
221
+ layer.visible = capabilities?.Capability?.Layer?.Layer?.length > 2 ? idx > 1 : true;
222
+ return layer;
223
+ })
224
+ );
225
225
 
226
- // zoom to extent of first layer
227
- if (mapRef.current && _LatLonBoundingBox.length > 3) {
228
- mapRef.current.map.fitBounds([
229
- [_LatLonBoundingBox[0], _LatLonBoundingBox[1]],
230
- [_LatLonBoundingBox[2], _LatLonBoundingBox[3]],
231
- ]);
232
- }
233
- }
234
- }, [capabilities]);
226
+ // zoom to extent of first layer
227
+ if (mapRef.current && _LatLonBoundingBox.length > 3) {
228
+ mapRef.current.map.fitBounds([
229
+ [_LatLonBoundingBox[0], _LatLonBoundingBox[1]],
230
+ [_LatLonBoundingBox[2], _LatLonBoundingBox[3]],
231
+ ]);
232
+ }
233
+ }
234
+ }, [capabilities]);
235
235
 
236
- useEffect(() => {
237
- if (!mapContext?.mapExists?.(props.mapId) || initializedRef.current) return;
238
- // the MapLibre-gl instance (mapContext.map) is accessible here
239
- // initialize the layer and add it to the MapLibre-gl instance or do something else with it
240
- initializedRef.current = true;
241
- mapRef.current = mapContext.getMap(props.mapId);
242
- console.log("set url " + props.url);
243
- setUrl(props.url);
244
- }, [mapContext.mapIds, mapContext, props.mapId, props.url]);
236
+ useEffect(() => {
237
+ if (!mapContext?.mapExists?.(props.mapId) || initializedRef.current) return;
238
+ // the MapLibre-gl instance (mapContext.map) is accessible here
239
+ // initialize the layer and add it to the MapLibre-gl instance or do something else with it
240
+ initializedRef.current = true;
241
+ mapRef.current = mapContext.getMap(props.mapId);
242
+ console.log("set url " + props.url);
243
+ setUrl(props.url);
244
+ }, [mapContext.mapIds, mapContext, props.mapId, props.url]);
245
245
 
246
- return (
247
- <>
248
- {error && <p>{error}</p>}
249
- <h3 key="title">{capabilities?.Service?.Title}</h3>
250
- {console.log(componentId.current)}
251
- {capabilities?.Capability?.Layer?.Layer.map((layer: any, idx: number) => (
252
- <MlLayer
253
- layerId={"Order-" + componentId.current + "-" + idx}
254
- key={componentId.current + "-" + idx}
255
- {...(idx > 0
256
- ? {
257
- insertBeforeLayer: "Order-" + componentId.current + "-" + (idx - 1),
258
- }
259
- : undefined)}
260
- />
261
- ))}
262
- <List dense key="layers">
263
- {wmsUrl &&
264
- layers?.map?.((layer: typeof layerType, idx) => {
265
- return layer?.Name ? (
266
- <ListItem
267
- key={layer.Name + idx}
268
- secondaryAction={
269
- <IconButton
270
- edge="end"
271
- aria-label="toggle visibility"
272
- onClick={() => {
273
- let _layers: Array<typeof layerType> = [...layers];
274
- _layers[idx].visible = !_layers[idx].visible;
275
- setLayers([..._layers]);
276
- }}
277
- >
278
- {layers[idx].visible ? <VisibilityIcon /> : <VisibilityOffIcon />}
279
- </IconButton>
280
- }
281
- >
282
- <ListItemText primary={layer?.Title} secondary={layer?.Abstract} />
283
- <MlWmsLayer
284
- key={layer?.Name + idx}
285
- url={wmsUrl}
286
- urlParameters={{ ...props.wmsUrlParameters, layers: layer?.Name }}
287
- visible={layers[idx].visible}
288
- insertBeforeLayer={"Order-" + componentId.current + "-" + idx}
289
- />
290
- </ListItem>
291
- ) : (
292
- <></>
293
- );
294
- })}
295
- </List>
296
- <p key="description" style={{ fontSize: ".7em" }}>
297
- {capabilities?.Capability?.Layer?.Abstract}
298
- </p>
246
+ return (
247
+ <>
248
+ {error && <p>{error}</p>}
249
+ <h3 key="title">{capabilities?.Service?.Title}</h3>
250
+ {console.log(componentId.current)}
251
+ {capabilities?.Capability?.Layer?.Layer.map((layer: any, idx: number) => (
252
+ <MlLayer
253
+ layerId={"Order-" + componentId.current + "-" + idx}
254
+ key={componentId.current + "-" + idx}
255
+ {...(idx > 0
256
+ ? {
257
+ insertBeforeLayer: "Order-" + componentId.current + "-" + (idx - 1),
258
+ }
259
+ : undefined)}
260
+ />
261
+ ))}
262
+ <List dense key="layers">
263
+ {wmsUrl &&
264
+ layers?.map?.((layer: typeof layerType, idx) => {
265
+ return layer?.Name ? (
266
+ <ListItem
267
+ key={layer.Name + idx}
268
+ secondaryAction={
269
+ <IconButton
270
+ edge="end"
271
+ aria-label="toggle visibility"
272
+ onClick={() => {
273
+ let _layers: Array<typeof layerType> = [...layers];
274
+ _layers[idx].visible = !_layers[idx].visible;
275
+ setLayers([..._layers]);
276
+ }}
277
+ >
278
+ {layers[idx].visible ? <VisibilityIcon /> : <VisibilityOffIcon />}
279
+ </IconButton>
280
+ }
281
+ >
282
+ <ListItemText primary={layer?.Title} secondary={layer?.Abstract} />
283
+ <MlWmsLayer
284
+ key={layer?.Name + idx}
285
+ url={wmsUrl}
286
+ urlParameters={{ ...props.wmsUrlParameters, layers: layer?.Name }}
287
+ visible={layers[idx].visible}
288
+ insertBeforeLayer={"Order-" + componentId.current + "-" + idx}
289
+ />
290
+ </ListItem>
291
+ ) : (
292
+ <></>
293
+ );
294
+ })}
295
+ </List>
296
+ <p key="description" style={{ fontSize: ".7em" }}>
297
+ {capabilities?.Capability?.Layer?.Abstract}
298
+ </p>
299
299
 
300
- {featureInfoLngLat && <MlMarker {...featureInfoLngLat} content={featureInfoContent} />}
301
- </>
302
- );
300
+ {featureInfoLngLat && <MlMarker {...featureInfoLngLat} content={featureInfoContent} />}
301
+ </>
302
+ );
303
303
  };
304
304
 
305
305
  MlWmsLoader.defaultProps = {
306
- url: "",
307
- urlParameters: {
308
- SERVICE: "WMS",
309
- VERSION: "1.3.0",
310
- REQUEST: "GetCapabilities",
311
- },
312
- wmsUrlParameters: {
313
- TRANSPARENT: "TRUE",
314
- },
306
+ url: "",
307
+ urlParameters: {
308
+ SERVICE: "WMS",
309
+ VERSION: "1.3.0",
310
+ REQUEST: "GetCapabilities",
311
+ },
312
+ wmsUrlParameters: {
313
+ TRANSPARENT: "TRUE",
314
+ },
315
315
  };
316
316
 
317
317
  export default MlWmsLoader;