@mapcomponents/react-maplibre 0.1.57 → 0.1.58

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 +13 -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 +250 -64
  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
@@ -15,203 +15,203 @@ import useMapState from "../../hooks/useMapState";
15
15
  *
16
16
  */
17
17
  const MlLayerSwitcher = (props) => {
18
- const mapContext = useContext(MapContext);
19
- const showBaseSources = !!props.baseSourceConfig?.layers?.length;
20
- const showDetailLayer = !!props.detailLayerConfig?.layers?.length;
21
- const { layers } = useMapState({
22
- mapId: props.mapId,
23
- watch: {
24
- viewport: false,
25
- layers: true,
26
- sources: false,
27
- },
28
- filter: {},
29
- });
30
- const [activeLayers, setActiveLayers] = useState([]);
31
- const [activeDetailLayers, setActiveDetailLayers] = useState([]);
32
- const { t } = useTranslation();
33
-
34
- useEffect(() => {
35
- //Set base state to activate only the first layer
36
- if (mapContext.map) {
37
- const disableAllButFirst = (config, i) => {
38
- const layers = getLayerListFromId(config.layerId);
39
- const visible = i === 0 ? "visible" : "none";
40
-
41
- layers.forEach((layer) => {
42
- if (layer) {
43
- changeLayerState(layer, visible);
44
- }
45
- });
46
- };
47
-
48
- props.baseSourceConfig.layers.forEach((config, i) => disableAllButFirst(config, i));
49
- props.detailLayerConfig.layers.forEach((config, i) => disableAllButFirst(config, i));
50
- }
51
- return () => {
52
- // This is the cleanup function, it is called when this react component is removed from react-dom
53
- // try to remove anything this component has added to the MapLibre-gl instance
54
- // e.g.: remove the layer
55
- // mapContext.getMap(props.mapId).removeLayer(layerRef.current);
56
- // check for the existence of map.style before calling getLayer or getSource
57
- };
58
- }, [mapContext.map]);
59
-
60
- useEffect(() => {
61
- if (mapContext.map?.style?._layers) {
62
- let newactiveLayers = [];
63
- let newactiveDetailLayers = [];
64
- props.baseSourceConfig.layers.forEach((layerConfig) => {
65
- const layers = getLayerListFromId(layerConfig.layerId);
66
-
67
- layers.forEach((layer) => {
68
- const visibilty = mapContext.map?.getLayoutProperty(layer, "visibility");
69
- if (mapContext.map.baseLayers.indexOf(layer) !== -1) {
70
- layer = "styleBase";
71
- }
72
-
73
- if (newactiveLayers.indexOf(layer) === -1 && visibilty === "visible") {
74
- newactiveLayers.push(layer);
75
- }
76
- });
77
- });
78
- props.detailLayerConfig.layers.forEach(({ layerId }) => {
79
- const visibilty = mapContext.map?.getLayoutProperty(layerId, "visibility");
80
- if (newactiveDetailLayers.indexOf(layerId) === -1 && visibilty === "visible") {
81
- newactiveDetailLayers.push(layerId);
82
- }
83
- });
84
- setActiveLayers(newactiveLayers);
85
-
86
- setActiveDetailLayers(newactiveDetailLayers);
87
- }
88
- }, [layers]);
89
-
90
- const getLayerListFromId = (id) => {
91
- return id === "styleBase" ? mapContext?.map.baseLayers : [id];
92
- };
93
-
94
- const handleDetailLayerBoxClick = (layerId) => {
95
- const cfg = props.detailLayerConfig.layers.find((e) => e.layerId === layerId);
96
- if (cfg.linkedTo) {
97
- handleLayerBoxClick(cfg.linkedTo);
98
- }
99
- const nextVisiblityClickedLayer =
100
- mapContext?.map.getLayer(layerId)?.getLayoutProperty("visibility") === "visible"
101
- ? "none"
102
- : "visible";
103
- changeLayerState(layerId, nextVisiblityClickedLayer);
104
- };
105
-
106
- const handleLayerBoxClick = (id) => {
107
- let layers = getLayerListFromId(id);
108
- const nextVisiblityClickedLayer =
109
- mapContext?.map.getLayer(layers[0])?.getLayoutProperty("visibility") === "visible"
110
- ? "none"
111
- : "visible";
112
-
113
- props.baseSourceConfig.layers.forEach((config, i) => {
114
- let layers = getLayerListFromId(config.layerId);
115
- let visible = "none";
116
- if (config.layerId === id) {
117
- visible = nextVisiblityClickedLayer;
118
- }
119
-
120
- //To avoid disabling all base layers we activate the first one
121
- if (nextVisiblityClickedLayer === "none" && i === 0) {
122
- visible = "visible";
123
- }
124
- layers.forEach((layer) => {
125
- if (layer) {
126
- changeLayerState(layer, visible);
127
- }
128
- });
129
- });
130
- };
131
-
132
- const changeLayerState = (layer, visible = "none") => {
133
- mapContext.map?.setLayoutProperty(layer, "visibility", visible);
134
- };
135
-
136
- return (
137
- <>
138
- <Card sx={{ zIndex: 101, position: "absolute", minWidth: "200px" }}>
139
- <CardContent>
140
- {showBaseSources && (
141
- <Box sx={{ minHeight: "150px" }}>
142
- <Typography variant="h6">{t(props.baseSourceConfig.label || "Map type")}</Typography>
143
- <Divider />
144
- <Box sx={{ display: "flex", paddingTop: "1rem" }}>
145
- {props.baseSourceConfig.layers.map(({ src, label, layerId }) => {
146
- return (
147
- <LayerBox
148
- mapId={props.mapId}
149
- key={layerId}
150
- activeLayers={activeLayers}
151
- label={t(label)}
152
- layerId={layerId}
153
- thumbnail={src}
154
- handleLayerBoxClick={() => {
155
- handleLayerBoxClick(layerId);
156
- }}
157
- />
158
- );
159
- })}
160
- </Box>
161
- </Box>
162
- )}
163
- {showDetailLayer && (
164
- <Box sx={{ minHeight: "150px" }}>
165
- <Typography variant="h6">{t("Map details")}</Typography>
166
- <Divider />
167
- <Box sx={{ display: "flex", paddingTop: "1rem" }}>
168
- {props.detailLayerConfig.layers.map(({ src, label, layerId }) => {
169
- return (
170
- <LayerBox
171
- mapId={props.mapId}
172
- activeLayers={activeDetailLayers}
173
- label={t(label)}
174
- layerId={layerId}
175
- key={layerId}
176
- thumbnail={src}
177
- handleLayerBoxClick={() => {
178
- handleDetailLayerBoxClick(layerId);
179
- }}
180
- />
181
- );
182
- })}
183
- </Box>
184
- </Box>
185
- )}
186
- </CardContent>{" "}
187
- </Card>
188
- </>
189
- );
18
+ const mapContext = useContext(MapContext);
19
+ const showBaseSources = !!props.baseSourceConfig?.layers?.length;
20
+ const showDetailLayer = !!props.detailLayerConfig?.layers?.length;
21
+ const { layers } = useMapState({
22
+ mapId: props.mapId,
23
+ watch: {
24
+ viewport: false,
25
+ layers: true,
26
+ sources: false,
27
+ },
28
+ filter: {},
29
+ });
30
+ const [activeLayers, setActiveLayers] = useState([]);
31
+ const [activeDetailLayers, setActiveDetailLayers] = useState([]);
32
+ const { t } = useTranslation();
33
+
34
+ useEffect(() => {
35
+ //Set base state to activate only the first layer
36
+ if (mapContext.map) {
37
+ const disableAllButFirst = (config, i) => {
38
+ const layers = getLayerListFromId(config.layerId);
39
+ const visible = i === 0 ? "visible" : "none";
40
+
41
+ layers.forEach((layer) => {
42
+ if (layer) {
43
+ changeLayerState(layer, visible);
44
+ }
45
+ });
46
+ };
47
+
48
+ props.baseSourceConfig.layers.forEach((config, i) => disableAllButFirst(config, i));
49
+ props.detailLayerConfig.layers.forEach((config, i) => disableAllButFirst(config, i));
50
+ }
51
+ return () => {
52
+ // This is the cleanup function, it is called when this react component is removed from react-dom
53
+ // try to remove anything this component has added to the MapLibre-gl instance
54
+ // e.g.: remove the layer
55
+ // mapContext.getMap(props.mapId).removeLayer(layerRef.current);
56
+ // check for the existence of map.style before calling getLayer or getSource
57
+ };
58
+ }, [mapContext.map]);
59
+
60
+ useEffect(() => {
61
+ if (mapContext.map?.style?._layers) {
62
+ let newactiveLayers = [];
63
+ let newactiveDetailLayers = [];
64
+ props.baseSourceConfig.layers.forEach((layerConfig) => {
65
+ const layers = getLayerListFromId(layerConfig.layerId);
66
+
67
+ layers.forEach((layer) => {
68
+ const visibilty = mapContext.map?.getLayoutProperty(layer, "visibility");
69
+ if (mapContext.map.baseLayers.indexOf(layer) !== -1) {
70
+ layer = "styleBase";
71
+ }
72
+
73
+ if (newactiveLayers.indexOf(layer) === -1 && visibilty === "visible") {
74
+ newactiveLayers.push(layer);
75
+ }
76
+ });
77
+ });
78
+ props.detailLayerConfig.layers.forEach(({ layerId }) => {
79
+ const visibilty = mapContext.map?.getLayoutProperty(layerId, "visibility");
80
+ if (newactiveDetailLayers.indexOf(layerId) === -1 && visibilty === "visible") {
81
+ newactiveDetailLayers.push(layerId);
82
+ }
83
+ });
84
+ setActiveLayers(newactiveLayers);
85
+
86
+ setActiveDetailLayers(newactiveDetailLayers);
87
+ }
88
+ }, [layers]);
89
+
90
+ const getLayerListFromId = (id) => {
91
+ return id === "styleBase" ? mapContext?.map.baseLayers : [id];
92
+ };
93
+
94
+ const handleDetailLayerBoxClick = (layerId) => {
95
+ const cfg = props.detailLayerConfig.layers.find((e) => e.layerId === layerId);
96
+ if (cfg.linkedTo) {
97
+ handleLayerBoxClick(cfg.linkedTo);
98
+ }
99
+ const nextVisiblityClickedLayer =
100
+ mapContext?.map.getLayer(layerId)?.getLayoutProperty("visibility") === "visible"
101
+ ? "none"
102
+ : "visible";
103
+ changeLayerState(layerId, nextVisiblityClickedLayer);
104
+ };
105
+
106
+ const handleLayerBoxClick = (id) => {
107
+ let layers = getLayerListFromId(id);
108
+ const nextVisiblityClickedLayer =
109
+ mapContext?.map.getLayer(layers[0])?.getLayoutProperty("visibility") === "visible"
110
+ ? "none"
111
+ : "visible";
112
+
113
+ props.baseSourceConfig.layers.forEach((config, i) => {
114
+ let layers = getLayerListFromId(config.layerId);
115
+ let visible = "none";
116
+ if (config.layerId === id) {
117
+ visible = nextVisiblityClickedLayer;
118
+ }
119
+
120
+ //To avoid disabling all base layers we activate the first one
121
+ if (nextVisiblityClickedLayer === "none" && i === 0) {
122
+ visible = "visible";
123
+ }
124
+ layers.forEach((layer) => {
125
+ if (layer) {
126
+ changeLayerState(layer, visible);
127
+ }
128
+ });
129
+ });
130
+ };
131
+
132
+ const changeLayerState = (layer, visible = "none") => {
133
+ mapContext.map?.setLayoutProperty(layer, "visibility", visible);
134
+ };
135
+
136
+ return (
137
+ <>
138
+ <Card sx={{ zIndex: 101, position: "absolute", minWidth: "200px" }}>
139
+ <CardContent>
140
+ {showBaseSources && (
141
+ <Box sx={{ minHeight: "150px" }}>
142
+ <Typography variant="h6">{t(props.baseSourceConfig.label || "Map type")}</Typography>
143
+ <Divider />
144
+ <Box sx={{ display: "flex", paddingTop: "1rem" }}>
145
+ {props.baseSourceConfig.layers.map(({ src, label, layerId }) => {
146
+ return (
147
+ <LayerBox
148
+ mapId={props.mapId}
149
+ key={layerId}
150
+ activeLayers={activeLayers}
151
+ label={t(label)}
152
+ layerId={layerId}
153
+ thumbnail={src}
154
+ handleLayerBoxClick={() => {
155
+ handleLayerBoxClick(layerId);
156
+ }}
157
+ />
158
+ );
159
+ })}
160
+ </Box>
161
+ </Box>
162
+ )}
163
+ {showDetailLayer && (
164
+ <Box sx={{ minHeight: "150px" }}>
165
+ <Typography variant="h6">{t("Map details")}</Typography>
166
+ <Divider />
167
+ <Box sx={{ display: "flex", paddingTop: "1rem" }}>
168
+ {props.detailLayerConfig.layers.map(({ src, label, layerId }) => {
169
+ return (
170
+ <LayerBox
171
+ mapId={props.mapId}
172
+ activeLayers={activeDetailLayers}
173
+ label={t(label)}
174
+ layerId={layerId}
175
+ key={layerId}
176
+ thumbnail={src}
177
+ handleLayerBoxClick={() => {
178
+ handleDetailLayerBoxClick(layerId);
179
+ }}
180
+ />
181
+ );
182
+ })}
183
+ </Box>
184
+ </Box>
185
+ )}
186
+ </CardContent>{" "}
187
+ </Card>
188
+ </>
189
+ );
190
190
  };
191
191
 
192
192
  MlLayerSwitcher.propTypes = {
193
- baseSourceConfig: PropTypes.shape({
194
- label: PropTypes.string,
195
- layers: PropTypes.arrayOf(
196
- PropTypes.shape({
197
- layerId: PropTypes.string.isRequired,
198
- src: PropTypes.string,
199
- label: PropTypes.string.isRequired,
200
- })
201
- ),
202
- }),
203
- detailLayerConfig: PropTypes.shape({
204
- label: PropTypes.string,
205
- layers: PropTypes.arrayOf(
206
- PropTypes.shape({
207
- layerId: PropTypes.string.isRequired,
208
- src: PropTypes.string,
209
- label: PropTypes.string.isRequired,
210
- linkedTo: PropTypes.string,
211
- })
212
- ),
213
- }),
214
- mapId: PropTypes.string,
193
+ baseSourceConfig: PropTypes.shape({
194
+ label: PropTypes.string,
195
+ layers: PropTypes.arrayOf(
196
+ PropTypes.shape({
197
+ layerId: PropTypes.string.isRequired,
198
+ src: PropTypes.string,
199
+ label: PropTypes.string.isRequired,
200
+ })
201
+ ),
202
+ }),
203
+ detailLayerConfig: PropTypes.shape({
204
+ label: PropTypes.string,
205
+ layers: PropTypes.arrayOf(
206
+ PropTypes.shape({
207
+ layerId: PropTypes.string.isRequired,
208
+ src: PropTypes.string,
209
+ label: PropTypes.string.isRequired,
210
+ linkedTo: PropTypes.string,
211
+ })
212
+ ),
213
+ }),
214
+ mapId: PropTypes.string,
215
215
  };
216
216
 
217
217
  export default MlLayerSwitcher;
@@ -7,97 +7,97 @@ import sample_geojson_1 from "./assets/sample_1.json";
7
7
  import sample_geojson_2 from "./assets/sample_2.json";
8
8
 
9
9
  const storyoptions = {
10
- title: "MapComponents/MlLayerSwitcher",
11
- component: MlLayerSwitcher,
12
- argTypes: {
13
- url: {},
14
- layer: {},
15
- },
16
- decorators: mapContextDecorator,
10
+ title: "MapComponents/MlLayerSwitcher",
11
+ component: MlLayerSwitcher,
12
+ argTypes: {
13
+ url: {},
14
+ layer: {},
15
+ },
16
+ decorators: mapContextDecorator,
17
17
  };
18
18
  export default storyoptions;
19
19
  const Template = (args) => {
20
- return (
21
- <>
22
- <MlWmsLayer
23
- url={args.url}
24
- urlParameters={{ layers: args.layer }}
25
- sourceOptions={args.sourceOptions}
26
- layerId="historic"
27
- visible={args.layerVisible}
28
- />
29
- <MlWmsLayer
30
- url={args.url2}
31
- urlParameters={{ layers: args.layer2 }}
32
- sourceOptions={args.sourceOptions}
33
- layerId={args.layer2}
34
- visible={args.layer2Visible}
35
- />
36
- <MlGeoJsonLayer
37
- type="line"
38
- layout={{ visibility: args.geojsonLayerVisible ? "visible" : "none" }}
39
- geojson={sample_geojson_1}
40
- layerId="geojson1"
41
- />
42
- <MlGeoJsonLayer
43
- type="line"
44
- layout={{ visibility: args.geojson2LayerVisible ? "visible" : "none" }}
45
- geojson={sample_geojson_2}
46
- layerId="geojson2"
47
- />
48
- <MlLayerSwitcher
49
- baseSourceConfig={{
50
- active: args.baseSourcesActive,
51
- layers: args.layers,
52
- }}
53
- detailLayerConfig={args.detailLayerConfig}
54
- />
55
- ;
56
- </>
57
- );
20
+ return (
21
+ <>
22
+ <MlWmsLayer
23
+ url={args.url}
24
+ urlParameters={{ layers: args.layer }}
25
+ sourceOptions={args.sourceOptions}
26
+ layerId="historic"
27
+ visible={args.layerVisible}
28
+ />
29
+ <MlWmsLayer
30
+ url={args.url2}
31
+ urlParameters={{ layers: args.layer2 }}
32
+ sourceOptions={args.sourceOptions}
33
+ layerId={args.layer2}
34
+ visible={args.layer2Visible}
35
+ />
36
+ <MlGeoJsonLayer
37
+ type="line"
38
+ layout={{ visibility: args.geojsonLayerVisible ? "visible" : "none" }}
39
+ geojson={sample_geojson_1}
40
+ layerId="geojson1"
41
+ />
42
+ <MlGeoJsonLayer
43
+ type="line"
44
+ layout={{ visibility: args.geojson2LayerVisible ? "visible" : "none" }}
45
+ geojson={sample_geojson_2}
46
+ layerId="geojson2"
47
+ />
48
+ <MlLayerSwitcher
49
+ baseSourceConfig={{
50
+ active: args.baseSourcesActive,
51
+ layers: args.layers,
52
+ }}
53
+ detailLayerConfig={args.detailLayerConfig}
54
+ />
55
+ ;
56
+ </>
57
+ );
58
58
  };
59
59
 
60
60
  export const ExampleConfig = Template.bind({});
61
61
  ExampleConfig.parameters = {};
62
62
  ExampleConfig.args = {
63
- url: "https://www.wms.nrw.de/geobasis/wms_nw_uraufnahme",
64
- layer: "nw_uraufnahme_rw",
65
- layerVisible: true,
66
- url2: "https://www.wms.nrw.de/geobasis/wms_nw_dop",
67
- layer2: "WMS_NW_DOP",
68
- layer2Visible: false,
69
- geojsonLayerVisible: true,
70
- geojson2LayerVisible: true,
71
- sourceOptions: {
72
- minzoom: 13,
73
- maxzoom: 20,
74
- },
75
- baseSourcesActive: true,
76
- layers: [
77
- {
78
- label: "Historic",
79
- layerId: "historic",
80
- src: "assets/historic.png",
81
- },
82
- {
83
- label: "Straßenkarte",
84
- layerId: "styleBase",
85
- src: "assets/osm.png",
86
- },
87
- {
88
- label: "DOP",
89
- layerId: "WMS_NW_DOP",
90
- src: "assets/dop.png",
91
- },
92
- ],
93
- detailLayerConfig: {
94
- layers: [
95
- {
96
- label: "GeoJson 1",
97
- layerId: "geojson1",
98
- src: "assets/historic.png",
99
- active: true,
100
- },
101
- ],
102
- },
63
+ url: "https://www.wms.nrw.de/geobasis/wms_nw_uraufnahme",
64
+ layer: "nw_uraufnahme_rw",
65
+ layerVisible: true,
66
+ url2: "https://www.wms.nrw.de/geobasis/wms_nw_dop",
67
+ layer2: "WMS_NW_DOP",
68
+ layer2Visible: false,
69
+ geojsonLayerVisible: true,
70
+ geojson2LayerVisible: true,
71
+ sourceOptions: {
72
+ minzoom: 13,
73
+ maxzoom: 20,
74
+ },
75
+ baseSourcesActive: true,
76
+ layers: [
77
+ {
78
+ label: "Historic",
79
+ layerId: "historic",
80
+ src: "assets/historic.png",
81
+ },
82
+ {
83
+ label: "Straßenkarte",
84
+ layerId: "styleBase",
85
+ src: "assets/osm.png",
86
+ },
87
+ {
88
+ label: "DOP",
89
+ layerId: "WMS_NW_DOP",
90
+ src: "assets/dop.png",
91
+ },
92
+ ],
93
+ detailLayerConfig: {
94
+ layers: [
95
+ {
96
+ label: "GeoJson 1",
97
+ layerId: "geojson1",
98
+ src: "assets/historic.png",
99
+ active: true,
100
+ },
101
+ ],
102
+ },
103
103
  };