react-spatial 1.5.2 → 1.5.3

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 (295) hide show
  1. package/.github/workflows/conventional-pr-title.yml +21 -0
  2. package/.github/workflows/main.yml +28 -0
  3. package/.husky/commit-msg +4 -0
  4. package/.husky/post-checkout +4 -0
  5. package/.husky/post-merge +4 -0
  6. package/.husky/post-rebase +4 -0
  7. package/.husky/pre-commit +4 -0
  8. package/.nvmrc +1 -0
  9. package/.whitesource +8 -0
  10. package/CHANGELOG.md +65 -0
  11. package/DEVELOP.md +113 -0
  12. package/__mocks__/mapbox-gl.js +11 -0
  13. package/__mocks__/resize-observer-polyfill.js +9 -0
  14. package/babel.config.js +3 -0
  15. package/commitlint.config.js +1 -0
  16. package/data/topic1.js +119 -0
  17. package/data/topic2.js +28 -0
  18. package/doc/README.md +21 -0
  19. package/doc/doc-config.json +4 -0
  20. package/package.json +4 -3
  21. package/pull_request_template.md +16 -0
  22. package/renovate.json +4 -0
  23. package/scripts/read-pkg-json.js +17 -0
  24. package/src/components/BaseLayerSwitcher/BaseLayerSwitcher.js +322 -0
  25. package/src/components/BaseLayerSwitcher/BaseLayerSwitcher.test.js +69 -0
  26. package/src/components/BaseLayerSwitcher/README.md +61 -0
  27. package/src/components/BaseLayerSwitcher/__snapshots__/BaseLayerSwitcher.test.js.snap +88 -0
  28. package/src/components/BaseLayerSwitcher/index.js +1 -0
  29. package/src/components/BasicMap/BasicMap.js +413 -0
  30. package/src/components/BasicMap/BasicMap.test.js +281 -0
  31. package/src/components/BasicMap/README.md +18 -0
  32. package/src/components/BasicMap/index.js +1 -0
  33. package/{components → src/components}/CanvasSaveButton/CanvasSaveButton.js +320 -93
  34. package/src/components/CanvasSaveButton/CanvasSaveButton.test.js +148 -0
  35. package/src/components/CanvasSaveButton/README.md +76 -0
  36. package/src/components/CanvasSaveButton/__snapshots__/CanvasSaveButton.test.js.snap +76 -0
  37. package/src/components/CanvasSaveButton/index.js +1 -0
  38. package/src/components/Copyright/Copyright.js +89 -0
  39. package/src/components/Copyright/Copyright.test.js +134 -0
  40. package/src/components/Copyright/README.md +36 -0
  41. package/src/components/Copyright/index.js +1 -0
  42. package/src/components/FeatureExportButton/FeatureExportButton.js +118 -0
  43. package/src/components/FeatureExportButton/FeatureExportButton.test.js +417 -0
  44. package/src/components/FeatureExportButton/README.md +76 -0
  45. package/src/components/FeatureExportButton/__snapshots__/FeatureExportButton.test.js.snap +67 -0
  46. package/src/components/FeatureExportButton/index.js +1 -0
  47. package/src/components/FitExtent/FitExtent.js +62 -0
  48. package/src/components/FitExtent/FitExtent.test.js +48 -0
  49. package/src/components/FitExtent/README.md +34 -0
  50. package/src/components/FitExtent/__snapshots__/FitExtent.test.js.snap +13 -0
  51. package/src/components/FitExtent/index.js +1 -0
  52. package/{components → src/components}/Geolocation/Geolocation.js +144 -61
  53. package/src/components/Geolocation/Geolocation.test.js +267 -0
  54. package/src/components/Geolocation/README.md +25 -0
  55. package/src/components/Geolocation/__snapshots__/Geolocation.test.js.snap +92 -0
  56. package/src/components/Geolocation/index.js +1 -0
  57. package/src/components/LayerTree/LayerTree.js +487 -0
  58. package/src/components/LayerTree/LayerTree.test.js +337 -0
  59. package/src/components/LayerTree/README.md +92 -0
  60. package/src/components/LayerTree/__snapshots__/LayerTree.test.js.snap +1746 -0
  61. package/src/components/LayerTree/index.js +1 -0
  62. package/src/components/MousePosition/MousePosition.js +175 -0
  63. package/src/components/MousePosition/MousePosition.test.js +132 -0
  64. package/src/components/MousePosition/README.md +50 -0
  65. package/src/components/MousePosition/__snapshots__/MousePosition.test.js.snap +76 -0
  66. package/src/components/MousePosition/index.js +1 -0
  67. package/src/components/NorthArrow/NorthArrow.js +75 -0
  68. package/src/components/NorthArrow/NorthArrow.test.js +104 -0
  69. package/src/components/NorthArrow/README.md +59 -0
  70. package/src/components/NorthArrow/__snapshots__/NorthArrow.test.js.snap +117 -0
  71. package/src/components/NorthArrow/index.js +1 -0
  72. package/src/components/Overlay/Overlay.js +176 -0
  73. package/src/components/Overlay/Overlay.test.js +149 -0
  74. package/src/components/Overlay/README.md +59 -0
  75. package/src/components/Overlay/__snapshots__/Overlay.test.js.snap +9 -0
  76. package/src/components/Overlay/index.js +1 -0
  77. package/src/components/Permalink/Permalink.js +326 -0
  78. package/src/components/Permalink/Permalink.test.js +285 -0
  79. package/src/components/Permalink/README.md +105 -0
  80. package/src/components/Permalink/index.js +1 -0
  81. package/{components → src/components}/Popup/Popup.js +165 -55
  82. package/src/components/Popup/Popup.test.js +307 -0
  83. package/src/components/Popup/README.md +93 -0
  84. package/src/components/Popup/__snapshots__/Popup.test.js.snap +180 -0
  85. package/src/components/Popup/index.js +1 -0
  86. package/src/components/README.md +41 -0
  87. package/{components → src/components}/ResizeHandler/ResizeHandler.js +50 -15
  88. package/src/components/ResizeHandler/ResizeHandler.test.js +344 -0
  89. package/src/components/ResizeHandler/index.js +1 -0
  90. package/src/components/RouteSchedule/README.md +118 -0
  91. package/src/components/RouteSchedule/RouteSchedule.js +370 -0
  92. package/src/components/RouteSchedule/RouteSchedule.test.js +113 -0
  93. package/src/components/RouteSchedule/__snapshots__/RouteSchedule.test.js.snap +248 -0
  94. package/src/components/RouteSchedule/index.js +1 -0
  95. package/src/components/ScaleLine/README.md +29 -0
  96. package/src/components/ScaleLine/ScaleLine.js +50 -0
  97. package/src/components/ScaleLine/ScaleLine.test.js +30 -0
  98. package/src/components/ScaleLine/__snapshots__/ScaleLine.test.js.snap +7 -0
  99. package/src/components/ScaleLine/index.js +1 -0
  100. package/src/components/StopsFinder/README.md +50 -0
  101. package/src/components/StopsFinder/StopsFinder.js +284 -0
  102. package/src/components/StopsFinder/StopsFinder.test.js +17 -0
  103. package/src/components/StopsFinder/StopsFinderOption.js +61 -0
  104. package/src/components/StopsFinder/__snapshots__/StopsFinder.test.js.snap +133 -0
  105. package/src/components/StopsFinder/index.js +1 -0
  106. package/src/components/Zoom/README.md +25 -0
  107. package/src/components/Zoom/Zoom.js +180 -0
  108. package/src/components/Zoom/Zoom.test.js +141 -0
  109. package/src/components/Zoom/__snapshots__/Zoom.test.js.snap +201 -0
  110. package/src/components/Zoom/index.js +1 -0
  111. package/{propTypes.js → src/propTypes.js} +16 -12
  112. package/{setupTests.js → src/setupTests.js} +1 -1
  113. package/src/styleguidist/ComponentsList.js +52 -0
  114. package/src/styleguidist/StyleGuide.js +277 -0
  115. package/src/styleguidist/styleguidist.css +38 -0
  116. package/src/utils/GlobalsForOle.js +99 -0
  117. package/src/utils/KML.js +594 -0
  118. package/src/utils/KML.test.js +337 -0
  119. package/src/utils/KMLFormat.js +100 -0
  120. package/src/utils/KMLFormat.test.js +50 -0
  121. package/{utils → src/utils}/Styles.js +20 -14
  122. 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
  123. package/src/utils/__snapshots__/getPolygonPattern.test.js.snap.getPolygonPattern()-render-pattern-2-(cross)-color-and-(light-blue)-opacity.canvas-image.png +0 -0
  124. 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
  125. 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
  126. package/{utils → src/utils}/getPolygonPattern.js +34 -6
  127. package/src/utils/getPolygonPattern.test.js +61 -0
  128. package/src/utils/timeUtils.js +52 -0
  129. package/src/utils/timeUtils.test.js +30 -0
  130. package/styleguide.config.js +251 -0
  131. package/components/BaseLayerSwitcher/BaseLayerSwitcher.js +0 -231
  132. package/components/BaseLayerSwitcher/BaseLayerSwitcher.js.map +0 -7
  133. package/components/BaseLayerSwitcher/index.js +0 -1
  134. package/components/BaseLayerSwitcher/index.js.map +0 -7
  135. package/components/BasicMap/BasicMap.js +0 -278
  136. package/components/BasicMap/BasicMap.js.map +0 -7
  137. package/components/BasicMap/index.js +0 -1
  138. package/components/BasicMap/index.js.map +0 -7
  139. package/components/CanvasSaveButton/CanvasSaveButton.js.map +0 -7
  140. package/components/CanvasSaveButton/index.js +0 -1
  141. package/components/CanvasSaveButton/index.js.map +0 -7
  142. package/components/Copyright/Copyright.js +0 -55
  143. package/components/Copyright/Copyright.js.map +0 -7
  144. package/components/Copyright/index.js +0 -1
  145. package/components/Copyright/index.js.map +0 -7
  146. package/components/FeatureExportButton/FeatureExportButton.js +0 -62
  147. package/components/FeatureExportButton/FeatureExportButton.js.map +0 -7
  148. package/components/FeatureExportButton/index.js +0 -1
  149. package/components/FeatureExportButton/index.js.map +0 -7
  150. package/components/FitExtent/FitExtent.js +0 -32
  151. package/components/FitExtent/FitExtent.js.map +0 -7
  152. package/components/FitExtent/index.js +0 -1
  153. package/components/FitExtent/index.js.map +0 -7
  154. package/components/Geolocation/Geolocation.js.map +0 -7
  155. package/components/Geolocation/index.js +0 -1
  156. package/components/Geolocation/index.js.map +0 -7
  157. package/components/LayerTree/LayerTree.js +0 -278
  158. package/components/LayerTree/LayerTree.js.map +0 -7
  159. package/components/LayerTree/index.js +0 -1
  160. package/components/LayerTree/index.js.map +0 -7
  161. package/components/MousePosition/MousePosition.js +0 -110
  162. package/components/MousePosition/MousePosition.js.map +0 -7
  163. package/components/MousePosition/index.js +0 -1
  164. package/components/MousePosition/index.js.map +0 -7
  165. package/components/NorthArrow/NorthArrow.js +0 -43
  166. package/components/NorthArrow/NorthArrow.js.map +0 -7
  167. package/components/NorthArrow/index.js +0 -1
  168. package/components/NorthArrow/index.js.map +0 -7
  169. package/components/Overlay/Overlay.js +0 -122
  170. package/components/Overlay/Overlay.js.map +0 -7
  171. package/components/Overlay/index.js +0 -1
  172. package/components/Overlay/index.js.map +0 -7
  173. package/components/Permalink/Permalink.js +0 -206
  174. package/components/Permalink/Permalink.js.map +0 -7
  175. package/components/Permalink/index.js +0 -1
  176. package/components/Permalink/index.js.map +0 -7
  177. package/components/Popup/Popup.js.map +0 -7
  178. package/components/Popup/index.js +0 -1
  179. package/components/Popup/index.js.map +0 -7
  180. package/components/ResizeHandler/ResizeHandler.js.map +0 -7
  181. package/components/ResizeHandler/index.js +0 -1
  182. package/components/ResizeHandler/index.js.map +0 -7
  183. package/components/RouteSchedule/RouteSchedule.js +0 -220
  184. package/components/RouteSchedule/RouteSchedule.js.map +0 -7
  185. package/components/RouteSchedule/index.js +0 -1
  186. package/components/RouteSchedule/index.js.map +0 -7
  187. package/components/ScaleLine/ScaleLine.js +0 -32
  188. package/components/ScaleLine/ScaleLine.js.map +0 -7
  189. package/components/ScaleLine/index.js +0 -1
  190. package/components/ScaleLine/index.js.map +0 -7
  191. package/components/StopsFinder/StopsFinder.js +0 -210
  192. package/components/StopsFinder/StopsFinder.js.map +0 -7
  193. package/components/StopsFinder/StopsFinderOption.js +0 -51
  194. package/components/StopsFinder/StopsFinderOption.js.map +0 -7
  195. package/components/StopsFinder/index.js +0 -1
  196. package/components/StopsFinder/index.js.map +0 -7
  197. package/components/Zoom/Zoom.js +0 -130
  198. package/components/Zoom/Zoom.js.map +0 -7
  199. package/components/Zoom/index.js +0 -1
  200. package/components/Zoom/index.js.map +0 -7
  201. package/propTypes.js.map +0 -7
  202. package/setupTests.js.map +0 -7
  203. package/utils/GlobalsForOle.js +0 -94
  204. package/utils/GlobalsForOle.js.map +0 -7
  205. package/utils/KML.js +0 -412
  206. package/utils/KML.js.map +0 -7
  207. package/utils/KMLFormat.js +0 -69
  208. package/utils/KMLFormat.js.map +0 -7
  209. package/utils/Styles.js.map +0 -7
  210. package/utils/getPolygonPattern.js.map +0 -7
  211. package/utils/timeUtils.js +0 -31
  212. package/utils/timeUtils.js.map +0 -7
  213. /package/{components → src/components}/BaseLayerSwitcher/BaseLayerSwitcher.md.scss +0 -0
  214. /package/{components → src/components}/BaseLayerSwitcher/BaseLayerSwitcher.scss +0 -0
  215. /package/{components → src/components}/BasicMap/BasicMap.md.scss +0 -0
  216. /package/{components → src/components}/CanvasSaveButton/CanvasSaveButton.md.scss +0 -0
  217. /package/{components → src/components}/Copyright/Copyright.md.scss +0 -0
  218. /package/{components → src/components}/FeatureExportButton/FeatureExportButton.md.scss +0 -0
  219. /package/{components → src/components}/FitExtent/FitExtent.md.scss +0 -0
  220. /package/{components → src/components}/Geolocation/Geolocation.md.scss +0 -0
  221. /package/{components → src/components}/Geolocation/Geolocation.scss +0 -0
  222. /package/{components → src/components}/LayerTree/LayerTree.md.scss +0 -0
  223. /package/{components → src/components}/LayerTree/LayerTree.scss +0 -0
  224. /package/{components → src/components}/MousePosition/MousePosition.md.scss +0 -0
  225. /package/{components → src/components}/NorthArrow/NorthArrow.scss +0 -0
  226. /package/{components → src/components}/Overlay/Overlay.md.scss +0 -0
  227. /package/{components → src/components}/Overlay/Overlay.scss +0 -0
  228. /package/{components → src/components}/Permalink/Permalink.md.scss +0 -0
  229. /package/{components → src/components}/Popup/Popup.md.scss +0 -0
  230. /package/{components → src/components}/Popup/Popup.scss +0 -0
  231. /package/{components → src/components}/RouteSchedule/RouteSchedule.md.scss +0 -0
  232. /package/{components → src/components}/RouteSchedule/RouteSchedule.scss +0 -0
  233. /package/{components → src/components}/ScaleLine/ScaleLine.scss +0 -0
  234. /package/{components → src/components}/Zoom/Zoom.md.scss +0 -0
  235. /package/{components → src/components}/Zoom/Zoom.scss +0 -0
  236. /package/{images → src/images}/RouteSchedule/firstStation.png +0 -0
  237. /package/{images → src/images}/RouteSchedule/lastStation.png +0 -0
  238. /package/{images → src/images}/RouteSchedule/line.png +0 -0
  239. /package/{images → src/images}/RouteSchedule/station.png +0 -0
  240. /package/{images → src/images}/baselayer/baselayer.basebright.png +0 -0
  241. /package/{images → src/images}/baselayer/baselayer.osm.png +0 -0
  242. /package/{images → src/images}/baselayer/baselayer.travic.png +0 -0
  243. /package/{images → src/images}/baselayer/open.topo.map.png +0 -0
  244. /package/{images → src/images}/baselayer/osm.baselayer.hot.png +0 -0
  245. /package/{images → src/images}/baselayer/osm.baselayer.png +0 -0
  246. /package/{images → src/images}/favicon.png +0 -0
  247. /package/{images → src/images}/geops_logo.png +0 -0
  248. /package/{images → src/images}/geops_logo.svg +0 -0
  249. /package/{images → src/images}/geops_qr.png +0 -0
  250. /package/{images → src/images}/mots/bus_poi-blue-01.svg +0 -0
  251. /package/{images → src/images}/mots/bus_poi-grey-01.svg +0 -0
  252. /package/{images → src/images}/mots/bus_round-blue-01.svg +0 -0
  253. /package/{images → src/images}/mots/bus_round-grey-01.svg +0 -0
  254. /package/{images → src/images}/mots/bus_square-blue-01.svg +0 -0
  255. /package/{images → src/images}/mots/bus_square-grey-01.svg +0 -0
  256. /package/{images → src/images}/mots/cable_car_poi-blue-01.svg +0 -0
  257. /package/{images → src/images}/mots/cable_car_poi-grey-01.svg +0 -0
  258. /package/{images → src/images}/mots/cable_car_round-blue-01.svg +0 -0
  259. /package/{images → src/images}/mots/cable_car_round-grey-01.svg +0 -0
  260. /package/{images → src/images}/mots/cable_car_square-blue-01.svg +0 -0
  261. /package/{images → src/images}/mots/cable_car_square-grey-01.svg +0 -0
  262. /package/{images → src/images}/mots/ferry_poi-blue-01.svg +0 -0
  263. /package/{images → src/images}/mots/ferry_poi-grey-01.svg +0 -0
  264. /package/{images → src/images}/mots/ferry_round-blue-01.svg +0 -0
  265. /package/{images → src/images}/mots/ferry_round-grey-01.svg +0 -0
  266. /package/{images → src/images}/mots/ferry_square-blue-01.svg +0 -0
  267. /package/{images → src/images}/mots/ferry_square-grey-01.svg +0 -0
  268. /package/{images → src/images}/mots/funicular_round-blue-01.svg +0 -0
  269. /package/{images → src/images}/mots/funicular_round-grey-01.svg +0 -0
  270. /package/{images → src/images}/mots/funicular_square-blue-01.svg +0 -0
  271. /package/{images → src/images}/mots/gondola_round-blue-01.svg +0 -0
  272. /package/{images → src/images}/mots/rail_poi-blue-01.svg +0 -0
  273. /package/{images → src/images}/mots/rail_poi-grey-01.svg +0 -0
  274. /package/{images → src/images}/mots/rail_round-blue-01.svg +0 -0
  275. /package/{images → src/images}/mots/rail_round-grey-01.svg +0 -0
  276. /package/{images → src/images}/mots/rail_square-blue-01.svg +0 -0
  277. /package/{images → src/images}/mots/rail_square-grey-01.svg +0 -0
  278. /package/{images → src/images}/mots/subway_round blue-01.svg +0 -0
  279. /package/{images → src/images}/mots/subway_round-blue-01.svg +0 -0
  280. /package/{images → src/images}/mots/tram_poi-blue-01.svg +0 -0
  281. /package/{images → src/images}/mots/tram_poi-grey-01.svg +0 -0
  282. /package/{images → src/images}/mots/tram_round-blue-01.svg +0 -0
  283. /package/{images → src/images}/mots/tram_round-grey-01.svg +0 -0
  284. /package/{images → src/images}/mots/tram_square-blue-01.svg +0 -0
  285. /package/{images → src/images}/mots/tram_square-grey-01.svg +0 -0
  286. /package/{images → src/images}/northArrow.svg +0 -0
  287. /package/{images → src/images}/northArrow.url.svg +0 -0
  288. /package/{images → src/images}/northArrowCircle.svg +0 -0
  289. /package/{images → src/images}/northArrowCircle.url.svg +0 -0
  290. /package/{themes → src/themes}/README.md +0 -0
  291. /package/{themes → src/themes}/default/components.scss +0 -0
  292. /package/{themes → src/themes}/default/examples.scss +0 -0
  293. /package/{themes → src/themes}/default/index.scss +0 -0
  294. /package/{themes → src/themes}/default/mixins.scss +0 -0
  295. /package/{themes → src/themes}/default/variables.scss +0 -0
@@ -0,0 +1,92 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Geolocation should match snapshot minimum props 1`] = `
4
+ <div
5
+ className="rs-geolocation "
6
+ onClick={[Function]}
7
+ onKeyPress={[Function]}
8
+ role="button"
9
+ tabIndex="0"
10
+ >
11
+ <svg
12
+ fill="currentColor"
13
+ focusable={false}
14
+ height="1em"
15
+ stroke="currentColor"
16
+ strokeWidth="0"
17
+ style={
18
+ {
19
+ "color": undefined,
20
+ }
21
+ }
22
+ viewBox="0 0 512 512"
23
+ width="1em"
24
+ xmlns="http://www.w3.org/2000/svg"
25
+ >
26
+ <path
27
+ d="M256 56c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m0-48C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 168c-44.183 0-80 35.817-80 80s35.817 80 80 80 80-35.817 80-80-35.817-80-80-80z"
28
+ />
29
+ </svg>
30
+ </div>
31
+ `;
32
+
33
+ exports[`Geolocation should match snapshot with class name 1`] = `
34
+ <div
35
+ className="my-class-name "
36
+ onClick={[Function]}
37
+ onKeyPress={[Function]}
38
+ role="button"
39
+ tabIndex="0"
40
+ >
41
+ <svg
42
+ fill="currentColor"
43
+ focusable={false}
44
+ height="1em"
45
+ stroke="currentColor"
46
+ strokeWidth="0"
47
+ style={
48
+ {
49
+ "color": undefined,
50
+ }
51
+ }
52
+ viewBox="0 0 512 512"
53
+ width="1em"
54
+ xmlns="http://www.w3.org/2000/svg"
55
+ >
56
+ <path
57
+ d="M256 56c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m0-48C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 168c-44.183 0-80 35.817-80 80s35.817 80 80 80 80-35.817 80-80-35.817-80-80-80z"
58
+ />
59
+ </svg>
60
+ </div>
61
+ `;
62
+
63
+ exports[`Geolocation should match snapshot with title 1`] = `
64
+ <div
65
+ className="rs-geolocation "
66
+ onClick={[Function]}
67
+ onKeyPress={[Function]}
68
+ role="button"
69
+ tabIndex="0"
70
+ title="Lokalisieren"
71
+ >
72
+ <svg
73
+ fill="currentColor"
74
+ focusable={false}
75
+ height="1em"
76
+ stroke="currentColor"
77
+ strokeWidth="0"
78
+ style={
79
+ {
80
+ "color": undefined,
81
+ }
82
+ }
83
+ viewBox="0 0 512 512"
84
+ width="1em"
85
+ xmlns="http://www.w3.org/2000/svg"
86
+ >
87
+ <path
88
+ d="M256 56c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m0-48C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 168c-44.183 0-80 35.817-80 80s35.817 80 80 80 80-35.817 80-80-35.817-80-80-80z"
89
+ />
90
+ </svg>
91
+ </div>
92
+ `;
@@ -0,0 +1 @@
1
+ export { default } from './Geolocation';
@@ -0,0 +1,487 @@
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;