react-spatial 1.5.3 → 1.5.4

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 (294) hide show
  1. package/components/BaseLayerSwitcher/BaseLayerSwitcher.js +231 -0
  2. package/components/BaseLayerSwitcher/BaseLayerSwitcher.js.map +7 -0
  3. package/components/BaseLayerSwitcher/index.js +1 -0
  4. package/components/BaseLayerSwitcher/index.js.map +7 -0
  5. package/components/BasicMap/BasicMap.js +278 -0
  6. package/components/BasicMap/BasicMap.js.map +7 -0
  7. package/components/BasicMap/index.js +1 -0
  8. package/components/BasicMap/index.js.map +7 -0
  9. package/{src/components → components}/CanvasSaveButton/CanvasSaveButton.js +93 -320
  10. package/components/CanvasSaveButton/CanvasSaveButton.js.map +7 -0
  11. package/components/CanvasSaveButton/index.js +1 -0
  12. package/components/CanvasSaveButton/index.js.map +7 -0
  13. package/components/Copyright/Copyright.js +55 -0
  14. package/components/Copyright/Copyright.js.map +7 -0
  15. package/components/Copyright/index.js +1 -0
  16. package/components/Copyright/index.js.map +7 -0
  17. package/components/FeatureExportButton/FeatureExportButton.js +62 -0
  18. package/components/FeatureExportButton/FeatureExportButton.js.map +7 -0
  19. package/components/FeatureExportButton/index.js +1 -0
  20. package/components/FeatureExportButton/index.js.map +7 -0
  21. package/components/FitExtent/FitExtent.js +32 -0
  22. package/components/FitExtent/FitExtent.js.map +7 -0
  23. package/components/FitExtent/index.js +1 -0
  24. package/components/FitExtent/index.js.map +7 -0
  25. package/{src/components → components}/Geolocation/Geolocation.js +61 -144
  26. package/components/Geolocation/Geolocation.js.map +7 -0
  27. package/components/Geolocation/index.js +1 -0
  28. package/components/Geolocation/index.js.map +7 -0
  29. package/components/LayerTree/LayerTree.js +278 -0
  30. package/components/LayerTree/LayerTree.js.map +7 -0
  31. package/components/LayerTree/index.js +1 -0
  32. package/components/LayerTree/index.js.map +7 -0
  33. package/components/MousePosition/MousePosition.js +110 -0
  34. package/components/MousePosition/MousePosition.js.map +7 -0
  35. package/components/MousePosition/index.js +1 -0
  36. package/components/MousePosition/index.js.map +7 -0
  37. package/components/NorthArrow/NorthArrow.js +43 -0
  38. package/components/NorthArrow/NorthArrow.js.map +7 -0
  39. package/components/NorthArrow/index.js +1 -0
  40. package/components/NorthArrow/index.js.map +7 -0
  41. package/components/Overlay/Overlay.js +122 -0
  42. package/components/Overlay/Overlay.js.map +7 -0
  43. package/components/Overlay/index.js +1 -0
  44. package/components/Overlay/index.js.map +7 -0
  45. package/components/Permalink/Permalink.js +206 -0
  46. package/components/Permalink/Permalink.js.map +7 -0
  47. package/components/Permalink/index.js +1 -0
  48. package/components/Permalink/index.js.map +7 -0
  49. package/{src/components → components}/Popup/Popup.js +55 -165
  50. package/components/Popup/Popup.js.map +7 -0
  51. package/components/Popup/index.js +1 -0
  52. package/components/Popup/index.js.map +7 -0
  53. package/{src/components → components}/ResizeHandler/ResizeHandler.js +15 -50
  54. package/components/ResizeHandler/ResizeHandler.js.map +7 -0
  55. package/components/ResizeHandler/index.js +1 -0
  56. package/components/ResizeHandler/index.js.map +7 -0
  57. package/components/RouteSchedule/RouteSchedule.js +223 -0
  58. package/components/RouteSchedule/RouteSchedule.js.map +7 -0
  59. package/components/RouteSchedule/index.js +1 -0
  60. package/components/RouteSchedule/index.js.map +7 -0
  61. package/components/ScaleLine/ScaleLine.js +32 -0
  62. package/components/ScaleLine/ScaleLine.js.map +7 -0
  63. package/components/ScaleLine/index.js +1 -0
  64. package/components/ScaleLine/index.js.map +7 -0
  65. package/components/StopsFinder/StopsFinder.js +210 -0
  66. package/components/StopsFinder/StopsFinder.js.map +7 -0
  67. package/components/StopsFinder/StopsFinderOption.js +51 -0
  68. package/components/StopsFinder/StopsFinderOption.js.map +7 -0
  69. package/components/StopsFinder/index.js +1 -0
  70. package/components/StopsFinder/index.js.map +7 -0
  71. package/components/Zoom/Zoom.js +130 -0
  72. package/components/Zoom/Zoom.js.map +7 -0
  73. package/components/Zoom/index.js +1 -0
  74. package/components/Zoom/index.js.map +7 -0
  75. package/package.json +1 -1
  76. package/{src/propTypes.js → propTypes.js} +12 -16
  77. package/propTypes.js.map +7 -0
  78. package/{src/setupTests.js → setupTests.js} +1 -1
  79. package/setupTests.js.map +7 -0
  80. package/utils/GlobalsForOle.js +94 -0
  81. package/utils/GlobalsForOle.js.map +7 -0
  82. package/utils/KML.js +412 -0
  83. package/utils/KML.js.map +7 -0
  84. package/utils/KMLFormat.js +69 -0
  85. package/utils/KMLFormat.js.map +7 -0
  86. package/{src/utils → utils}/Styles.js +14 -20
  87. package/utils/Styles.js.map +7 -0
  88. package/{src/utils → utils}/getPolygonPattern.js +6 -34
  89. package/utils/getPolygonPattern.js.map +7 -0
  90. package/{src/utils → utils}/timeUtils.js +5 -22
  91. package/utils/timeUtils.js.map +7 -0
  92. package/.github/workflows/conventional-pr-title.yml +0 -21
  93. package/.github/workflows/main.yml +0 -28
  94. package/.husky/commit-msg +0 -4
  95. package/.husky/post-checkout +0 -4
  96. package/.husky/post-merge +0 -4
  97. package/.husky/post-rebase +0 -4
  98. package/.husky/pre-commit +0 -4
  99. package/.nvmrc +0 -1
  100. package/.whitesource +0 -8
  101. package/CHANGELOG.md +0 -65
  102. package/DEVELOP.md +0 -113
  103. package/__mocks__/mapbox-gl.js +0 -11
  104. package/__mocks__/resize-observer-polyfill.js +0 -9
  105. package/babel.config.js +0 -3
  106. package/commitlint.config.js +0 -1
  107. package/data/topic1.js +0 -119
  108. package/data/topic2.js +0 -28
  109. package/doc/README.md +0 -21
  110. package/doc/doc-config.json +0 -4
  111. package/pull_request_template.md +0 -16
  112. package/renovate.json +0 -4
  113. package/scripts/read-pkg-json.js +0 -17
  114. package/src/components/BaseLayerSwitcher/BaseLayerSwitcher.js +0 -322
  115. package/src/components/BaseLayerSwitcher/BaseLayerSwitcher.test.js +0 -69
  116. package/src/components/BaseLayerSwitcher/README.md +0 -61
  117. package/src/components/BaseLayerSwitcher/__snapshots__/BaseLayerSwitcher.test.js.snap +0 -88
  118. package/src/components/BaseLayerSwitcher/index.js +0 -1
  119. package/src/components/BasicMap/BasicMap.js +0 -413
  120. package/src/components/BasicMap/BasicMap.test.js +0 -281
  121. package/src/components/BasicMap/README.md +0 -18
  122. package/src/components/BasicMap/index.js +0 -1
  123. package/src/components/CanvasSaveButton/CanvasSaveButton.test.js +0 -148
  124. package/src/components/CanvasSaveButton/README.md +0 -76
  125. package/src/components/CanvasSaveButton/__snapshots__/CanvasSaveButton.test.js.snap +0 -76
  126. package/src/components/CanvasSaveButton/index.js +0 -1
  127. package/src/components/Copyright/Copyright.js +0 -89
  128. package/src/components/Copyright/Copyright.test.js +0 -134
  129. package/src/components/Copyright/README.md +0 -36
  130. package/src/components/Copyright/index.js +0 -1
  131. package/src/components/FeatureExportButton/FeatureExportButton.js +0 -118
  132. package/src/components/FeatureExportButton/FeatureExportButton.test.js +0 -417
  133. package/src/components/FeatureExportButton/README.md +0 -76
  134. package/src/components/FeatureExportButton/__snapshots__/FeatureExportButton.test.js.snap +0 -67
  135. package/src/components/FeatureExportButton/index.js +0 -1
  136. package/src/components/FitExtent/FitExtent.js +0 -62
  137. package/src/components/FitExtent/FitExtent.test.js +0 -48
  138. package/src/components/FitExtent/README.md +0 -34
  139. package/src/components/FitExtent/__snapshots__/FitExtent.test.js.snap +0 -13
  140. package/src/components/FitExtent/index.js +0 -1
  141. package/src/components/Geolocation/Geolocation.test.js +0 -267
  142. package/src/components/Geolocation/README.md +0 -25
  143. package/src/components/Geolocation/__snapshots__/Geolocation.test.js.snap +0 -92
  144. package/src/components/Geolocation/index.js +0 -1
  145. package/src/components/LayerTree/LayerTree.js +0 -487
  146. package/src/components/LayerTree/LayerTree.test.js +0 -337
  147. package/src/components/LayerTree/README.md +0 -92
  148. package/src/components/LayerTree/__snapshots__/LayerTree.test.js.snap +0 -1746
  149. package/src/components/LayerTree/index.js +0 -1
  150. package/src/components/MousePosition/MousePosition.js +0 -175
  151. package/src/components/MousePosition/MousePosition.test.js +0 -132
  152. package/src/components/MousePosition/README.md +0 -50
  153. package/src/components/MousePosition/__snapshots__/MousePosition.test.js.snap +0 -76
  154. package/src/components/MousePosition/index.js +0 -1
  155. package/src/components/NorthArrow/NorthArrow.js +0 -75
  156. package/src/components/NorthArrow/NorthArrow.test.js +0 -104
  157. package/src/components/NorthArrow/README.md +0 -59
  158. package/src/components/NorthArrow/__snapshots__/NorthArrow.test.js.snap +0 -117
  159. package/src/components/NorthArrow/index.js +0 -1
  160. package/src/components/Overlay/Overlay.js +0 -176
  161. package/src/components/Overlay/Overlay.test.js +0 -149
  162. package/src/components/Overlay/README.md +0 -59
  163. package/src/components/Overlay/__snapshots__/Overlay.test.js.snap +0 -9
  164. package/src/components/Overlay/index.js +0 -1
  165. package/src/components/Permalink/Permalink.js +0 -326
  166. package/src/components/Permalink/Permalink.test.js +0 -285
  167. package/src/components/Permalink/README.md +0 -105
  168. package/src/components/Permalink/index.js +0 -1
  169. package/src/components/Popup/Popup.test.js +0 -307
  170. package/src/components/Popup/README.md +0 -93
  171. package/src/components/Popup/__snapshots__/Popup.test.js.snap +0 -180
  172. package/src/components/Popup/index.js +0 -1
  173. package/src/components/README.md +0 -41
  174. package/src/components/ResizeHandler/ResizeHandler.test.js +0 -344
  175. package/src/components/ResizeHandler/index.js +0 -1
  176. package/src/components/RouteSchedule/README.md +0 -118
  177. package/src/components/RouteSchedule/RouteSchedule.js +0 -370
  178. package/src/components/RouteSchedule/RouteSchedule.test.js +0 -113
  179. package/src/components/RouteSchedule/__snapshots__/RouteSchedule.test.js.snap +0 -248
  180. package/src/components/RouteSchedule/index.js +0 -1
  181. package/src/components/ScaleLine/README.md +0 -29
  182. package/src/components/ScaleLine/ScaleLine.js +0 -50
  183. package/src/components/ScaleLine/ScaleLine.test.js +0 -30
  184. package/src/components/ScaleLine/__snapshots__/ScaleLine.test.js.snap +0 -7
  185. package/src/components/ScaleLine/index.js +0 -1
  186. package/src/components/StopsFinder/README.md +0 -50
  187. package/src/components/StopsFinder/StopsFinder.js +0 -284
  188. package/src/components/StopsFinder/StopsFinder.test.js +0 -17
  189. package/src/components/StopsFinder/StopsFinderOption.js +0 -61
  190. package/src/components/StopsFinder/__snapshots__/StopsFinder.test.js.snap +0 -133
  191. package/src/components/StopsFinder/index.js +0 -1
  192. package/src/components/Zoom/README.md +0 -25
  193. package/src/components/Zoom/Zoom.js +0 -180
  194. package/src/components/Zoom/Zoom.test.js +0 -141
  195. package/src/components/Zoom/__snapshots__/Zoom.test.js.snap +0 -201
  196. package/src/components/Zoom/index.js +0 -1
  197. package/src/styleguidist/ComponentsList.js +0 -52
  198. package/src/styleguidist/StyleGuide.js +0 -277
  199. package/src/styleguidist/styleguidist.css +0 -38
  200. package/src/utils/GlobalsForOle.js +0 -99
  201. package/src/utils/KML.js +0 -594
  202. package/src/utils/KML.test.js +0 -337
  203. package/src/utils/KMLFormat.js +0 -100
  204. package/src/utils/KMLFormat.test.js +0 -50
  205. package/src/utils/__snapshots__/KML.test.js.snap.KML-readFeatures()-and-writeFeatures()-should-read-and-write-lineDash-and-fillPattern-style-for-polygon.canvas-image.png +0 -0
  206. package/src/utils/__snapshots__/getPolygonPattern.test.js.snap.getPolygonPattern()-render-pattern-2-(cross)-color-and-(light-blue)-opacity.canvas-image.png +0 -0
  207. package/src/utils/__snapshots__/getPolygonPattern.test.js.snap.getPolygonPattern()-render-pattern-3-(diagonal-line-from-bottom-left-tot-top-right)-with-color-(light-blue)-and-opacity.canvas-image.png +0 -0
  208. package/src/utils/__snapshots__/getPolygonPattern.test.js.snap.getPolygonPattern()-render-pattern-4-(diagonal-line-from-top-left-to-bottom-right)-with-color-(light-blue)-and-opacity.canvas-image.png +0 -0
  209. package/src/utils/getPolygonPattern.test.js +0 -61
  210. package/src/utils/timeUtils.test.js +0 -30
  211. package/styleguide.config.js +0 -251
  212. /package/{src/components → components}/BaseLayerSwitcher/BaseLayerSwitcher.md.scss +0 -0
  213. /package/{src/components → components}/BaseLayerSwitcher/BaseLayerSwitcher.scss +0 -0
  214. /package/{src/components → components}/BasicMap/BasicMap.md.scss +0 -0
  215. /package/{src/components → components}/CanvasSaveButton/CanvasSaveButton.md.scss +0 -0
  216. /package/{src/components → components}/Copyright/Copyright.md.scss +0 -0
  217. /package/{src/components → components}/FeatureExportButton/FeatureExportButton.md.scss +0 -0
  218. /package/{src/components → components}/FitExtent/FitExtent.md.scss +0 -0
  219. /package/{src/components → components}/Geolocation/Geolocation.md.scss +0 -0
  220. /package/{src/components → components}/Geolocation/Geolocation.scss +0 -0
  221. /package/{src/components → components}/LayerTree/LayerTree.md.scss +0 -0
  222. /package/{src/components → components}/LayerTree/LayerTree.scss +0 -0
  223. /package/{src/components → components}/MousePosition/MousePosition.md.scss +0 -0
  224. /package/{src/components → components}/NorthArrow/NorthArrow.scss +0 -0
  225. /package/{src/components → components}/Overlay/Overlay.md.scss +0 -0
  226. /package/{src/components → components}/Overlay/Overlay.scss +0 -0
  227. /package/{src/components → components}/Permalink/Permalink.md.scss +0 -0
  228. /package/{src/components → components}/Popup/Popup.md.scss +0 -0
  229. /package/{src/components → components}/Popup/Popup.scss +0 -0
  230. /package/{src/components → components}/RouteSchedule/RouteSchedule.md.scss +0 -0
  231. /package/{src/components → components}/RouteSchedule/RouteSchedule.scss +0 -0
  232. /package/{src/components → components}/ScaleLine/ScaleLine.scss +0 -0
  233. /package/{src/components → components}/Zoom/Zoom.md.scss +0 -0
  234. /package/{src/components → components}/Zoom/Zoom.scss +0 -0
  235. /package/{src/images → images}/RouteSchedule/firstStation.png +0 -0
  236. /package/{src/images → images}/RouteSchedule/lastStation.png +0 -0
  237. /package/{src/images → images}/RouteSchedule/line.png +0 -0
  238. /package/{src/images → images}/RouteSchedule/station.png +0 -0
  239. /package/{src/images → images}/baselayer/baselayer.basebright.png +0 -0
  240. /package/{src/images → images}/baselayer/baselayer.osm.png +0 -0
  241. /package/{src/images → images}/baselayer/baselayer.travic.png +0 -0
  242. /package/{src/images → images}/baselayer/open.topo.map.png +0 -0
  243. /package/{src/images → images}/baselayer/osm.baselayer.hot.png +0 -0
  244. /package/{src/images → images}/baselayer/osm.baselayer.png +0 -0
  245. /package/{src/images → images}/favicon.png +0 -0
  246. /package/{src/images → images}/geops_logo.png +0 -0
  247. /package/{src/images → images}/geops_logo.svg +0 -0
  248. /package/{src/images → images}/geops_qr.png +0 -0
  249. /package/{src/images → images}/mots/bus_poi-blue-01.svg +0 -0
  250. /package/{src/images → images}/mots/bus_poi-grey-01.svg +0 -0
  251. /package/{src/images → images}/mots/bus_round-blue-01.svg +0 -0
  252. /package/{src/images → images}/mots/bus_round-grey-01.svg +0 -0
  253. /package/{src/images → images}/mots/bus_square-blue-01.svg +0 -0
  254. /package/{src/images → images}/mots/bus_square-grey-01.svg +0 -0
  255. /package/{src/images → images}/mots/cable_car_poi-blue-01.svg +0 -0
  256. /package/{src/images → images}/mots/cable_car_poi-grey-01.svg +0 -0
  257. /package/{src/images → images}/mots/cable_car_round-blue-01.svg +0 -0
  258. /package/{src/images → images}/mots/cable_car_round-grey-01.svg +0 -0
  259. /package/{src/images → images}/mots/cable_car_square-blue-01.svg +0 -0
  260. /package/{src/images → images}/mots/cable_car_square-grey-01.svg +0 -0
  261. /package/{src/images → images}/mots/ferry_poi-blue-01.svg +0 -0
  262. /package/{src/images → images}/mots/ferry_poi-grey-01.svg +0 -0
  263. /package/{src/images → images}/mots/ferry_round-blue-01.svg +0 -0
  264. /package/{src/images → images}/mots/ferry_round-grey-01.svg +0 -0
  265. /package/{src/images → images}/mots/ferry_square-blue-01.svg +0 -0
  266. /package/{src/images → images}/mots/ferry_square-grey-01.svg +0 -0
  267. /package/{src/images → images}/mots/funicular_round-blue-01.svg +0 -0
  268. /package/{src/images → images}/mots/funicular_round-grey-01.svg +0 -0
  269. /package/{src/images → images}/mots/funicular_square-blue-01.svg +0 -0
  270. /package/{src/images → images}/mots/gondola_round-blue-01.svg +0 -0
  271. /package/{src/images → images}/mots/rail_poi-blue-01.svg +0 -0
  272. /package/{src/images → images}/mots/rail_poi-grey-01.svg +0 -0
  273. /package/{src/images → images}/mots/rail_round-blue-01.svg +0 -0
  274. /package/{src/images → images}/mots/rail_round-grey-01.svg +0 -0
  275. /package/{src/images → images}/mots/rail_square-blue-01.svg +0 -0
  276. /package/{src/images → images}/mots/rail_square-grey-01.svg +0 -0
  277. /package/{src/images → images}/mots/subway_round blue-01.svg +0 -0
  278. /package/{src/images → images}/mots/subway_round-blue-01.svg +0 -0
  279. /package/{src/images → images}/mots/tram_poi-blue-01.svg +0 -0
  280. /package/{src/images → images}/mots/tram_poi-grey-01.svg +0 -0
  281. /package/{src/images → images}/mots/tram_round-blue-01.svg +0 -0
  282. /package/{src/images → images}/mots/tram_round-grey-01.svg +0 -0
  283. /package/{src/images → images}/mots/tram_square-blue-01.svg +0 -0
  284. /package/{src/images → images}/mots/tram_square-grey-01.svg +0 -0
  285. /package/{src/images → images}/northArrow.svg +0 -0
  286. /package/{src/images → images}/northArrow.url.svg +0 -0
  287. /package/{src/images → images}/northArrowCircle.svg +0 -0
  288. /package/{src/images → images}/northArrowCircle.url.svg +0 -0
  289. /package/{src/themes → themes}/README.md +0 -0
  290. /package/{src/themes → themes}/default/components.scss +0 -0
  291. /package/{src/themes → themes}/default/examples.scss +0 -0
  292. /package/{src/themes → themes}/default/index.scss +0 -0
  293. /package/{src/themes → themes}/default/mixins.scss +0 -0
  294. /package/{src/themes → themes}/default/variables.scss +0 -0
@@ -1,487 +0,0 @@
1
- import React, { Component } from 'react';
2
- import PropTypes from 'prop-types';
3
- import { Layer, getLayersAsFlatArray } from 'mobility-toolbox-js/ol';
4
- import { unByKey } from 'ol/Observable';
5
-
6
- const propTypes = {
7
- /**
8
- * Layers provider.
9
- */
10
- layers: PropTypes.arrayOf(PropTypes.instanceOf(Layer)),
11
-
12
- /**
13
- * CSS class to apply on the container.
14
- */
15
- className: PropTypes.string,
16
-
17
- /**
18
- * Padding left to apply on each level.
19
- */
20
- padding: PropTypes.number,
21
-
22
- /**
23
- * Determine if the item is hidden in the tree or not.
24
- *
25
- * @param {object} item The item to hide or not.
26
- *
27
- * @return {bool} true if the item is not displayed in the tree
28
- */
29
- isItemHidden: PropTypes.func,
30
-
31
- /**
32
- * Determine the className used by the div containing the parent and its children.
33
- */
34
- getParentClassName: PropTypes.func,
35
-
36
- /**
37
- * Custom function to render an item in the tree.
38
- *
39
- * @param {object} item The item to render.
40
- *
41
- * @return {node} A jsx node.
42
- */
43
- renderItem: PropTypes.func,
44
-
45
- /**
46
- * Custom function to render only the content of an item in the tree.
47
- * inputProps und toggleProps can be used when calling the default renderItemContent function
48
- * (comp.renderItemContent(layer, inputProps, toggleProps)) to overwrite the default input and label props
49
- *
50
- * @param {Layer} layer The layer the item content is created for
51
- * @param {LayerTree} comp The LayerTree component.
52
- *
53
- * @return {node} A jsx node.
54
- */
55
- renderItemContent: PropTypes.func,
56
-
57
- /**
58
- * Custom function to render custom content before the list of children of an item.
59
- *
60
- * @param {object} item The item to render.
61
- *
62
- * @return {node} A jsx node.
63
- */
64
- renderBeforeItem: PropTypes.func,
65
-
66
- /**
67
- * Custom function to render custom content after the list of children of an item.
68
- *
69
- * @param {object} item The item to render.
70
- *
71
- * @return {node} A jsx node.
72
- */
73
- renderAfterItem: PropTypes.func,
74
-
75
- /**
76
- * Custom function to render the label.
77
- *
78
- * @param {string} item The label to render.
79
- * @param {LayerTree} comp The LayerTree component.
80
- *
81
- * @return {node} A jsx node.
82
- */
83
- renderLabel: PropTypes.func,
84
-
85
- /**
86
- * Object holding title for the layer tree's buttons.
87
- */
88
- titles: PropTypes.shape({
89
- /**
90
- * aria-label on checkbox to show layer.
91
- */
92
- layerShow: PropTypes.string,
93
- /**
94
- * aria-label on checkbox to hide layer.
95
- */
96
- layerHide: PropTypes.string,
97
- /**
98
- * title on button to show sublayers.
99
- */
100
- subLayerShow: PropTypes.string,
101
- /**
102
- * title on button to show sublayers.
103
- */
104
- subLayerHide: PropTypes.string,
105
- }),
106
-
107
- /**
108
- * Boolean determining whether children collapse/expand when their parent is toggled
109
- * @param {...(boolean|function)} expandChildren Boolean or function returning a boolean.
110
- * @return {boolean} True or false
111
- */
112
- expandChildren: PropTypes.oneOfType([PropTypes.bool, PropTypes.func]),
113
-
114
- /**
115
- * Translation function.
116
- * @param {function} Translation function returning the translated string.
117
- */
118
- t: PropTypes.func,
119
- };
120
-
121
- const defaultProps = {
122
- layers: [],
123
- className: 'rs-layer-tree',
124
- padding: 30,
125
- isItemHidden: () => {
126
- return false;
127
- },
128
- getParentClassName: () => {
129
- return undefined;
130
- },
131
- renderItem: null,
132
- renderItemContent: null,
133
- renderBeforeItem: null,
134
- renderAfterItem: null,
135
- renderLabel: (layer, layerComp) => {
136
- const { t } = layerComp.props;
137
- return t(layer.name);
138
- },
139
- titles: {
140
- layerShow: 'Show layer',
141
- layerHide: 'Hide layer',
142
- subLayerShow: 'Show sublayer',
143
- subLayerHide: 'Hide sublayer',
144
- },
145
- t: (s) => {
146
- return s;
147
- },
148
- expandChildren: false,
149
- };
150
-
151
- /**
152
- * The LayerTree component renders an interface for toggling
153
- * [mobility-toolbox-js layers](https://mobility-toolbox-js.geops.io/api/identifiers%20html#ol-layers)
154
- * and their corresponding child layers.
155
- */
156
-
157
- class LayerTree extends Component {
158
- constructor(props) {
159
- super(props);
160
-
161
- const { layers, isItemHidden } = this.props;
162
- const initialExpandedLayers = layers
163
- ? this.getExpandedLayers(
164
- layers.filter((l) => {
165
- return (
166
- !isItemHidden(l) &&
167
- (l.children || [])
168
- .filter((child) => {
169
- return child.visible;
170
- })
171
- .filter((c) => {
172
- return !isItemHidden(c);
173
- }).length
174
- );
175
- }),
176
- )
177
- : [];
178
-
179
- this.state = {
180
- rootLayer: new Layer(),
181
- expandedLayers: initialExpandedLayers,
182
- revision: 0,
183
- };
184
- // this.updateLayers = this.updateLayers.bind(this);
185
- this.olKeys = [];
186
- }
187
-
188
- componentDidMount() {
189
- this.updateLayers();
190
- }
191
-
192
- componentDidUpdate(prevProps) {
193
- const { layers } = this.props;
194
-
195
- if (layers !== prevProps.layers) {
196
- this.updateLayers();
197
- }
198
- }
199
-
200
- componentWillUnmount() {
201
- unByKey(this.olKeys);
202
- this.olKeys = [];
203
- }
204
-
205
- onInputClick(layer, toggle = false) {
206
- if (toggle) {
207
- this.onToggle(layer);
208
- } else if (layer.setVisible) {
209
- layer.setVisible(!layer.visible);
210
- } else {
211
- // eslint-disable-next-line no-param-reassign
212
- layer.visible = !layer.visible;
213
- }
214
- }
215
-
216
- onToggle(layer) {
217
- const { expandedLayers } = this.state;
218
- const pos = expandedLayers.indexOf(layer);
219
- if (pos > -1) {
220
- expandedLayers.splice(pos, 1);
221
- } else {
222
- expandedLayers.push(...this.getExpandedLayers([layer]));
223
- }
224
- this.setState({ expandedLayers });
225
- }
226
-
227
- /**
228
- * Get the always expanded ancestors (isAlwaysExpanded=true) of the given layers
229
- * together with the (given) initially expanded layers
230
- *
231
- * @param {Layer} layers Initially expanded layers
232
- * @return {Array.<Layer>} Initially expanded layers and all its always expanded ancestors
233
- */
234
- getExpandedLayers(layers) {
235
- const { isItemHidden } = this.props;
236
- const children = layers.flatMap((l) => {
237
- return l.children.filter((c) => {
238
- return !isItemHidden(c) && c.get('isAlwaysExpanded');
239
- });
240
- });
241
-
242
- if (!children.length) {
243
- return layers;
244
- }
245
- return [...layers, this.getExpandedLayers(children)].flat();
246
- }
247
-
248
- updateLayers() {
249
- const { layers, expandChildren } = this.props;
250
-
251
- // Update the root layer
252
- let rootLayer = new Layer();
253
- if (Array.isArray(layers)) {
254
- if (layers.length === 1) {
255
- [rootLayer] = layers;
256
- }
257
- rootLayer = new Layer({ children: layers });
258
- } else {
259
- rootLayer = layers;
260
- }
261
-
262
- getLayersAsFlatArray(rootLayer).forEach((layer) => {
263
- this.olKeys.push(
264
- layer.on('propertychange', () => {
265
- const { revision } = this.state;
266
- this.setState({ revision: revision + 1 });
267
- }),
268
- );
269
- });
270
-
271
- const state = { rootLayer };
272
- if (
273
- typeof expandChildren === 'function'
274
- ? expandChildren(layers)
275
- : expandChildren
276
- ) {
277
- state.expandedLayers = rootLayer.children.flatMap((l) => {
278
- return this.expandLayer(l);
279
- });
280
- }
281
-
282
- this.setState(state);
283
- }
284
-
285
- expandLayer(layer, expLayers = []) {
286
- const { isItemHidden } = this.props;
287
- if (layer.visible && !isItemHidden(layer)) {
288
- const children = layer.children
289
- .filter((c) => {
290
- return !isItemHidden(c) && !c.get('isAlwaysExpanded');
291
- })
292
- .flatMap((c) => {
293
- return this.expandLayer(c, expLayers);
294
- });
295
- return [...expLayers, ...children, layer];
296
- }
297
- return expLayers;
298
- }
299
-
300
- renderInput(layer, inputProps) {
301
- const { titles, isItemHidden } = this.props;
302
- let tabIndex = 0;
303
-
304
- if (
305
- !(layer.children || []).filter((c) => {
306
- return !isItemHidden(c);
307
- }).length
308
- ) {
309
- // We forbid focus on keypress event for first level layers and layers without children.
310
- tabIndex = -1;
311
- }
312
-
313
- const inputType = layer.get('group') ? 'radio' : 'checkbox';
314
- return (
315
- // eslint-disable-next-line jsx-a11y/label-has-associated-control,jsx-a11y/no-noninteractive-element-interactions
316
- <label
317
- className={`rs-layer-tree-input rs-layer-tree-input-${inputType} rs-${inputType}`}
318
- tabIndex={tabIndex}
319
- title={layer.visible ? titles.layerHide : titles.layerShow}
320
- aria-label={layer.visible ? titles.layerHide : titles.layerShow}
321
- onKeyPress={(e) => {
322
- if (e.which === 13) {
323
- this.onInputClick(layer);
324
- }
325
- }}
326
- >
327
- <input
328
- type={inputType}
329
- tabIndex={-1}
330
- checked={layer.visible}
331
- readOnly
332
- onClick={() => {
333
- return this.onInputClick(layer);
334
- }}
335
- // eslint-disable-next-line react/jsx-props-no-spreading
336
- {...inputProps}
337
- />
338
- <span />
339
- </label>
340
- );
341
- }
342
-
343
- renderArrow(layer) {
344
- const { isItemHidden } = this.props;
345
- const { expandedLayers } = this.state;
346
-
347
- if (
348
- !(layer.children || []).filter((c) => {
349
- return !isItemHidden(c);
350
- }).length ||
351
- layer.get('isAlwaysExpanded')
352
- ) {
353
- return null;
354
- }
355
-
356
- return (
357
- <div
358
- className={`rs-layer-tree-arrow rs-layer-tree-arrow-${
359
- !expandedLayers.includes(layer) ? 'collapsed' : 'expanded'
360
- }`}
361
- />
362
- );
363
- }
364
-
365
- // Render a button which expands/collapse the layer if there is children
366
- // or simulate a click on the input otherwise.
367
- renderToggleButton(layer, toggleProps) {
368
- const { t, titles, isItemHidden, renderLabel } = this.props;
369
- const { expandedLayers } = this.state;
370
-
371
- const onInputClick = () => {
372
- this.onInputClick(
373
- layer,
374
- (layer.children || []).filter((c) => {
375
- return !isItemHidden(c);
376
- }).length && !layer.get('isAlwaysExpanded'),
377
- );
378
- };
379
- const title = `${t(layer.name)} ${
380
- expandedLayers.includes(layer) ? titles.subLayerHide : titles.subLayerShow
381
- }`;
382
-
383
- return (
384
- <div
385
- role="button"
386
- tabIndex={0}
387
- className="rs-layer-tree-toggle"
388
- title={title}
389
- aria-expanded={expandedLayers.includes(layer)}
390
- aria-label={title}
391
- onClick={onInputClick}
392
- onKeyPress={onInputClick}
393
- // eslint-disable-next-line react/jsx-props-no-spreading
394
- {...toggleProps}
395
- >
396
- <div>{renderLabel(layer, this)}</div>
397
- {this.renderArrow(layer)}
398
- </div>
399
- );
400
- }
401
-
402
- renderItemContent(layer, inputProps = {}, toggleProps = {}) {
403
- return (
404
- <>
405
- {this.renderInput(layer, inputProps)}
406
- {this.renderToggleButton(layer, toggleProps)}
407
- </>
408
- );
409
- }
410
-
411
- renderItem(layer, level) {
412
- const { isItemHidden } = this.props;
413
- const { expandedLayers } = this.state;
414
- const {
415
- renderItem,
416
- renderItemContent,
417
- renderBeforeItem,
418
- renderAfterItem,
419
- padding,
420
- getParentClassName,
421
- } = this.props;
422
-
423
- const children = expandedLayers.includes(layer)
424
- ? [
425
- ...(layer.children || []).filter((c) => {
426
- return !isItemHidden(c);
427
- }),
428
- ]
429
- : [];
430
-
431
- if (renderItem) {
432
- return renderItem(layer, this.onInputClick, this.onToggle);
433
- }
434
-
435
- return (
436
- <div className={getParentClassName()} key={layer.key}>
437
- <div
438
- className={`rs-layer-tree-item ${layer.visible ? 'rs-visible' : ''}`}
439
- style={{
440
- paddingLeft: `${padding * level}px`,
441
- }}
442
- >
443
- {renderItemContent
444
- ? renderItemContent(layer, this)
445
- : this.renderItemContent(layer)}
446
- </div>
447
- {renderBeforeItem && renderBeforeItem(layer, level, this)}
448
- {[...children].reverse().map((child) => {
449
- return this.renderItem(child, level + 1);
450
- })}
451
- {renderAfterItem && renderAfterItem(layer, level, this)}
452
- </div>
453
- );
454
- }
455
-
456
- renderTree() {
457
- const { isItemHidden } = this.props;
458
- const { rootLayer } = this.state;
459
-
460
- if (!rootLayer?.children?.length) {
461
- return null;
462
- }
463
-
464
- return (
465
- <>
466
- {rootLayer.children
467
- .filter((l) => {
468
- return !isItemHidden(l);
469
- })
470
- .reverse()
471
- .map((l) => {
472
- return this.renderItem(l, 0);
473
- })}
474
- </>
475
- );
476
- }
477
-
478
- render() {
479
- const { className } = this.props;
480
- return <div className={className}>{this.renderTree()}</div>;
481
- }
482
- }
483
-
484
- LayerTree.propTypes = propTypes;
485
- LayerTree.defaultProps = defaultProps;
486
-
487
- export default LayerTree;